From 464fc07236b1a0db7956fe90d1f01e0cc07a308b Mon Sep 17 00:00:00 2001 From: Andrew Janke Date: Tue, 30 Jan 2024 19:56:30 -0500 Subject: [PATCH] style: convert to standard Octave format * convert full-line % comments to # * convert ~ negations to ! * convert generic 'end's to specific 'end's * trim trailing whitespace * add an .editorconfig Does not do "(...)" around if/while/for predicates. --- .editorconfig | 20 + .../+chrono/+internal/+algo/binsearch.m | 78 +- .../+chrono/+internal/+tzinfo/PosixZoneRule.m | 12 +- inst/+tblish/+chrono/+internal/+tzinfo/TzDb.m | 124 +- .../+chrono/+internal/+tzinfo/TzInfo.m | 107 +- .../+chrono/+internal/+tzinfo/TzZoneFile.m | 34 +- .../+tzinfo/WindowsIanaZoneConverter.m | 14 +- .../+internal/+tzinfo/ZoneFileSectionParser.m | 32 +- .../+internal/detect_system_timezone.m | 42 +- inst/+tblish/+chrono/+internal/findFiles.m | 6 +- .../+chrono/+internal/format_dispstr_array.m | 6 +- inst/+tblish/+chrono/+internal/mustBeIntVal.m | 4 +- inst/+tblish/+chrono/+internal/mustBeScalar.m | 6 +- inst/+tblish/+chrono/+internal/mycombvec.m | 10 +- inst/+tblish/+chrono/+internal/num2cellstr.m | 4 +- .../+internal/prefillNewSizeForSubsasgn.m | 4 +- .../+chrono/+internal/prettyprint_array.m | 14 +- inst/+tblish/+chrono/+internal/scalarexpand.m | 8 +- inst/+tblish/+chrono/+internal/size2str.m | 18 +- .../+chrono/+internal/slurpBinaryFile.m | 4 +- .../+tblish/+chrono/+internal/slurpTextFile.m | 6 +- inst/+tblish/+chrono/+internal/sprintfv.m | 28 +- inst/+tblish/+chrono/DummyClass.m | 18 +- inst/+tblish/+chrono/dummy_function.m | 8 +- .../+internal/+datasets/AirPassengers_1.m | 2 +- .../+examples/+internal/+datasets/BJsales_1.m | 2 +- .../+examples/+internal/+datasets/BOD_1.m | 2 +- .../+internal/+datasets/Formaldehyde_1.m | 6 +- .../+examples/+internal/+datasets/Nile_1.m | 2 +- .../+internal/+datasets/USAccDeaths_1.m | 2 +- .../+internal/+datasets/USJudgeRatings_1.m | 2 +- .../+internal/+datasets/airmiles_1.m | 2 +- .../+internal/+datasets/anscombe_1.m | 2 +- .../+examples/+internal/+datasets/austres_1.m | 2 +- .../+examples/+internal/+datasets/crimtab_1.m | 2 +- .../+internal/+datasets/faithful_1.m | 8 +- .../+examples/+internal/+datasets/iris_1.m | 2 +- .../+examples/+internal/+datasets/lh_1.m | 2 +- .../+examples/+internal/+datasets/state_1.m | 2 +- .../+internal/+datasets/sunspot_year_1.m | 2 +- inst/+tblish/+examples/SpDb.m | 24 +- inst/+tblish/+examples/coplot.m | 8 +- .../+examples/peel_off_name_value_options.m | 100 +- inst/+tblish/+examples/plot_pairs.m | 8 +- .../private/peelOffNameValueOptions.m | 8 +- .../+examples/run_all_example_scripts.m | 10 +- .../+datasets/@AirPassengers/AirPassengers.m | 4 +- .../+internal/+datasets/@BJsales/BJsales.m | 4 +- inst/+tblish/+internal/+datasets/@BOD/BOD.m | 2 +- .../+datasets/@ChickWeight/ChickWeight.m | 2 +- .../+internal/+datasets/@DNase/DNase.m | 2 +- .../@EuStockMarkets/EuStockMarkets.m | 3726 ++++++++--------- .../+datasets/@Formaldehyde/Formaldehyde.m | 2 +- .../+datasets/@HairEyeColor/HairEyeColor.m | 2 +- .../+datasets/@Harman23cor/Harman23cor.m | 4 +- .../+datasets/@Harman74cor/Harman74cor.m | 18 +- .../+internal/+datasets/@Indometh/Indometh.m | 2 +- .../+datasets/@InsectSprays/InsectSprays.m | 2 +- .../@JohnsonJohnson/JohnsonJohnson.m | 2 +- .../+datasets/@LakeHuron/LakeHuron.m | 4 +- .../@LifeCycleSavings/LifeCycleSavings.m | 2 +- .../+internal/+datasets/@Loblolly/Loblolly.m | 2 +- inst/+tblish/+internal/+datasets/@Nile/Nile.m | 2 +- .../+internal/+datasets/@Orange/Orange.m | 2 +- .../+datasets/@OrchardSprays/OrchardSprays.m | 2 +- .../+datasets/@PlantGrowth/PlantGrowth.m | 2 +- .../+datasets/@Puromycin/Puromycin.m | 2 +- .../+internal/+datasets/@Theoph/Theoph.m | 2 +- .../+internal/+datasets/@Titanic/Titanic.m | 4 +- .../+datasets/@ToothGrowth/ToothGrowth.m | 2 +- .../+datasets/@UCBAdmissions/UCBAdmissions.m | 2 +- .../@UKDriverDeaths/UKDriverDeaths.m | 2 +- .../+datasets/@UKLungDeaths/UKLungDeaths.m | 2 +- .../+internal/+datasets/@UKgas/UKgas.m | 2 +- .../+datasets/@USAccDeaths/USAccDeaths.m | 16 +- .../+datasets/@USArrests/USArrests.m | 2 +- .../@USJudgeRatings/USJudgeRatings.m | 2 +- .../USPersonalExpenditure.m | 2 +- .../+internal/+datasets/@VADeaths/VADeaths.m | 2 +- .../+internal/+datasets/@WWWusage/WWWusage.m | 2 +- .../+datasets/@WorldPhones/WorldPhones.m | 4 +- .../+internal/+datasets/@airmiles/airmiles.m | 8 +- .../+datasets/@airquality/airquality.m | 2 +- .../+internal/+datasets/@anscombe/anscombe.m | 2 +- .../+internal/+datasets/@attenu/attenu.m | 2 +- .../+internal/+datasets/@attitude/attitude.m | 2 +- .../+internal/+datasets/@austres/austres.m | 2 +- .../+internal/+datasets/@beavers/beavers.m | 8 +- inst/+tblish/+internal/+datasets/@cars/cars.m | 2 +- .../+internal/+datasets/@chickwts/chickwts.m | 2 +- inst/+tblish/+internal/+datasets/@co2/co2.m | 6 +- .../+internal/+datasets/@crimtab/crimtab.m | 2 +- .../+internal/+datasets/@cupcake/cupcake.m | 4 +- .../+datasets/@discoveries/discoveries.m | 2 +- .../+internal/+datasets/@esoph/esoph.m | 2 +- inst/+tblish/+internal/+datasets/@euro/euro.m | 2 +- .../+internal/+datasets/@eurodist/eurodist.m | 4 +- .../+internal/+datasets/@faithful/faithful.m | 2 +- .../+internal/+datasets/@freeny/freeny.m | 2 +- .../+internal/+datasets/@infert/infert.m | 2 +- inst/+tblish/+internal/+datasets/@iris/iris.m | 60 +- .../+internal/+datasets/@islands/islands.m | 2 +- inst/+tblish/+internal/+datasets/@lh/lh.m | 2 +- .../+internal/+datasets/@longley/longley.m | 2 +- inst/+tblish/+internal/+datasets/@lynx/lynx.m | 2 +- .../+internal/+datasets/@morley/morley.m | 2 +- .../+internal/+datasets/@mtcars/mtcars.m | 4 +- .../+internal/+datasets/@nhtemp/nhtemp.m | 2 +- .../+internal/+datasets/@nottem/nottem.m | 2 +- inst/+tblish/+internal/+datasets/@npk/npk.m | 2 +- .../@occupationalStatus/occupationalStatus.m | 2 +- .../+internal/+datasets/@precip/precip.m | 2 +- .../+datasets/@presidents/presidents.m | 2 +- .../+internal/+datasets/@pressure/pressure.m | 2 +- .../+internal/+datasets/@quakes/quakes.m | 2 +- .../+internal/+datasets/@randu/randu.m | 2 +- .../+internal/+datasets/@rivers/rivers.m | 20 +- inst/+tblish/+internal/+datasets/@rock/rock.m | 2 +- .../+internal/+datasets/@sleep/sleep.m | 2 +- .../+datasets/@stackloss/stackloss.m | 2 +- .../+internal/+datasets/@state/state.m | 2 +- .../+datasets/@sunspot_month/sunspot_month.m | 2 +- .../+datasets/@sunspot_year/sunspot_year.m | 2 +- .../+internal/+datasets/@sunspots/sunspots.m | 2 +- .../+internal/+datasets/@swiss/swiss.m | 4 +- .../+internal/+datasets/@treering/treering.m | 2 +- .../+internal/+datasets/@trees/trees.m | 2 +- .../+internal/+datasets/@uspop/uspop.m | 2 +- .../+internal/+datasets/@volcano/volcano.m | 2 +- .../+datasets/@warpbreaks/warpbreaks.m | 2 +- .../+internal/+datasets/@women/women.m | 2 +- inst/+tblish/+internal/+datasets/@zCO2/zCO2.m | 2 +- inst/+tblish/+internal/dataset.m | 122 +- inst/+tblish/+internal/fillValForVal.m | 16 +- .../+internal/generate_datasets_list.m | 6 +- inst/+tblish/+internal/load_tablicious.m | 32 +- .../+internal/parse_ismissing_indicator.m | 30 +- inst/+tblish/+internal/splitapply_impl.m | 10 +- inst/+tblish/+internal/unload_tablicious.m | 24 +- inst/+tblish/+table/+internal/gen_colvecfun.m | 14 +- inst/+tblish/+table/+internal/matchrows.m | 114 +- inst/+tblish/+table/+internal/mx_summary.m | 20 +- .../+tblish/+table/+internal/vartype_filter.m | 10 +- inst/+tblish/dataset.m | 2186 +++++----- inst/+tblish/datasets.m | 8 +- inst/NaC.m | 12 +- inst/NaS.m | 12 +- inst/NaT.m | 12 +- inst/array2table.m | 16 +- inst/calendarDuration.m | 318 +- inst/calmonths.m | 8 +- inst/calyears.m | 4 +- inst/categorical.m | 546 +-- inst/cell2table.m | 25 +- inst/colvecfun.m | 4 +- inst/contains.m | 18 +- inst/datetime.m | 498 +-- inst/days.m | 26 +- inst/discretize.m | 14 +- inst/dispstrs.m | 4 +- inst/duration.m | 370 +- inst/eqn.m | 20 +- inst/examples/ex_01_suppliers_parts.m | 30 +- inst/hours.m | 14 +- inst/iscalendarduration.m | 12 +- inst/iscategorical.m | 10 +- inst/isdatetime.m | 12 +- inst/isduration.m | 12 +- inst/isnanny.m | 4 +- inst/istable.m | 24 +- inst/localdate.m | 392 +- inst/milliseconds.m | 14 +- inst/minutes.m | 14 +- inst/missing.m | 254 +- inst/mustBeSameSize.m | 6 +- inst/mustBeScalar.m | 2 +- inst/pp.m | 30 +- ...eval_expr_with_table_vars_in_workspace__.m | 10 +- inst/private/format_dispstr_array.m | 6 +- inst/private/intersect_stable.m | 4 +- inst/private/mycombvec.m | 10 +- inst/private/num2cellstr.m | 4 +- inst/private/peelOffNameValueOptions.m | 8 +- inst/private/prettyprint_array.m | 14 +- inst/private/setdiff_stable.m | 2 +- inst/private/sprintfv.m | 28 +- inst/proxykeysForMatrixes.m | 164 +- inst/scalarexpand.m | 6 +- inst/seconds.m | 14 +- inst/shims/compat/all/isstring.m | 2 +- inst/shims/compat/pre-6.0.0/mustBeInteger.m | 2 +- inst/shims/compat/pre-6.0.0/mustBeMember.m | 2 +- inst/shims/compat/pre-6.0.0/mustBeNumeric.m | 2 +- inst/shims/compat/pre-7.0.0/endsWith.m | 8 +- inst/shims/compat/pre-7.0.0/startsWith.m | 8 +- inst/string.m | 596 +-- inst/struct2table.m | 12 +- inst/table.m | 1077 ++--- inst/timezones.m | 40 +- inst/vecfun.m | 4 +- inst/years.m | 28 +- 201 files changed, 6125 insertions(+), 6100 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..f34ef7ea --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +# EditorConfig for Tablicious +# +# This is set up to conform to standard GNU Octave code style, to the extent that +# EditorConfig supports that. +# +# See: https://wiki.octave.org/Octave_style_guide + +root = true + +[*] +insert_final_newline = true +charset = utf-8 +indent_style = space +trim_trailing_whitespace = true + +[*.m] +indent_size = 2 + +[*.cc] +indent_size = 2 diff --git a/inst/+tblish/+chrono/+internal/+algo/binsearch.m b/inst/+tblish/+chrono/+internal/+algo/binsearch.m index b4af4509..2f73f06c 100644 --- a/inst/+tblish/+chrono/+internal/+algo/binsearch.m +++ b/inst/+tblish/+chrono/+internal/+algo/binsearch.m @@ -1,52 +1,52 @@ function [tf, loc] = binsearch (needles, haystack) - %BINSEARCH Binary search - % - % [tf, loc] = binsearch (needles, haystack) - % - % Searches for needles in haystack. Needles and haystack must both be doubles. - % Haystack must be a sorted vector. (The sortedness is not checked, for speed: - % if it is not sorted, you will just get wrong answers instead of raising an - % error. - % - % This does the same thing as ismember(), but is faster for large inputs, with - % an additional restriction that the array to search through must be sorted. - % - % The input type must have a total ordering over the values present in needles - % and haystack. That means you can't pass in NaNs or anything that behaves - % like them. - % - % Returns arrays the same size as needles. tf is a logical array indicating - % whether each element was found. loc is an array of indexes, either where it - % was found, or if not found, -1 * the index of the element where it should be - % inserted; that is, the index of the first element larger than it, or one past - % the end of the array if it is larger than all the elements in the haystack. - - if ~isvector (haystack) && ~isempty (haystack) + #BINSEARCH Binary search + # + # [tf, loc] = binsearch (needles, haystack) + # + # Searches for needles in haystack. Needles and haystack must both be doubles. + # Haystack must be a sorted vector. (The sortedness is not checked, for speed: + # if it is not sorted, you will just get wrong answers instead of raising an + # error. + # + # This does the same thing as ismember(), but is faster for large inputs, with + # an additional restriction that the array to search through must be sorted. + # + # The input type must have a total ordering over the values present in needles + # and haystack. That means you can't pass in NaNs or anything that behaves + # like them. + # + # Returns arrays the same size as needles. tf is a logical array indicating + # whether each element was found. loc is an array of indexes, either where it + # was found, or if not found, -1 * the index of the element where it should be + # inserted; that is, the index of the first element larger than it, or one past + # the end of the array if it is larger than all the elements in the haystack. + + if !isvector (haystack) && !isempty (haystack) error ('haystack must be a vector or empty'); - end - if ~isequal (class (needles), class (haystack)) + endif + if !isequal (class (needles), class (haystack)) error ('needles and haystack must be same type; got %s and %s', ... class (needles), class (haystack)); - end - - % Use exact type test to avoid false-positives from objects overriding isnumeric() + endif + + # Use exact type test to avoid false-positives from objects overriding isnumeric() numeric_types = {'double' 'single' 'int8' 'int16' 'int32' 'int64' ... 'uint8' 'uint16' 'uint32' 'uint64'}; is_numeric = ismember (class (needles), numeric_types); - + if is_numeric if iscomplex (needles) || iscomplex (haystack) error ('Complex values are not supported'); - end + endif loc = double (__tblish_time_binsearch__ (needles, haystack)); else loc = binsearch_mcode (needles, haystack); - end + endif tf = loc > 0; -end +endfunction function out = binsearch_mcode (vals, arr) - %BINSEARCH_MCODE Native M-code implementation of binsearch + #BINSEARCH_MCODE Native M-code implementation of binsearch out = NaN (size (vals)); for i_val = 1:numel (vals) val = vals(i_val); @@ -65,10 +65,10 @@ break; else error('Total ordering violation: neither <, >, nor == was true for this value.'); - end - end - if ~found + endif + endwhile + if !found out(i) = -1 * low; - end - end -end + endif + endfor +endfunction diff --git a/inst/+tblish/+chrono/+internal/+tzinfo/PosixZoneRule.m b/inst/+tblish/+chrono/+internal/+tzinfo/PosixZoneRule.m index 63c6d63b..cb249e5b 100644 --- a/inst/+tblish/+chrono/+internal/+tzinfo/PosixZoneRule.m +++ b/inst/+tblish/+chrono/+internal/+tzinfo/PosixZoneRule.m @@ -1,6 +1,6 @@ classdef PosixZoneRule - %POSIXZONERULE A POSIX-style time zone rule - + #POSIXZONERULE A POSIX-style time zone rule + properties local_timezone std_name @@ -9,11 +9,11 @@ dst_start_rule dst_end_rule endproperties - + methods (Static) function out = parseZoneRule (str) out = tblish.chrono.internal.algo.PosixZoneRule; - if ~isrow (in) + if !isrow (in) error ('in must be charvec; got non-row char'); endif els = strsplit (in, ','); @@ -43,11 +43,11 @@ this = tblish.chrono.internal.tzinfo.PosixZoneRule.parseZoneRule(in); endif endfunction - + function out = gmtToLocalDatenum (this, dnums) error ('Unimplemented'); endfunction - + function out = localToGmtDatenum (this, dnums, isDst) error ('Unimplemented'); endfunction diff --git a/inst/+tblish/+chrono/+internal/+tzinfo/TzDb.m b/inst/+tblish/+chrono/+internal/+tzinfo/TzDb.m index e2545c6c..314b48b5 100644 --- a/inst/+tblish/+chrono/+internal/+tzinfo/TzDb.m +++ b/inst/+tblish/+chrono/+internal/+tzinfo/TzDb.m @@ -17,18 +17,18 @@ ## . classdef TzDb - %TZDB Interface to the tzinfo database - % - % This class is an interface to the tzinfo database (AKA the Olson database) - + #TZDB Interface to the tzinfo database + # + # This class is an interface to the tzinfo database (AKA the Olson database) + properties - % Path to the zoneinfo directory + # Path to the zoneinfo directory path endproperties - + methods (Static) function out = instance () - %INSTANCE Shared global instance of TzDb + #INSTANCE Shared global instance of TzDb persistent value if isempty (value) value = tblish.chrono.internal.tzinfo.TzDb; @@ -39,13 +39,13 @@ methods function this = TzDb (path) - %TZDB Construct a new TzDb object - % - % this = TzDb (path) - % - % path (char) is the path to the tzinfo database directory. If omitted or - % empty, it defaults to the default path ('/usr/share/zoneinfo' on Unix, - % and an error on Windows). + #TZDB Construct a new TzDb object + # + # this = TzDb (path) + # + # path (char) is the path to the tzinfo database directory. If omitted or + # empty, it defaults to the default path ('/usr/share/zoneinfo' on Unix, + # and an error on Windows). if nargin < 1; path = []; endif if isempty (path) this.path = tblish.chrono.internal.tzinfo.TzDb.defaultPath; @@ -53,41 +53,41 @@ this.path = path; endif endfunction - + function out = dbVersion (this) - %DBVERSION Version of the zoneinfo database this is reading - % - % out = dbVersion (this) - % - % Returns the zoneinfo database version as a string. + #DBVERSION Version of the zoneinfo database this is reading + # + # out = dbVersion (this) + # + # Returns the zoneinfo database version as a string. versionFile = [this.path '/+VERSION']; txt = tblish.chrono.internal.slurpTextFile (versionFile); out = strtrim (txt); endfunction - + function out = zoneTab (this) - %ZONETAB Get the zone definition table - % - % This lists the metadata from the "zone.tab" file included in the - % zoneinfo database. - % - % Returns a struct with fields: - % CountryCode - % Coordinates - % TZ - % Comments - % Each of which contains a cellstr column vector. + #ZONETAB Get the zone definition table + # + # This lists the metadata from the "zone.tab" file included in the + # zoneinfo database. + # + # Returns a struct with fields: + # CountryCode + # Coordinates + # TZ + # Comments + # Each of which contains a cellstr column vector. persistent data if isempty (data) data = this.readZoneTab; endif out = data; endfunction - + function out = definedZones (this) - %DEFINEDZONES List defined zone IDs - % - % out = definedZones (this) + #DEFINEDZONES List defined zone IDs + # + # out = definedZones (this) persistent value if isempty (value) specialFiles = {'+VERSION', 'iso3166.tab', 'zone.tab', 'posixrules'}; @@ -99,20 +99,20 @@ endif out = value; endfunction - + function out = zoneDefinition (this, zoneId) - %ZONEDEFINITION Get the time zone definition for a given time zone - % - % out = zoneDefinition (this, zoneId) - % - % zoneId (char) is the time zone identifier in IANA format. For example, - % 'UTC' or 'America/New_York'. - % - % Returns the zone definition as an object. (This is currently under - % construction; it now returns a placeholder struct.) + #ZONEDEFINITION Get the time zone definition for a given time zone + # + # out = zoneDefinition (this, zoneId) + # + # zoneId (char) is the time zone identifier in IANA format. For example, + # 'UTC' or 'America/New_York'. + # + # Returns the zone definition as an object. (This is currently under + # construction; it now returns a placeholder struct.) s = this.readZoneFile (zoneId); - % We prefer the version 2 stuff + # We prefer the version 2 stuff out = tblish.chrono.internal.tzinfo.TzInfo; if isfield (s, 'section2') defn_s = s.section2; @@ -125,15 +125,15 @@ out = calculateDerivedData (out); endfunction endmethods - + methods (Access = private) function out = readZoneTab (this) - %READZONETAB Actually read and parse the zonetab file - - % Use the "deprecated" plain zone.tab because zone1970.tab is not present - % on all systems. + #READZONETAB Actually read and parse the zonetab file + + # Use the "deprecated" plain zone.tab because zone1970.tab is not present + # on all systems. zoneTabFile = [this.path '/zone.tab']; - + txt = tblish.chrono.internal.slurpTextFile (zoneTabFile); lines = strsplit (txt, sprintf('\n')); starts = regexp (lines, '^\s*#|^\s*$', 'start', 'once'); @@ -144,23 +144,23 @@ pattern = '^(\w+)\s+(\S+)\s+(\S+)\s*(.*)'; [match,tok] = regexp (lines, pattern, 'match', 'tokens'); tfMatch = ~cellfun ('isempty', match); - if ~all (tfMatch) - ixBad = find (~tfMatch); + if !all (tfMatch) + ixBad = find (!tfMatch); error ('Failed parsing line in zone.tab file: "%s"', lines{ixBad(1)}); endif tok = cat (1, tok{:}); tok = cat (1, tok{:}); - + out = struct; out.CountryCode = tok(:,1); out.Coordinates = tok(:,2); out.TZ = tok(:,3); out.Comments = tok(:,4); endfunction - + function out = readZoneFile (this, zoneId) - %READZONEFILE Read and parse a zone definition file - if ~ismember (zoneId, this.definedZones) + #READZONEFILE Read and parse a zone definition file + if !ismember (zoneId, this.definedZones) error ("Undefined time zone: '%s'", zoneId); endif zoneFile = [this.path '/' zoneId]; @@ -173,7 +173,7 @@ tzZoneFile = tblish.chrono.internal.tzinfo.TzZoneFile (zoneFile); out = tzZoneFile.readZoneFile (); endfunction - + function [out, n_bytes_read] = parseZoneSection(this, data, sectionFormat) parser = tblish.chrono.internal.tzinfo.ZoneFileSectionParser; parser.data = data; @@ -186,8 +186,8 @@ methods (Static) function out = defaultPath () if ispc - % Use the zoneinfo database bundled with Tablicious, because Windows doesn't - % supply one. + # Use the zoneinfo database bundled with Tablicious, because Windows doesn't + # supply one. this_dir = fileparts (mfilename ('fullpath')); out = fullfile (this_dir, 'resources', 'zoneinfo'); else diff --git a/inst/+tblish/+chrono/+internal/+tzinfo/TzInfo.m b/inst/+tblish/+chrono/+internal/+tzinfo/TzInfo.m index 5cd994e9..eb9a7445 100644 --- a/inst/+tblish/+chrono/+internal/+tzinfo/TzInfo.m +++ b/inst/+tblish/+chrono/+internal/+tzinfo/TzInfo.m @@ -17,25 +17,25 @@ ## . classdef TzInfo - %TZINFO Zone definition for a single time zone - % - + #TZINFO Zone definition for a single time zone + # + properties (Constant) utcZoneAliases = {'Etc/GMT' 'Etc/GMT+0' 'Etc/GMT-0' 'Etc/Greenwich' ... 'Etc/UCT' 'Etc/UTC' 'Etc/Universal' 'GMT' 'GMT+0' 'GMT-0' 'GMT0' ... 'Greenwich' 'UCT' 'UTC' 'Universal' 'Zulu'}; endproperties - + properties id formatId - % These fields are all parallel + # These fields are all parallel transitions transitionsLocal transitionsDatenum transitionsLocalDatenum timeTypes % index into ttinfos.*(ix), 1-indexed - % struct + # struct ttinfos leapTimes leapSecondTotals @@ -43,14 +43,14 @@ isGmt goingForwardPosixZone endproperties - + methods function this = TzInfo(in) if nargin == 0 return; - end + endif if isstruct (in) - % Convert from TzDb's tzinfo struct + # Convert from TzDb's tzinfo struct s = in; this.id = s.zoneId; this.formatId = s.header.format_id; @@ -63,17 +63,17 @@ this.isGmt = s.is_gmt; if isfield (s, 'goingForwardPosixZone') this.goingForwardPosixZone = s.goingForwardPosixZone; - %this.goingForwardPosixZoneRule = tblish.chrono.internal.tzinfo.PosixZoneRule(... - % this.goingForwardPosixZone); + #this.goingForwardPosixZoneRule = tblish.chrono.internal.tzinfo.PosixZoneRule(... + # this.goingForwardPosixZone); endif this = calculateDerivedData (this); else error ('Invalid input type: %s', class (in)); endif endfunction - + function this = calculateDerivedData (this) - %CALCULATEDERIVEDDATA Calculate this' derived data fields. + #CALCULATEDERIVEDDATA Calculate this' derived data fields. this.ttinfos.gmtoff = double (this.ttinfos.gmtoff); this.ttinfos.gmtoffDatenum = tblish.chrono.internal.tzinfo.TzInfo.secondsToDatenum (this.ttinfos.gmtoff); gmtoffsAtTransitions = this.ttinfos.gmtoff(this.timeTypes); @@ -81,20 +81,20 @@ this.transitionsDatenum = datetime.posix2datenum (this.transitions); this.transitionsLocalDatenum = datetime.posix2datenum (this.transitionsLocal); endfunction - - % Display - + + # Display + function display (this) - %DISPLAY Custom display. + #DISPLAY Custom display. in_name = inputname (1); - if ~isempty (in_name) + if !isempty (in_name) fprintf ('%s =\n', in_name); endif disp (this); endfunction function disp (this) - %DISP Custom display. + #DISP Custom display. if isempty (this) fprintf ('Empty %s %s\n', tblish.chrono.internal.size2str (size (this)), class (this)); elseif isscalar (this) @@ -104,10 +104,10 @@ function disp (this) fprintf ('%s: %s\n', class (this), tblish.chrono.internal.size2str (size (this))); endif endfunction - + function prettyprint (this) - %PRETTYPRINT Display this' data in human-readable format. - if ~isscalar (this) + #PRETTYPRINT Display this' data in human-readable format. + if !isscalar (this) fprintf ('%s: %s\n', class (this), tblish.chrono.internal.size2str (size (this))); return; endif @@ -135,7 +135,7 @@ function prettyprint (this) fprintf (' %12s %20s\n', 'time', 'leap seconds'); for i = 1:numel (this.leapTimes) fprintf (' %12d %20d\n', this.leapTimes(i), this.leapSecondsTotal(i)); - endfor + endfor endif fprintf ('is_std:\n'); function out = num2cellstr (x) @@ -144,7 +144,7 @@ function prettyprint (this) fprintf (' %s\n', strjoin (num2cellstr (this.isStd), ' ')); fprintf ('is_gmt:\n'); fprintf (' %s\n', strjoin (num2cellstr (this.isGmt), ' ')); - if ~isempty (this.goingForwardPosixZone) + if !isempty (this.goingForwardPosixZone) fprintf ('posix_zone:\n'); fprintf (' %s\n', this.goingForwardPosixZone); endif @@ -152,69 +152,69 @@ function prettyprint (this) function out = localtimeToGmt (this, dnum) if ismember (this.id, tblish.chrono.internal.tzinfo.TzInfo.utcZoneAliases) - % Have to special-case this because it relies on POSIX zone rules, which - % are not implemented yet + # Have to special-case this because it relies on POSIX zone rules, which + # are not implemented yet offsets = zeros (size (dnum)); else - % The time zone record is identified by finding the last record whose start - % time is less than or equal to the local time. - % This is a slow implementation. Once proved correct, this should be - % replaced by an oct-file that does a modified binary search to find - % the right transition point. (It has to be a *modified* bin search - % because the local times for transitions are not necessarily monotonic increasing. - % I think.) + # The time zone record is identified by finding the last record whose start + # time is less than or equal to the local time. + # This is a slow implementation. Once proved correct, this should be + # replaced by an oct-file that does a modified binary search to find + # the right transition point. (It has to be a *modified* bin search + # because the local times for transitions are not necessarily monotonic increasing. + # I think.) tf = false (size (dnum)); loc = NaN (size (dnum)); for i_dnum = 1:numel(dnum) d = dnum(i_dnum); ix = find(this.transitionsLocalDatenum <= d, 1, "last"); - if ~isempty(ix) + if !isempty(ix) tf(i_dnum) = true; loc(i_dnum) = ix; endif endfor - %[tf,loc] = tblish.chrono.internal.algo.binsearch (dnum, this.transitionsLocalDatenum); + #[tf,loc] = tblish.chrono.internal.algo.binsearch (dnum, this.transitionsLocalDatenum); ix = loc; tfOutOfRange = isnan(ix) | ix == numel (this.transitions); - % In-range dates take their period's gmt offset + # In-range dates take their period's gmt offset offsets = NaN (size (dnum)); - offsets(~tfOutOfRange) = this.ttinfos.gmtoffDatenum(this.timeTypes(ix(~tfOutOfRange))); - % Out-of-range dates are handled by the POSIX look-ahead zone + offsets(!tfOutOfRange) = this.ttinfos.gmtoffDatenum(this.timeTypes(ix(!tfOutOfRange))); + # Out-of-range dates are handled by the POSIX look-ahead zone if any (tfOutOfRange(:)) - % TODO: Implement this + # TODO: Implement this error ('POSIX zone rules are unimplemented'); endif endif out = dnum - offsets; endfunction - + function out = gmtToLocaltime (this, dnum) if ismember(this.id, tblish.chrono.internal.tzinfo.TzInfo.utcZoneAliases) - % Have to special-case this because it relies on POSIX zone rules, which - % are not implemented yet + # Have to special-case this because it relies on POSIX zone rules, which + # are not implemented yet offsets = zeros( size (dnum)); else [tf,loc] = tblish.chrono.internal.algo.binsearch (dnum, this.transitionsDatenum); ix = loc; - ix(~tf) = (-loc(~tf)) - 1; % ix is now index of the transition each dnum is after + ix(!tf) = (-loc(!tf)) - 1; % ix is now index of the transition each dnum is after tfOutOfRange = ix == 0 | ix == numel(this.transitions); - % In-range dates take their period's gmt offset + # In-range dates take their period's gmt offset offsets = NaN (size (dnum)); - offsets(~tfOutOfRange) = this.ttinfos.gmtoffDatenum(this.timeTypes(ix(~tfOutOfRange))); - % Out-of-range dates are handled by the POSIX look-ehead zone + offsets(!tfOutOfRange) = this.ttinfos.gmtoffDatenum(this.timeTypes(ix(!tfOutOfRange))); + # Out-of-range dates are handled by the POSIX look-ehead zone if any (tfOutOfRange(:)) - % TODO: Implement this + # TODO: Implement this error ('POSIX zone rules are unimplemented'); endif endif out = dnum + offsets; endfunction - - end - + + endmethods + methods (Access = private) function displayCommonInfo (this) - %DISPLAYCOMMONINFO Info common to disp() and prettyprint() + #DISPLAYCOMMONINFO Info common to disp() and prettyprint() formatId = this.formatId; if formatId == 0 formatId = '1'; @@ -229,16 +229,17 @@ function displayCommonInfo (this) numel (this.transitions), numel (this.ttinfos.gmtoff), numel (this.leapTimes)); fprintf (' %d is_stds, %d is_gmts\n', ... numel (this.isStd), numel (this.isGmt)); - if ~isempty (this.goingForwardPosixZone) + if !isempty (this.goingForwardPosixZone) fprintf (' Forward-looking POSIX zone: %s\n', this.goingForwardPosixZone); endif endfunction endmethods - + methods (Static) function out = secondsToDatenum (secs) out = double (secs) / (60 * 60 * 24); endfunction endmethods + endclassdef diff --git a/inst/+tblish/+chrono/+internal/+tzinfo/TzZoneFile.m b/inst/+tblish/+chrono/+internal/+tzinfo/TzZoneFile.m index 808ed7b6..241a2959 100644 --- a/inst/+tblish/+chrono/+internal/+tzinfo/TzZoneFile.m +++ b/inst/+tblish/+chrono/+internal/+tzinfo/TzZoneFile.m @@ -29,7 +29,7 @@ classdef TzZoneFile properties (SetAccess = private) - % Path to the zone file + # Path to the zone file file endproperties @@ -39,7 +39,7 @@ if nargin == 0 return endif - if ~isfile(file) + if !isfile(file) error('tblish.chrono:NoSuchFile', ... 'Cannot read TZ zone file: no such file: %s', file); endif @@ -47,31 +47,31 @@ endfunction function out = readZoneFile (this) - %READZONEFILE Read and parse a zone definition file + #READZONEFILE Read and parse a zone definition file if ~exist (this.file) - % This shouldn't happen unless the file has been moved on disk since - % object construction. + # This shouldn't happen unless the file has been moved on disk since + # object construction. error('No such file: %s', this.file); endif data = tblish.chrono.internal.slurpBinaryFile (this.file); - - % Parse tzinfo format file + + # Parse tzinfo format file ix = 1; section_data = data(ix:end); [section1, n_bytes_read] = this.parseZoneSection (section_data, 1); out.section1 = section1; - - % Version 2 stuff + + # Version 2 stuff if ismember (section1.header.format_id, {'2','3'}) - % A whole nother header/data, except using 8-byte transition/leap times + # A whole nother header/data, except using 8-byte transition/leap times ix = ix + n_bytes_read; - % Scan for the magic cookie to double-check our parsing. + # Scan for the magic cookie to double-check our parsing. magic_ixs = strfind (char (data(ix:end)), 'TZif'); if isempty (magic_ixs) - % No second section found + # No second section found else - % Advance to where we found the magic cookie + # Advance to where we found the magic cookie if magic_ixs(1) ~= 1 warning (['Unexpected extra data at end of section in tzinfo file for %s.\n' ... 'Possible bug in chrono''s parsing code.'], zoneId); @@ -80,8 +80,8 @@ section_data = data(ix:end); [out.section2, n_bytes_read_2] = this.parseZoneSection (section_data, 2); ix = ix + n_bytes_read_2; - % And then there's the going-forward zone at the end. - % The first LF should be the very next byte. + # And then there's the going-forward zone at the end. + # The first LF should be the very next byte. data_left = data(ix:end); ixLF = find (data_left == uint8 (sprintf ('\n'))); if numel (ixLF) >= 2 @@ -90,7 +90,7 @@ endif endif endfunction - + function [out, n_bytes_read] = parseZoneSection(this, data, sectionFormat) parser = tblish.chrono.internal.tzinfo.ZoneFileSectionParser; parser.data = data; @@ -100,4 +100,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+chrono/+internal/+tzinfo/WindowsIanaZoneConverter.m b/inst/+tblish/+chrono/+internal/+tzinfo/WindowsIanaZoneConverter.m index ee30cfeb..3979289b 100644 --- a/inst/+tblish/+chrono/+internal/+tzinfo/WindowsIanaZoneConverter.m +++ b/inst/+tblish/+chrono/+internal/+tzinfo/WindowsIanaZoneConverter.m @@ -17,8 +17,8 @@ ## . classdef WindowsIanaZoneConverter - %WINDOWSIANAZONECONVERTER Converts between Windows and IANA zone ids - + #WINDOWSIANAZONECONVERTER Converts between Windows and IANA zone ids + methods function out = windows2iana (this, winZoneId) map = getZoneMap (this); @@ -32,7 +32,7 @@ out = ianas{1}; else [tf,loc] = ismember ('001', territories); - if ~tf + if !tf out = ianas{1}; warning (['No "001" territory found for Windows time zone ''%s'' in map file. ' ... 'Guessing IANA zone randomly as ''%s''.'], ... @@ -42,11 +42,11 @@ endif endif endfunction - + function out = iana2windows (this, ianaZoneId) map = getZoneMap (this); [tf,loc] = ismember (ianaZoneId, map.Iana); - if ~tf + if !tf error ('Unrecognized IANA time zone ID: ''%s''', ianaZoneId); endif out = map.Windows{loc}; @@ -59,12 +59,12 @@ endif out = cache; endfunction - + function out = readWindowsZonesFile (this) this_dir = fileparts (mfilename ('fullpath')); zones_file = fullfile (this_dir, 'resources', 'windowsZones', 'windowsZones.xml'); txt = tblish.chrono.internal.slurpTextFile (zones_file); - % Base Octave doesn't have XML reading, so we'll kludge it with regexps + # Base Octave doesn't have XML reading, so we'll kludge it with regexps pattern = ''; [starts,tok] = regexp (txt, pattern, 'start', 'tokens'); tok = cat (1, tok{:}); diff --git a/inst/+tblish/+chrono/+internal/+tzinfo/ZoneFileSectionParser.m b/inst/+tblish/+chrono/+internal/+tzinfo/ZoneFileSectionParser.m index a6a5b7a8..6c46a497 100644 --- a/inst/+tblish/+chrono/+internal/+tzinfo/ZoneFileSectionParser.m +++ b/inst/+tblish/+chrono/+internal/+tzinfo/ZoneFileSectionParser.m @@ -16,7 +16,7 @@ ## along with Octave; see the file COPYING. If not, see ## . -## This class exists for Octave 4.2 compatibility: something about having a +## This class exists for Octave 4.2 compatibility: something about having a ## method with nested closures (my old implementation approach) is causing it ## to break, with an undefined function input even though one was supplied ## by the caller. @@ -27,7 +27,7 @@ data ix = 1 % A "cursor" index into data endproperties - + methods function out = take_byte (this, n) if nargin < 2; n = 1; end @@ -70,17 +70,17 @@ my_ix = 1; while my_bytes(my_ix) ~= 0 my_ix = my_ix + 1; - end + endwhile out = char (my_bytes(1:my_ix - 1)); endfunction function [out, nBytesRead] = parseZoneSection (this) - %PARSEZONESECTION Parse one section of a tzinfo file - - % "get" functions read/convert data; "take" functions read/convert and - % advance the cursor + #PARSEZONESECTION Parse one section of a tzinfo file + + # "get" functions read/convert data; "take" functions read/convert and + # advance the cursor - % Header + # Header h.magic = this.take_byte (4); h.magic_char = char (h.magic); format_id_byte = this.take_byte; @@ -95,8 +95,8 @@ h.n_time = counts_vals(4); h.n_type = counts_vals(5); h.n_char = counts_vals(6); - - % Body + + # Body transitions = this.take_timeval (h.n_time); time_types = this.take_byte (h.n_time); ttinfos = struct ('gmtoff', int32 ([]), 'isdst', uint8 ([]), 'abbrind', uint8 ([])); @@ -108,12 +108,12 @@ for i = 1:h.n_type take_ttinfo; endfor - % It's not clearly documented, but following the ttinfo section are a - % series of null-terminated strings which hold the abbreviations. There's - % no length indicator for them, so we have to scan for the null after the - % last string. + # It's not clearly documented, but following the ttinfo section are a + # series of null-terminated strings which hold the abbreviations. There's + # no length indicator for them, so we have to scan for the null after the + # last string. abbrs = {}; - if ~isempty (ttinfos.abbrind) + if !isempty (ttinfos.abbrind) last_abbrind = max (ttinfos.abbrind); ix_end = this.ix + double (last_abbrind); while this.data(ix_end) ~= 0 @@ -152,4 +152,4 @@ endfunction endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+chrono/+internal/detect_system_timezone.m b/inst/+tblish/+chrono/+internal/detect_system_timezone.m index 4ce7f7d6..52c1eadb 100644 --- a/inst/+tblish/+chrono/+internal/detect_system_timezone.m +++ b/inst/+tblish/+chrono/+internal/detect_system_timezone.m @@ -20,7 +20,7 @@ try out = do_detection (); tzdb = tblish.chrono.internal.tzinfo.TzDb; - if ~ismember (out, tzdb.definedZones) + if !ismember (out, tzdb.definedZones) warning ('System time zone ''%s'' is not defined in the tzinfo database.', ... out); endif @@ -33,45 +33,45 @@ endfunction function out = do_detection () - %DO_DETECTION Actual detection logic - + #DO_DETECTION Actual detection logic + out = []; - % Let TZ env var take precedence + # Let TZ env var take precedence tz_env = getenv ('TZ'); - if ~isempty (tz_env) + if !isempty (tz_env) out = tz_env; endif - % Get actual system default, using OS-specific mechanisms + # Get actual system default, using OS-specific mechanisms if isempty (out) && isfile ('/etc/localtime') - % This exists on macOS and RHEL/CentOS 7/some Fedora - % By convention, when it's a symlink, it points into a file whose path is the same - % as the IANA time zone identifier. + # This exists on macOS and RHEL/CentOS 7/some Fedora + # By convention, when it's a symlink, it points into a file whose path is the same + # as the IANA time zone identifier. [target,err,msg] = readlink ('/etc/localtime'); if err - % It's not a symlink. And we can't pull the zone name out of the file contents - % because zone info files do not store their names internally. (LOL.) - % Ignore and fall back to another detection method + # It's not a symlink. And we can't pull the zone name out of the file contents + # because zone info files do not store their names internally. (LOL.) + # Ignore and fall back to another detection method else out = regexprep (target, '.*/zoneinfo/', ''); endif endif if isempty (out) && exist ('/etc/timezone') - % This exists on Debian + # This exists on Debian out = strtrim (tblish.chrono.internal.slurpTextFile ('/etc/timezone')); endif if isempty (out) && ispc - % Newer Windows can do it with PowerShell + # Newer Windows can do it with PowerShell win_zone = detect_timezone_using_powershell; - if ~isempty (win_zone) + if !isempty (win_zone) converter = tblish.chrono.internal.tzinfo.WindowsIanaZoneConverter; out = converter.windows2iana (win_zone); endif endif if isempty (out) - % Fall back to Java if nothing else worked - if ~usejava ('jvm') + # Fall back to Java if nothing else worked + if !usejava ('jvm') warning ('tablicious:TimeZoneDetectionFailure', 'Detecting time zone on this OS requires Java, which is not available in this Octave build.'); else zone = javaMethod ('getDefault', 'java.util.TimeZone'); @@ -84,8 +84,8 @@ endfunction function out = detect_timezone_using_powershell () - % This only works on Windows Vista or newer. Windows 7 and older lack the - % Get-TimeZone command. + # This only works on Windows Vista or newer. Windows 7 and older lack the + # Get-TimeZone command. [status, txt] = system ('powershell -Command Get-TimeZone'); if status ~= 0 out = []; @@ -97,7 +97,7 @@ return endif out = info.Id; -end +endfunction function out = parse_powershell_get_timezone_output (str) str = strrep (str, "\r\n", "\n"); @@ -109,4 +109,4 @@ tok = cat(1, tok{:}); out = cell2struct(tok(:,2), tok(:,1)); endif -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+chrono/+internal/findFiles.m b/inst/+tblish/+chrono/+internal/findFiles.m index 38b12928..13a32bd4 100644 --- a/inst/+tblish/+chrono/+internal/findFiles.m +++ b/inst/+tblish/+chrono/+internal/findFiles.m @@ -17,7 +17,7 @@ ## . function out = findFiles (dirPath) - %FINDFILES Recursively find files under a directory + #FINDFILES Recursively find files under a directory out = findFilesStep (dirPath, ''); endfunction @@ -27,7 +27,7 @@ for i = 1:numel (d) f = d(i); if f.isdir - % Can't use spaces here or syntax error happens + # Can't use spaces here or syntax error happens found = [found findFilesStep(fullfile (dirPath, f.name), ... fullfile(pathPrefix, f.name))]; else @@ -42,4 +42,4 @@ names = {d.name}; out = d; out(ismember (names, {'.','..'})) = []; -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+chrono/+internal/format_dispstr_array.m b/inst/+tblish/+chrono/+internal/format_dispstr_array.m index 1529a30b..f1141a9b 100644 --- a/inst/+tblish/+chrono/+internal/format_dispstr_array.m +++ b/inst/+tblish/+chrono/+internal/format_dispstr_array.m @@ -17,7 +17,7 @@ ## . function out = format_dispstr_array (strs) - %FORMAT_DISPSTR_ARRAY Format an array of strings as a matrix display + #FORMAT_DISPSTR_ARRAY Format an array of strings as a matrix display if ismatrix (strs) out = prettyprint_matrix (strs); @@ -47,7 +47,7 @@ endfunction function out = prettyprint_matrix (strs) - if ~ismatrix (strs) + if !ismatrix (strs) error ('Input must be matrix; got %d-D', ndims (strs)); endif lens = cellfun ('prodofsize', strs); @@ -59,4 +59,4 @@ lines{i} = sprintf (format, strs{i,:}); endfor out = strjoin (lines, '\n'); -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+chrono/+internal/mustBeIntVal.m b/inst/+tblish/+chrono/+internal/mustBeIntVal.m index 6a67ca78..8ca4ce40 100644 --- a/inst/+tblish/+chrono/+internal/mustBeIntVal.m +++ b/inst/+tblish/+chrono/+internal/mustBeIntVal.m @@ -19,5 +19,5 @@ function mustBeIntVal(x) if any(any(fix(x) ~= x)) error('Input %s must be an integer value', inputname(1)); - end -end + endif +endfunction diff --git a/inst/+tblish/+chrono/+internal/mustBeScalar.m b/inst/+tblish/+chrono/+internal/mustBeScalar.m index 95ffa54f..b1fc26f5 100644 --- a/inst/+tblish/+chrono/+internal/mustBeScalar.m +++ b/inst/+tblish/+chrono/+internal/mustBeScalar.m @@ -17,7 +17,7 @@ ## . function mustBeScalar(x) - if ~isscalar(x) + if !isscalar(x) error('Input %s must be scalar', inputname(1)); - end -end + endif +endfunction diff --git a/inst/+tblish/+chrono/+internal/mycombvec.m b/inst/+tblish/+chrono/+internal/mycombvec.m index ba012858..e27ce521 100644 --- a/inst/+tblish/+chrono/+internal/mycombvec.m +++ b/inst/+tblish/+chrono/+internal/mycombvec.m @@ -17,12 +17,12 @@ ## . function out = mycombvec (vecs) - %MYCOMBVEC All combinations of values from vectors - % - % This is similar to Matlab's combvec, but has a different signature. - if ~iscell (vecs) + #MYCOMBVEC All combinations of values from vectors + # + # This is similar to Matlab's combvec, but has a different signature. + if !iscell (vecs) error ('Input vecs must be cell'); - end + endif switch numel (vecs) case 0 error ('Must supply at least one input vector'); diff --git a/inst/+tblish/+chrono/+internal/num2cellstr.m b/inst/+tblish/+chrono/+internal/num2cellstr.m index 9c9f896a..d7a4acd8 100644 --- a/inst/+tblish/+chrono/+internal/num2cellstr.m +++ b/inst/+tblish/+chrono/+internal/num2cellstr.m @@ -17,6 +17,6 @@ ## . function out = num2cellstr (x) -%NUM2CELLSTR Like num2str, but return cellstr of individual number strings +#NUM2CELLSTR Like num2str, but return cellstr of individual number strings out = strtrim (cellstr (num2str (x(:)))); -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+chrono/+internal/prefillNewSizeForSubsasgn.m b/inst/+tblish/+chrono/+internal/prefillNewSizeForSubsasgn.m index 533511ab..8a95f039 100644 --- a/inst/+tblish/+chrono/+internal/prefillNewSizeForSubsasgn.m +++ b/inst/+tblish/+chrono/+internal/prefillNewSizeForSubsasgn.m @@ -24,7 +24,7 @@ ix = ixRef{1}; out = x; if max(ix) > numel(x) - if ~isvector(x) + if !isvector(x) error('Invalid resizing operation using out-of-bounds linear indexing on a non-vector input'); endif out(max(ix)) = fillVal; @@ -45,6 +45,6 @@ oldRange{i} = 1:size(x,i); endfor out(oldRange{:}) = x; - end + endif endif endfunction diff --git a/inst/+tblish/+chrono/+internal/prettyprint_array.m b/inst/+tblish/+chrono/+internal/prettyprint_array.m index 0bed7f20..480c35f9 100644 --- a/inst/+tblish/+chrono/+internal/prettyprint_array.m +++ b/inst/+tblish/+chrono/+internal/prettyprint_array.m @@ -17,11 +17,11 @@ ## . function out = prettyprint_array (strs) -%PRETTYPRINT_ARRAY Pretty-print an array from dispstrs -% -% out = prettyprint_array (strs) -% -% strs (cellstr) is an array of display strings of any size. +#PRETTYPRINT_ARRAY Pretty-print an array from dispstrs +# +# out = prettyprint_array (strs) +# +# strs (cellstr) is an array of display strings of any size. if ismatrix (strs) out = prettyprint_matrix (strs); @@ -51,7 +51,7 @@ endfunction function out = prettyprint_matrix (strs) -if ~ismatrix (strs) +if !ismatrix (strs) error ('Input must be matrix; got %d-D', ndims (strs)); endif lens = cellfun ('prodofsize', strs); @@ -63,4 +63,4 @@ lines{i} = sprintf (format, strs{i,:}); endfor out = strjoin (lines, '\n'); -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+chrono/+internal/scalarexpand.m b/inst/+tblish/+chrono/+internal/scalarexpand.m index c9662ff2..034ff877 100644 --- a/inst/+tblish/+chrono/+internal/scalarexpand.m +++ b/inst/+tblish/+chrono/+internal/scalarexpand.m @@ -17,16 +17,16 @@ ## . function varargout = scalarexpand (varargin) -%SCALAREXPAND Expand scalar inputs to be same size as nonscalar inputs +#SCALAREXPAND Expand scalar inputs to be same size as nonscalar inputs sz = []; for i = 1:nargin - if ~isscalar (varargin{i}) + if !isscalar (varargin{i}) sz_i = size (varargin{i}); if isempty (sz) sz = sz_i; else - if ~isequal (sz, sz_i) + if !isequal (sz, sz_i) error ('Matrix dimensions must agree (%s vs %s)',... tblish.chrono.internal.size2str (sz), tblish.chrono.internal.size2str (sz_i)) endif @@ -46,4 +46,4 @@ endif endfor -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+chrono/+internal/size2str.m b/inst/+tblish/+chrono/+internal/size2str.m index f90f374b..7cb1d4f4 100644 --- a/inst/+tblish/+chrono/+internal/size2str.m +++ b/inst/+tblish/+chrono/+internal/size2str.m @@ -17,15 +17,15 @@ ## . function out = size2str (sz) -%SIZE2STR Format an array size for display -% -% out = size2str (sz) -% -% Sz is an array of dimension sizes, in the format returned by SIZE. -% -% Examples: -% -% size2str (magic (3)) +#SIZE2STR Format an array size for display +# +# out = size2str (sz) +# +# Sz is an array of dimension sizes, in the format returned by SIZE. +# +# Examples: +# +# size2str (magic (3)) strs = cell (size (sz)); for i = 1:numel (sz) strs{i} = sprintf ('%d', sz(i)); diff --git a/inst/+tblish/+chrono/+internal/slurpBinaryFile.m b/inst/+tblish/+chrono/+internal/slurpBinaryFile.m index c5a3576c..59037605 100644 --- a/inst/+tblish/+chrono/+internal/slurpBinaryFile.m +++ b/inst/+tblish/+chrono/+internal/slurpBinaryFile.m @@ -20,8 +20,8 @@ [fid,msg] = fopen (file, 'r'); if fid == -1 error ('Could not open file %s: %s', file, msg); - end + endif cleanup.fid = onCleanup (@() fclose (fid)); out = fread (fid, Inf, 'uint8=>uint8'); - out = out'; + out = out'; endfunction diff --git a/inst/+tblish/+chrono/+internal/slurpTextFile.m b/inst/+tblish/+chrono/+internal/slurpTextFile.m index 7db8f525..970f5420 100644 --- a/inst/+tblish/+chrono/+internal/slurpTextFile.m +++ b/inst/+tblish/+chrono/+internal/slurpTextFile.m @@ -17,13 +17,13 @@ ## . function out = slurpTextFile (file) - %SLURPTEXTFILE Read a file's contents as text. + #SLURPTEXTFILE Read a file's contents as text. [fid, msg] = fopen (file, 'r'); if fid == -1 error ('Could not open file %s: %s', file, msg); - end + endif cleanup.fid = onCleanup (@() fclose (fid)); txt = fread (fid, Inf, 'char=>char'); txt = txt'; out = txt; -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+chrono/+internal/sprintfv.m b/inst/+tblish/+chrono/+internal/sprintfv.m index 9268db06..637e7a16 100644 --- a/inst/+tblish/+chrono/+internal/sprintfv.m +++ b/inst/+tblish/+chrono/+internal/sprintfv.m @@ -17,17 +17,17 @@ ## . function out = sprintfv (format, varargin) -%SPRINTFV "Vectorized" sprintf -% -% out = sprintfv (format, varargin) -% -% SPRINTFV is an array-oriented form of sprintf that applies a format to array -% inputs and produces a cellstr. -% -% This is not a high-performance method. It's a convenience wrapper around a -% loop around sprintf (). -% -% Returns cellstr. +#SPRINTFV "Vectorized" sprintf +# +# out = sprintfv (format, varargin) +# +# SPRINTFV is an array-oriented form of sprintf that applies a format to array +# inputs and produces a cellstr. +# +# This is not a high-performance method. It's a convenience wrapper around a +# loop around sprintf (). +# +# Returns cellstr. args = varargin; sz = []; @@ -35,11 +35,11 @@ if ischar (args{i}) args{i} = { args{i} }; %#ok endif - if ~isscalar (args{i}) + if !isscalar (args{i}) if isempty (sz) sz = size (args{i}); else - if ~isequal (sz, size (args{i})) + if !isequal (sz, size (args{i})) error ('Inconsistent dimensions in inputs'); endif endif @@ -67,4 +67,4 @@ out{i} = sprintf (format, theseArgs{:}); endfor -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+chrono/DummyClass.m b/inst/+tblish/+chrono/DummyClass.m index 4345f146..8885bee1 100644 --- a/inst/+tblish/+chrono/DummyClass.m +++ b/inst/+tblish/+chrono/DummyClass.m @@ -21,9 +21,9 @@ ## ## A do-nothing class just for testing the doco tools. ## -## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur -## ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. -## Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt. +## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur +## ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. +## Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt. ## ## @end deftp ## @@ -69,23 +69,23 @@ ## ## Computes a foo value. ## - ## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur - ## ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. + ## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur + ## ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. ## Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt. ## ## @end deftypefn function out = foo (this) out = this.x; endfunction - + ## -*- texinfo -*- ## @node DummyClass.bar ## @deftypefn {Method} {@var{out} =} bar (@var{obj}) ## ## Computes a bar value. ## - ## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur - ## ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. + ## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur + ## ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. ## Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt. ## ## @end deftypefn @@ -94,4 +94,4 @@ endfunction endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+chrono/dummy_function.m b/inst/+tblish/+chrono/dummy_function.m index c34b747a..8ab172f4 100644 --- a/inst/+tblish/+chrono/dummy_function.m +++ b/inst/+tblish/+chrono/dummy_function.m @@ -21,12 +21,12 @@ ## ## A dummy function just for testing the doco tools. ## -## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur -## ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. -## Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt. +## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur +## ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. +## Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt. ## ## @end deftypefn function out = dummy_function (x) out = 42; -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+examples/+internal/+datasets/AirPassengers_1.m b/inst/+tblish/+examples/+internal/+datasets/AirPassengers_1.m index d9cd7593..757f544d 100644 --- a/inst/+tblish/+examples/+internal/+datasets/AirPassengers_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/AirPassengers_1.m @@ -1 +1 @@ -## TODO: This example needs to be ported from R. \ No newline at end of file +## TODO: This example needs to be ported from R. diff --git a/inst/+tblish/+examples/+internal/+datasets/BJsales_1.m b/inst/+tblish/+examples/+internal/+datasets/BJsales_1.m index be2923f4..768b25bc 100644 --- a/inst/+tblish/+examples/+internal/+datasets/BJsales_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/BJsales_1.m @@ -1 +1 @@ -# TODO: Come up with example code here \ No newline at end of file +# TODO: Come up with example code here diff --git a/inst/+tblish/+examples/+internal/+datasets/BOD_1.m b/inst/+tblish/+examples/+internal/+datasets/BOD_1.m index 0c19c0af..ba0d9b50 100644 --- a/inst/+tblish/+examples/+internal/+datasets/BOD_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/BOD_1.m @@ -1 +1 @@ -# TODO: Port this example from R \ No newline at end of file +# TODO: Port this example from R diff --git a/inst/+tblish/+examples/+internal/+datasets/Formaldehyde_1.m b/inst/+tblish/+examples/+internal/+datasets/Formaldehyde_1.m index ee1f2f81..12330b17 100644 --- a/inst/+tblish/+examples/+internal/+datasets/Formaldehyde_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/Formaldehyde_1.m @@ -2,10 +2,10 @@ figure scatter (t.carb, t.optden) -% TODO: Add a linear model line +# TODO: Add a linear model line xlabel ("Carbohydrate (ml)") ylabel ("Optical Density") title ("Formaldehyde data") -% TODO: Add linear model summary output -% TOD: Add linear model summary plot \ No newline at end of file +# TODO: Add linear model summary output +# TOD: Add linear model summary plot diff --git a/inst/+tblish/+examples/+internal/+datasets/Nile_1.m b/inst/+tblish/+examples/+internal/+datasets/Nile_1.m index aedb01d1..bca0c08c 100644 --- a/inst/+tblish/+examples/+internal/+datasets/Nile_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/Nile_1.m @@ -3,4 +3,4 @@ figure plot (t.year, t.flow); -# TODO: Port the rest of the example to Octave \ No newline at end of file +# TODO: Port the rest of the example to Octave diff --git a/inst/+tblish/+examples/+internal/+datasets/USAccDeaths_1.m b/inst/+tblish/+examples/+internal/+datasets/USAccDeaths_1.m index 8fc9c9e2..f67fae7d 100644 --- a/inst/+tblish/+examples/+internal/+datasets/USAccDeaths_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/USAccDeaths_1.m @@ -1 +1 @@ -t = tblish.dataset.USAccDeaths; \ No newline at end of file +t = tblish.dataset.USAccDeaths; diff --git a/inst/+tblish/+examples/+internal/+datasets/USJudgeRatings_1.m b/inst/+tblish/+examples/+internal/+datasets/USJudgeRatings_1.m index 54ff2efa..48c62f1a 100644 --- a/inst/+tblish/+examples/+internal/+datasets/USJudgeRatings_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/USJudgeRatings_1.m @@ -2,4 +2,4 @@ figure tblish.examples.plot_pairs (t(:,2:end)); -title ("USJudgeRatings data") \ No newline at end of file +title ("USJudgeRatings data") diff --git a/inst/+tblish/+examples/+internal/+datasets/airmiles_1.m b/inst/+tblish/+examples/+internal/+datasets/airmiles_1.m index c4bcc200..b3bdc954 100644 --- a/inst/+tblish/+examples/+internal/+datasets/airmiles_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/airmiles_1.m @@ -2,4 +2,4 @@ plot (t.year, t.miles); title ("airmiles data"); xlabel ("Passenger-miles flown by U.S. commercial airlines") -ylabel ("airmiles"); \ No newline at end of file +ylabel ("airmiles"); diff --git a/inst/+tblish/+examples/+internal/+datasets/anscombe_1.m b/inst/+tblish/+examples/+internal/+datasets/anscombe_1.m index 962932c1..83d15ca4 100644 --- a/inst/+tblish/+examples/+internal/+datasets/anscombe_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/anscombe_1.m @@ -24,4 +24,4 @@ # Fiddle with the plot axes parameters linkaxes (haxs); xlim(haxs(1), x_limits); -ylim(haxs(1), y_limits); \ No newline at end of file +ylim(haxs(1), y_limits); diff --git a/inst/+tblish/+examples/+internal/+datasets/austres_1.m b/inst/+tblish/+examples/+internal/+datasets/austres_1.m index 1b1df315..b50f75f7 100644 --- a/inst/+tblish/+examples/+internal/+datasets/austres_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/austres_1.m @@ -2,4 +2,4 @@ plot (datenum (t.date), t.residents); datetick x -xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents"); \ No newline at end of file +xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents"); diff --git a/inst/+tblish/+examples/+internal/+datasets/crimtab_1.m b/inst/+tblish/+examples/+internal/+datasets/crimtab_1.m index 0abbcb4a..86c2d4d7 100644 --- a/inst/+tblish/+examples/+internal/+datasets/crimtab_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/crimtab_1.m @@ -1 +1 @@ -# TODO: Port this from R \ No newline at end of file +# TODO: Port this from R diff --git a/inst/+tblish/+examples/+internal/+datasets/faithful_1.m b/inst/+tblish/+examples/+internal/+datasets/faithful_1.m index 44969ccb..d905d619 100644 --- a/inst/+tblish/+examples/+internal/+datasets/faithful_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/faithful_1.m @@ -1,23 +1,23 @@ t = tblish.dataset.faithful; -% Munge the data, rounding eruption time to the second +# Munge the data, rounding eruption time to the second e60 = 60 * t.eruptions; ne60 = round (e60); # TODO: Port zapsmall to Octave eruptions = ne60 / 60; # TODO: Display mean relative difference and bins summary -% Histogram of rounded eruption times +# Histogram of rounded eruption times figure hist (ne60, max (ne60)) xlabel ("Eruption time (sec)") ylabel ("n") title ("faithful data: Eruptions of Old Faithful") -% Scatter plot of eruption time vs waiting time +# Scatter plot of eruption time vs waiting time figure scatter (t.eruptions, t.waiting) xlabel ("Eruption time (min)") ylabel ("Waiting time to next eruption (min)") title ("faithful data: Eruptions of Old Faithful") -# TODO: Port Lowess smoothing to Octave \ No newline at end of file +# TODO: Port Lowess smoothing to Octave diff --git a/inst/+tblish/+examples/+internal/+datasets/iris_1.m b/inst/+tblish/+examples/+internal/+datasets/iris_1.m index 0c19c0af..ba0d9b50 100644 --- a/inst/+tblish/+examples/+internal/+datasets/iris_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/iris_1.m @@ -1 +1 @@ -# TODO: Port this example from R \ No newline at end of file +# TODO: Port this example from R diff --git a/inst/+tblish/+examples/+internal/+datasets/lh_1.m b/inst/+tblish/+examples/+internal/+datasets/lh_1.m index fe9363f1..38802aa3 100644 --- a/inst/+tblish/+examples/+internal/+datasets/lh_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/lh_1.m @@ -2,4 +2,4 @@ plot (t.sample, t.lh); xlabel ("Sample Number"); -ylabel ("lh level"); \ No newline at end of file +ylabel ("lh level"); diff --git a/inst/+tblish/+examples/+internal/+datasets/state_1.m b/inst/+tblish/+examples/+internal/+datasets/state_1.m index 6b076c5b..6f084745 100644 --- a/inst/+tblish/+examples/+internal/+datasets/state_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/state_1.m @@ -1 +1 @@ -t = tblish.dataset.state; \ No newline at end of file +t = tblish.dataset.state; diff --git a/inst/+tblish/+examples/+internal/+datasets/sunspot_year_1.m b/inst/+tblish/+examples/+internal/+datasets/sunspot_year_1.m index 675824d0..4dcc5ec1 100644 --- a/inst/+tblish/+examples/+internal/+datasets/sunspot_year_1.m +++ b/inst/+tblish/+examples/+internal/+datasets/sunspot_year_1.m @@ -3,4 +3,4 @@ figure plot (t.year, t.sunspots) xlabel ("Year") -ylabel ("Sunspots") \ No newline at end of file +ylabel ("Sunspots") diff --git a/inst/+tblish/+examples/SpDb.m b/inst/+tblish/+examples/SpDb.m index 57e453b6..f59657dd 100644 --- a/inst/+tblish/+examples/SpDb.m +++ b/inst/+tblish/+examples/SpDb.m @@ -14,16 +14,16 @@ ## along with this program; If not, see . function varargout = SpDb - %SPDB The classic suppliers-parts example database - % - % s = tblish.examples.SpDb - % [s, p, sp] = tblish.examples.SpDb - % - % Constructs the classic C. J. Date Suppliers-Parts ("SP") example database - % as tables. - % - % If one argout is captured, the tables are returned in the fields of a struct. - % If multiple argouts are captured, the tables are returned as three argouts. + #SPDB The classic suppliers-parts example database + # + # s = tblish.examples.SpDb + # [s, p, sp] = tblish.examples.SpDb + # + # Constructs the classic C. J. Date Suppliers-Parts ("SP") example database + # as tables. + # + # If one argout is captured, the tables are returned in the fields of a struct. + # If multiple argouts are captured, the tables are returned as three argouts. S = cell2table ({ 'S1' 'Smith' 20 'London' 'S2' 'Jones' 10 'Paris' @@ -37,7 +37,7 @@ 'P3' 'Screw' 'Blue' 17.0 'Oslo' 'P4' 'Screw' 'Red' 14.0 'London' 'P5' 'Cam' 'Blue' 12.0 'Paris' - 'P6' 'Cog' 'Red' 19.0 'London' + 'P6' 'Cog' 'Red' 19.0 'London' }, 'VariableNames', {'PNum', 'PName', 'Color', 'Weight', 'City'}); SP = cell2table ({ 'S1' 'P1' 300 @@ -51,7 +51,7 @@ 'S3' 'P2' 200 'S4' 'P2' 200 'S4' 'P4' 300 - 'S4' 'P5' 400 + 'S4' 'P5' 400 }, 'VariableNames', {'SNum', 'PNum', 'Qty'}); if nargout == 1 varargout = { struct('S', S, 'P', P, 'SP', SP) }; diff --git a/inst/+tblish/+examples/coplot.m b/inst/+tblish/+examples/coplot.m index f33f36a7..f2a3eb2d 100644 --- a/inst/+tblish/+examples/coplot.m +++ b/inst/+tblish/+examples/coplot.m @@ -106,12 +106,12 @@ n_groups = numel (u_g); hax = NaN (1, n_groups); g_strs = dispstrs (u_g); - - % Arrange subplots in a square + + # Arrange subplots in a square square_side = ceil (sqrt (n_groups)); n_rows = square_side; n_cols = square_side; - + for i = 1:n_groups ix_row = ceil (i / n_cols); ix_col = 1 + rem (i, n_rows); @@ -129,7 +129,7 @@ y_g = Y(tf_g); plot_fcn (ax, x_g, y_g, "o"); endfor - + linkaxes (hax, "xy"); xlim (hax(1), [0 max(X)]); ylim (hax(1), [min(0, min(Y)) max(Y)]); diff --git a/inst/+tblish/+examples/peel_off_name_value_options.m b/inst/+tblish/+examples/peel_off_name_value_options.m index 837c0c40..17ed972a 100644 --- a/inst/+tblish/+examples/peel_off_name_value_options.m +++ b/inst/+tblish/+examples/peel_off_name_value_options.m @@ -14,54 +14,54 @@ ## along with this program; If not, see . function [opts, remaining_args] = peel_off_name_value_options (args, known_opts, defaults) - %PEEL_OFF_NAME_VALUE_OPTIONS Peel off name-value options from argins - % - % [opts, remaining_args] = peel_off_name_value_options (args, known_opts, defaults) - % - % Peels off recognized name-value options from the end of an argument array. - % - % args (cell) is the arguments array to parse. Typically, you should pass in your - % varargin here. - % - % known_opts (cellstr) is the list of valid option names. - % - % defaults is the default values to use for options that were not found in the input - % args. May be supplied as a struct, name/value cell vector, or n-by-2 cellrec (with - % option names in the first column and corresponding default option values in the - % second column). - % - % Returns: - % opts – the parsed options, as a struct - % remaining_args – what is left of args after removing the recognized option - % name/value pairs. - % - % Examples: - % - % function foo (x, y, varargin) - % [opts, args] = tblish.examples.peel_off_name_value_options (varargin, ... - % {"Foo", "Bar", "FooBar"}); - % if ! isempty (args) - % error ("Unrecognized arguments"); - % endif - % foobar = []; - % if isfield (opts, "FooBar") - % foobar = opts.FooBar; - % endif - % - % % ... do actual work with inputs here ... - % endfunction - % - % function foo2 (x, y, varargin) - % [opts, args] = tblish.examples.peel_off_name_value_options (varargin, ... - % {"FooBar", "QuxQux"}, {... - % "FooBar" 42 - % "QuxQux" "some default string value" - % }); - % z = x + y + opts.FooBar; % no need to check for isfield(); it will always - % % be there since you supplied a default for it - % endfunction + #PEEL_OFF_NAME_VALUE_OPTIONS Peel off name-value options from argins + # + # [opts, remaining_args] = peel_off_name_value_options (args, known_opts, defaults) + # + # Peels off recognized name-value options from the end of an argument array. + # + # args (cell) is the arguments array to parse. Typically, you should pass in your + # varargin here. + # + # known_opts (cellstr) is the list of valid option names. + # + # defaults is the default values to use for options that were not found in the input + # args. May be supplied as a struct, name/value cell vector, or n-by-2 cellrec (with + # option names in the first column and corresponding default option values in the + # second column). + # + # Returns: + # opts – the parsed options, as a struct + # remaining_args – what is left of args after removing the recognized option + # name/value pairs. + # + # Examples: + # + # function foo (x, y, varargin) + # [opts, args] = tblish.examples.peel_off_name_value_options (varargin, ... + # {"Foo", "Bar", "FooBar"}); + # if ! isempty (args) + # error ("Unrecognized arguments"); + # endif + # foobar = []; + # if isfield (opts, "FooBar") + # foobar = opts.FooBar; + # endif + # + # % ... do actual work with inputs here ... + # endfunction + # + # function foo2 (x, y, varargin) + # [opts, args] = tblish.examples.peel_off_name_value_options (varargin, ... + # {"FooBar", "QuxQux"}, {... + # "FooBar" 42 + # "QuxQux" "some default string value" + # }); + # z = x + y + opts.FooBar; % no need to check for isfield(); it will always + # % be there since you supplied a default for it + # endfunction - % + # if nargin < 3 || isempty (defaults); defaults = struct; endif defaults = parse_defaults (defaults); @@ -71,7 +71,7 @@ peeled_args = [peeled_args args(end-1:end)]; opts.(args{end-1}) = args{end}; args(end-1:end) = []; - end + endwhile remaining_args = args; endfunction @@ -82,7 +82,7 @@ endif if iscell (defaults) if size (defaults, 2) == 2 - % Convert cellrec to name/value list + # Convert cellrec to name/value list defaults = defaults'; defaults = defaults(:)'; endif @@ -93,4 +93,4 @@ else error ("peel_off_name_value_options: invalid format for defaults"); endif -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+examples/plot_pairs.m b/inst/+tblish/+examples/plot_pairs.m index 98018846..d609f313 100644 --- a/inst/+tblish/+examples/plot_pairs.m +++ b/inst/+tblish/+examples/plot_pairs.m @@ -55,7 +55,7 @@ else plot_type = 'scatter'; endif - + if isstruct (data) data = struct2table (data); endif @@ -63,7 +63,7 @@ error ('plot_pairs: input data must be a table or struct'); endif t = data; - + if isempty (fig) fig = figure; endif @@ -72,7 +72,7 @@ for i = 1:n_vars for j = 1:n_vars if i == j - % TODO: Figure out how to put the variable name in big text in this axes + # TODO: Figure out how to put the variable name in big text in this axes continue endif ix_subplot = (n_vars*(j-1) + i); @@ -80,7 +80,7 @@ var_x = vars{i}; var_y = vars{j}; x = t.(var_x); - y = t.(var_y); + y = t.(var_y); switch plot_type case "scatter" scatter (hax, x, y, 10); diff --git a/inst/+tblish/+examples/private/peelOffNameValueOptions.m b/inst/+tblish/+examples/private/peelOffNameValueOptions.m index f7e30b18..08fa18e7 100644 --- a/inst/+tblish/+examples/private/peelOffNameValueOptions.m +++ b/inst/+tblish/+examples/private/peelOffNameValueOptions.m @@ -14,15 +14,15 @@ ## along with this program; If not, see . function [opts, remainingArgs, peeledArgs] = peelOffNameValueOptions (args, knownOpts) - %PEELOFFNAMEVALUEOPTIONS Peel off name-value options from argins - % - % Peels off recognized name-value options from the end of an argument array. + #PEELOFFNAMEVALUEOPTIONS Peel off name-value options from argins + # + # Peels off recognized name-value options from the end of an argument array. opts = struct; peeledArgs = {}; while numel (args) >= 2 && ischar (args{end-1}) && ismember (args{end-1}, knownOpts) peeledArgs = [peeledArgs args(end-1:end)]; opts.(args{end-1}) = args{end}; args(end-1:end) = []; - end + endwhile remainingArgs = args; endfunction diff --git a/inst/+tblish/+examples/run_all_example_scripts.m b/inst/+tblish/+examples/run_all_example_scripts.m index 82cbb2e2..82764b73 100644 --- a/inst/+tblish/+examples/run_all_example_scripts.m +++ b/inst/+tblish/+examples/run_all_example_scripts.m @@ -1,9 +1,9 @@ function run_all_example_scripts - % Runs all example scripts in the inst/examples directory - % - % This function is meant for use in BIST tests. It just ensures that all - % the examples run without error. - + # Runs all example scripts in the inst/examples directory + # + # This function is meant for use in BIST tests. It just ensures that all + # the examples run without error. + this_dir = fileparts (mfilename ('fullpath')); inst_dir = fileparts (this_dir); examples_dir = fullfile (inst_dir, 'examples'); diff --git a/inst/+tblish/+internal/+datasets/@AirPassengers/AirPassengers.m b/inst/+tblish/+internal/+datasets/@AirPassengers/AirPassengers.m index 69153bc4..b2d043c4 100644 --- a/inst/+tblish/+internal/+datasets/@AirPassengers/AirPassengers.m +++ b/inst/+tblish/+internal/+datasets/@AirPassengers/AirPassengers.m @@ -17,7 +17,7 @@ # This is based on the AirPassengers dataset from R’s datasets package classdef AirPassengers < tblish.internal.dataset - % Monthly Airline Passenger Numbers 1949-1960 + # Monthly Airline Passenger Numbers 1949-1960 methods @@ -47,4 +47,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@BJsales/BJsales.m b/inst/+tblish/+internal/+datasets/@BJsales/BJsales.m index e3480f4b..9eac27b8 100644 --- a/inst/+tblish/+internal/+datasets/@BJsales/BJsales.m +++ b/inst/+tblish/+internal/+datasets/@BJsales/BJsales.m @@ -54,10 +54,10 @@ 257.8, 257.7, 257.2, 257.5, 256.8, 257.5, 257.0, 257.6, 257.3, 257.5, 259.6, 261.1, ... 262.9, 263.3, 262.8, 261.8, 262.2, 262.7]'; record = [1:numel(sales)]'; - + out = table (record, lead, sales); endfunction endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@BOD/BOD.m b/inst/+tblish/+internal/+datasets/@BOD/BOD.m index 709ab390..9a4e8042 100644 --- a/inst/+tblish/+internal/+datasets/@BOD/BOD.m +++ b/inst/+tblish/+internal/+datasets/@BOD/BOD.m @@ -33,4 +33,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@ChickWeight/ChickWeight.m b/inst/+tblish/+internal/+datasets/@ChickWeight/ChickWeight.m index 1f32f1d5..a1ffcd41 100644 --- a/inst/+tblish/+internal/+datasets/@ChickWeight/ChickWeight.m +++ b/inst/+tblish/+internal/+datasets/@ChickWeight/ChickWeight.m @@ -179,4 +179,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@DNase/DNase.m b/inst/+tblish/+internal/+datasets/@DNase/DNase.m index e2010d51..d20cd673 100644 --- a/inst/+tblish/+internal/+datasets/@DNase/DNase.m +++ b/inst/+tblish/+internal/+datasets/@DNase/DNase.m @@ -88,4 +88,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@EuStockMarkets/EuStockMarkets.m b/inst/+tblish/+internal/+datasets/@EuStockMarkets/EuStockMarkets.m index 02d85e8e..2ae00353 100644 --- a/inst/+tblish/+internal/+datasets/@EuStockMarkets/EuStockMarkets.m +++ b/inst/+tblish/+internal/+datasets/@EuStockMarkets/EuStockMarkets.m @@ -6,7 +6,7 @@ ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## -## This program is distributed in the hope that it will be useful, +## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. @@ -27,1872 +27,1872 @@ function out = load (this) index_names = {"DAX", "SMI", "CAC", "FTSE"}; - index_values = [ - 1628.75 , 1678.1 , 1772.8 , 2443.6 , - 1613.63 , 1688.5 , 1750.5 , 2460.2 , - 1606.51 , 1678.6 , 1718 , 2448.2 , - 1621.04 , 1684.1 , 1708.1 , 2470.4 , - 1618.16 , 1686.6 , 1723.1 , 2484.7 , - 1610.61 , 1671.6 , 1714.3 , 2466.8 , - 1630.75 , 1682.9 , 1734.5 , 2487.9 , - 1640.17 , 1703.6 , 1757.4 , 2508.4 , - 1635.47 , 1697.5 , 1754 , 2510.5 , - 1645.89 , 1716.3 , 1754.3 , 2497.4 , - 1647.84 , 1723.8 , 1759.8 , 2532.5 , - 1638.35 , 1730.5 , 1755.5 , 2556.8 , - 1629.93 , 1727.4 , 1758.1 , 2561 , - 1621.49 , 1733.3 , 1757.5 , 2547.3 , - 1624.74 , 1734 , 1763.5 , 2541.5 , - 1627.63 , 1728.3 , 1762.8 , 2558.5 , - 1631.99 , 1737.1 , 1768.9 , 2587.9 , - 1621.18 , 1723.1 , 1778.1 , 2580.5 , - 1613.42 , 1723.6 , 1780.1 , 2579.6 , - 1604.95 , 1719 , 1767.7 , 2589.3 , - 1605.75 , 1721.2 , 1757.9 , 2595 , - 1616.67 , 1725.3 , 1756.6 , 2595.6 , - 1619.29 , 1727.2 , 1754.7 , 2588.8 , - 1620.49 , 1727.2 , 1766.8 , 2591.7 , - 1619.67 , 1731.6 , 1766.5 , 2601.7 , - 1623.07 , 1724.1 , 1762.2 , 2585.4 , - 1613.98 , 1716.9 , 1759.5 , 2573.3 , - 1631.87 , 1723.4 , 1782.4 , 2597.4 , - 1630.37 , 1723 , 1789.5 , 2600.6 , - 1633.47 , 1728.4 , 1783.5 , 2570.6 , - 1626.55 , 1722.1 , 1780.4 , 2569.4 , - 1650.43 , 1724.5 , 1808.8 , 2584.9 , - 1650.06 , 1733.6 , 1820.3 , 2608.8 , - 1654.11 , 1739 , 1820.3 , 2617.2 , - 1653.6 , 1726.2 , 1820.3 , 2621 , - 1501.82 , 1587.4 , 1687.5 , 2540.5 , - 1524.28 , 1630.6 , 1725.6 , 2554.5 , - 1603.65 , 1685.5 , 1792.9 , 2601.9 , - 1622.49 , 1701.3 , 1819.1 , 2623 , - 1636.68 , 1718 , 1833.5 , 2640.7 , - 1652.1 , 1726.2 , 1853.4 , 2640.7 , - 1645.81 , 1716.6 , 1849.7 , 2619.8 , - 1650.36 , 1725.8 , 1851.8 , 2624.2 , - 1651.55 , 1737.4 , 1857.7 , 2638.2 , - 1649.88 , 1736.6 , 1864.3 , 2645.7 , - 1653.52 , 1732.4 , 1863.5 , 2679.6 , - 1657.51 , 1731.2 , 1873.2 , 2669 , - 1649.55 , 1726.9 , 1860.8 , 2664.6 , - 1649.09 , 1727.8 , 1868.7 , 2663.3 , - 1646.41 , 1720.2 , 1860.4 , 2667.4 , - 1638.65 , 1715.4 , 1855.9 , 2653.2 , - 1625.8 , 1708.7 , 1840.5 , 2630.8 , - 1628.64 , 1713 , 1842.6 , 2626.6 , - 1632.22 , 1713.5 , 1861.2 , 2641.9 , - 1633.65 , 1718 , 1876.2 , 2625.8 , - 1631.17 , 1701.7 , 1878.3 , 2606 , - 1635.8 , 1701.7 , 1878.4 , 2594.4 , - 1621.27 , 1684.9 , 1869.4 , 2583.6 , - 1624.7 , 1687.2 , 1880.4 , 2588.7 , - 1616.13 , 1690.6 , 1885.5 , 2600.3 , - 1618.12 , 1684.3 , 1888.4 , 2579.5 , - 1627.8 , 1679.9 , 1885.2 , 2576.6 , - 1625.79 , 1672.9 , 1877.9 , 2597.8 , - 1614.8 , 1663.1 , 1876.5 , 2595.6 , - 1612.8 , 1669.3 , 1883.8 , 2599 , - 1605.47 , 1664.7 , 1880.6 , 2621.7 , - 1609.32 , 1672.3 , 1887.4 , 2645.6 , - 1607.48 , 1687.7 , 1878.3 , 2644.2 , - 1607.48 , 1686.8 , 1867.1 , 2625.6 , - 1604.89 , 1686.6 , 1851.9 , 2624.6 , - 1589.12 , 1675.8 , 1843.6 , 2596.2 , - 1582.27 , 1677.4 , 1848.1 , 2599.5 , - 1567.99 , 1673.2 , 1843.4 , 2584.1 , - 1568.16 , 1665 , 1843.6 , 2570.8 , - 1569.71 , 1671.3 , 1833.8 , 2555 , - 1571.74 , 1672.4 , 1833.4 , 2574.5 , - 1585.41 , 1676.2 , 1856.9 , 2576.7 , - 1570.01 , 1692.6 , 1863.4 , 2579 , - 1561.89 , 1696.5 , 1855.5 , 2588.7 , - 1565.18 , 1716.1 , 1864.2 , 2601.1 , - 1570.34 , 1713.3 , 1846 , 2575.7 , - 1577 , 1705.1 , 1836.8 , 2559.5 , - 1590.29 , 1711.3 , 1830.4 , 2561.1 , - 1572.72 , 1709.8 , 1831.6 , 2528.3 , - 1572.07 , 1688.6 , 1834.8 , 2514.7 , - 1579.19 , 1698.9 , 1852.1 , 2558.5 , - 1588.73 , 1700 , 1849.8 , 2553.3 , - 1586.01 , 1693 , 1861.8 , 2577.1 , - 1579.77 , 1683.9 , 1856.7 , 2566 , - 1572.58 , 1679.2 , 1856.7 , 2549.5 , - 1568.09 , 1673.9 , 1841.5 , 2527.8 , - 1578.21 , 1683.9 , 1846.9 , 2540.9 , - 1573.94 , 1688.4 , 1836.1 , 2534.2 , - 1582.06 , 1693.9 , 1838.6 , 2538 , - 1610.18 , 1720.9 , 1857.6 , 2559 , - 1605.16 , 1717.9 , 1857.6 , 2554.9 , - 1623.84 , 1733.6 , 1858.4 , 2575.5 , - 1615.26 , 1729.7 , 1846.8 , 2546.5 , - 1627.08 , 1735.6 , 1868.5 , 2561.6 , - 1626.97 , 1734.1 , 1863.2 , 2546.6 , - 1605.7 , 1699.3 , 1808.3 , 2502.9 , - 1589.7 , 1678.6 , 1765.1 , 2463.1 , - 1589.7 , 1675.5 , 1763.5 , 2472.6 , - 1603.26 , 1670.1 , 1766 , 2463.5 , - 1599.75 , 1652.2 , 1741.3 , 2446.3 , - 1590.86 , 1635 , 1743.3 , 2456.2 , - 1603.5 , 1654.9 , 1769 , 2471.5 , - 1589.86 , 1642 , 1757.9 , 2447.5 , - 1587.92 , 1638.7 , 1754.9 , 2428.6 , - 1571.06 , 1622.6 , 1739.7 , 2420.2 , - 1549.81 , 1596.1 , 1708.8 , 2414.9 , - 1549.36 , 1612.4 , 1722.2 , 2420.2 , - 1554.65 , 1625 , 1713.9 , 2423.8 , - 1557.52 , 1610.5 , 1703.2 , 2407 , - 1555.31 , 1606.6 , 1685.7 , 2388.7 , - 1559.76 , 1610.7 , 1663.4 , 2409.6 , - 1548.44 , 1603.1 , 1636.9 , 2392 , - 1543.99 , 1591.5 , 1645.6 , 2380.2 , - 1550.21 , 1605.2 , 1671.6 , 2423.3 , - 1557.03 , 1621.4 , 1688.3 , 2451.6 , - 1551.78 , 1622.5 , 1696.8 , 2440.8 , - 1562.89 , 1626.6 , 1711.7 , 2432.9 , - 1570.28 , 1627.4 , 1706.2 , 2413.6 , - 1559.26 , 1614.9 , 1684.2 , 2391.6 , - 1545.87 , 1602.3 , 1648.5 , 2358.1 , - 1542.77 , 1598.3 , 1633.6 , 2345.4 , - 1542.77 , 1627 , 1699.1 , 2384.4 , - 1542.77 , 1627 , 1699.1 , 2384.4 , - 1542.77 , 1627 , 1722.5 , 2384.4 , - 1564.27 , 1655.7 , 1720.7 , 2418.7 , - 1577.26 , 1670.1 , 1741.9 , 2420 , - 1577.26 , 1670.1 , 1765.7 , 2493.1 , - 1577.26 , 1670.1 , 1765.7 , 2493.1 , - 1598.19 , 1670.1 , 1749.9 , 2492.8 , - 1604.05 , 1704 , 1770.3 , 2504.1 , - 1604.69 , 1711.8 , 1787.6 , 2493.2 , - 1593.65 , 1700.5 , 1778.7 , 2482.9 , - 1581.68 , 1690.3 , 1785.6 , 2467.1 , - 1599.14 , 1715.4 , 1833.9 , 2497.9 , - 1613.82 , 1723.5 , 1837.4 , 2477.9 , - 1620.45 , 1719.4 , 1824.3 , 2490.1 , - 1629.51 , 1734.4 , 1843.8 , 2516.3 , - 1663.7 , 1772.8 , 1873.6 , 2537.1 , - 1664.09 , 1760.3 , 1860.2 , 2541.6 , - 1669.29 , 1747.2 , 1860.2 , 2536.7 , - 1685.14 , 1750.2 , 1865.9 , 2544.9 , - 1687.07 , 1755.3 , 1867.9 , 2543.4 , - 1680.13 , 1754.6 , 1841.3 , 2522 , - 1671.84 , 1751.2 , 1838.7 , 2525.3 , - 1669.52 , 1752.5 , 1849.9 , 2510.4 , - 1686.71 , 1769.4 , 1869.3 , 2539.9 , - 1685.51 , 1767.6 , 1890.6 , 2552 , - 1671.01 , 1750 , 1879.6 , 2546.5 , - 1683.06 , 1747.1 , 1873.9 , 2550.8 , - 1685.7 , 1753.5 , 1875.3 , 2571.2 , - 1685.66 , 1752.8 , 1857 , 2560.2 , - 1678.77 , 1752.9 , 1856.5 , 2556.8 , - 1685.85 , 1764.7 , 1865.8 , 2547.1 , - 1683.71 , 1776.8 , 1860.6 , 2534.3 , - 1686.59 , 1779.3 , 1861.6 , 2517.2 , - 1683.73 , 1785.1 , 1865.6 , 2538.4 , - 1679.14 , 1798.2 , 1864.1 , 2537.1 , - 1685.03 , 1794.1 , 1861.6 , 2523.7 , - 1680.81 , 1795.2 , 1876.5 , 2522.6 , - 1676.17 , 1780.4 , 1865.1 , 2513.9 , - 1688.46 , 1789.5 , 1882.1 , 2541 , - 1696.55 , 1794.2 , 1912.2 , 2555.9 , - 1690.24 , 1784.4 , 1915.4 , 2536.7 , - 1711.35 , 1800.1 , 1951.2 , 2543.4 , - 1711.29 , 1804 , 1962.4 , 2542.3 , - 1729.86 , 1816.2 , 1976.5 , 2559.7 , - 1716.63 , 1810.5 , 1953.5 , 2546.8 , - 1743.36 , 1821.9 , 1981.3 , 2565 , - 1745.17 , 1828.2 , 1985.1 , 2562 , - 1746.76 , 1840.6 , 1983.4 , 2562.1 , - 1749.29 , 1841.1 , 1979.7 , 2554.3 , - 1763.86 , 1846.3 , 1983.8 , 2565.4 , - 1762.27 , 1850 , 1988.1 , 2558.4 , - 1762.29 , 1839 , 1973 , 2538.3 , - 1746.77 , 1820.2 , 1966.9 , 2533.1 , - 1753.5 , 1815.2 , 1976.3 , 2550.7 , - 1753.21 , 1820.6 , 1993.9 , 2574.8 , - 1739.88 , 1807.1 , 1968 , 2522.4 , - 1723.92 , 1791.4 , 1941.8 , 2493.3 , - 1734.42 , 1806.2 , 1947.1 , 2476 , - 1723.13 , 1798.7 , 1929.2 , 2470.7 , - 1732.92 , 1818.2 , 1943.6 , 2491.2 , - 1729.89 , 1820.5 , 1928.2 , 2464.7 , - 1725.74 , 1833.3 , 1922 , 2467.6 , - 1730.9 , 1837.1 , 1919.1 , 2456.6 , - 1714.17 , 1818.2 , 1884.6 , 2441 , - 1716.2 , 1824.1 , 1896.3 , 2458.7 , - 1719.06 , 1830.1 , 1928.3 , 2464.9 , - 1718.21 , 1835.6 , 1934.8 , 2472.2 , - 1698.84 , 1828.7 , 1923.5 , 2447.9 , - 1714.76 , 1839.2 , 1943.8 , 2452.9 , - 1718.35 , 1837.2 , 1942.4 , 2440.1 , - 1706.69 , 1826.7 , 1928.1 , 2408.6 , - 1723.37 , 1838 , 1942 , 2405.4 , - 1716.18 , 1829.1 , 1942.7 , 2382.7 , - 1738.78 , 1843.1 , 1974.8 , 2400.9 , - 1737.41 , 1850.5 , 1975.4 , 2404.2 , - 1714.77 , 1827.1 , 1907.5 , 2393.2 , - 1724.24 , 1829.1 , 1943.6 , 2436.4 , - 1733.77 , 1848 , 1974.1 , 2572.6 , - 1729.96 , 1840.5 , 1963.3 , 2591 , - 1734.46 , 1853.8 , 1972.3 , 2600.5 , - 1744.35 , 1874.1 , 1990.7 , 2640.2 , - 1746.88 , 1871.3 , 1978.2 , 2638.6 , - 1746.88 , 1871.3 , 1978.2 , 2638.6 , - 1746.88 , 1871.3 , 1978.2 , 2638.6 , - 1747.47 , 1860.5 , 1980.4 , 2625.8 , - 1753.1 , 1874.7 , 1983.7 , 2607.8 , - 1745.17 , 1880.1 , 1978.1 , 2609.8 , - 1745.72 , 1874.7 , 1984.9 , 2643 , - 1742.92 , 1875.6 , 1995.7 , 2658.2 , - 1731.68 , 1859.5 , 2006.6 , 2651 , - 1731.18 , 1874.2 , 2036.7 , 2664.9 , - 1728.09 , 1880.1 , 2031.1 , 2654.1 , - 1728.09 , 1880.1 , 2031.1 , 2659.8 , - 1731.29 , 1907.7 , 2041.6 , 2659.8 , - 1733.82 , 1920.5 , 2046.9 , 2662.2 , - 1745.78 , 1937.3 , 2047.2 , 2698.7 , - 1752.57 , 1936.8 , 2063.4 , 2701.9 , - 1748.13 , 1949.1 , 2063.4 , 2725.7 , - 1750.7 , 1963.7 , 2077.5 , 2737.8 , - 1747.91 , 1950.8 , 2063.6 , 2722.4 , - 1745.79 , 1953.5 , 2053.2 , 2720.5 , - 1735.34 , 1945 , 2017 , 2694.7 , - 1719.92 , 1921.1 , 2024 , 2682.6 , - 1763.59 , 1939.1 , 2051.6 , 2703.6 , - 1766.76 , 1928 , 2023.1 , 2700.6 , - 1785.4 , 1933.4 , 2030.8 , 2711.9 , - 1783.56 , 1925.7 , 2016.8 , 2702 , - 1804.42 , 1931.7 , 2045.1 , 2715 , - 1812.33 , 1928.7 , 2046.3 , 2715 , - 1799.51 , 1924.5 , 2029.6 , 2704.6 , - 1792.8 , 1914.2 , 2014.1 , 2698.6 , - 1792.8 , 1914.2 , 2014.1 , 2694.2 , - 1806.36 , 1920.6 , 2033.3 , 2707.6 , - 1798.23 , 1923.3 , 2017.4 , 2697.6 , - 1800.62 , 1930.4 , 2024.9 , 2705.9 , - 1786.19 , 1915.2 , 1992.6 , 2680.9 , - 1791.35 , 1916.9 , 1994.9 , 2681.9 , - 1789.05 , 1913.8 , 1981.6 , 2668.5 , - 1789.05 , 1913.8 , 1981.6 , 2645.8 , - 1784.71 , 1899.7 , 1962.2 , 2635.4 , - 1789.45 , 1888 , 1953.7 , 2636.1 , - 1779.74 , 1868.8 , 1928.8 , 2614.1 , - 1786.97 , 1879.9 , 1928.3 , 2603.7 , - 1773.25 , 1865.7 , 1918.1 , 2593.6 , - 1781.62 , 1881.3 , 1931.4 , 2616.3 , - 1773.75 , 1873.1 , 1908.8 , 2598.4 , - 1773.75 , 1862.5 , 1891.8 , 2562.7 , - 1776.34 , 1869.3 , 1913.9 , 2584.8 , - 1770.72 , 1846.9 , 1885.8 , 2550.3 , - 1772.39 , 1847.1 , 1895.8 , 2560.6 , - 1762.55 , 1838.3 , 1899.6 , 2532.6 , - 1764.35 , 1845.8 , 1920.3 , 2557.3 , - 1752.83 , 1835.5 , 1915.3 , 2534.1 , - 1755.98 , 1846.6 , 1907.3 , 2515.8 , - 1754.95 , 1854.8 , 1900.6 , 2521.2 , - 1759.9 , 1845.3 , 1880.9 , 2493.9 , - 1759.84 , 1854.5 , 1873.5 , 2476.1 , - 1776.5 , 1870.5 , 1883.6 , 2497.1 , - 1769.98 , 1862.6 , 1868.5 , 2469 , - 1766.98 , 1856.6 , 1879.1 , 2493.7 , - 1752.29 , 1837.6 , 1847.8 , 2472.6 , - 1760.17 , 1846.7 , 1861.8 , 2497.9 , - 1750.32 , 1856.5 , 1859.4 , 2490.8 , - 1731.44 , 1841.8 , 1859.4 , 2478.3 , - 1735.51 , 1835 , 1859.4 , 2484 , - 1733.84 , 1844.4 , 1853.3 , 2486.4 , - 1730.78 , 1838.9 , 1851.2 , 2483.4 , - 1699.46 , 1805.6 , 1801.8 , 2431.9 , - 1652.71 , 1756.6 , 1767.9 , 2403.7 , - 1654.09 , 1786.1 , 1762.7 , 2415.6 , - 1636.81 , 1757.1 , 1727.5 , 2387.9 , - 1622.81 , 1762.8 , 1734.6 , 2399.5 , - 1613.36 , 1756.8 , 1734.6 , 2377.2 , - 1617.78 , 1761.9 , 1755.4 , 2348 , - 1617.18 , 1778.5 , 1769 , 2373.4 , - 1637.62 , 1812.7 , 1801.6 , 2423.2 , - 1622.2 , 1806.1 , 1782.6 , 2411.6 , - 1608.49 , 1798.1 , 1754.7 , 2399.6 , - 1605.11 , 1794.9 , 1784.4 , 2420.2 , - 1609.61 , 1805.4 , 1787.6 , 2407.5 , - 1624.94 , 1820.3 , 1798 , 2392.8 , - 1618.07 , 1819.6 , 1793.8 , 2377.6 , - 1611.96 , 1809.6 , 1777.3 , 2350.1 , - 1578.95 , 1799.9 , 1755.2 , 2325.7 , - 1561.39 , 1800.3 , 1737.8 , 2309.6 , - 1547.87 , 1793.3 , 1730.1 , 2303.1 , - 1548.63 , 1784.8 , 1722.4 , 2318 , - 1560.16 , 1791.7 , 1753.5 , 2356.8 , - 1554.76 , 1800.2 , 1757.3 , 2376.1 , - 1531.87 , 1788.6 , 1736.7 , 2354.7 , - 1526.14 , 1775.7 , 1734.2 , 2363.5 , - 1509.03 , 1753.5 , 1724.2 , 2359.4 , - 1530.03 , 1768.2 , 1744.2 , 2365.7 , - 1484.97 , 1727.9 , 1689.7 , 2311.1 , - 1464.03 , 1709.6 , 1667.7 , 2281 , - 1475.11 , 1704.6 , 1667.8 , 2285 , - 1516.12 , 1740.6 , 1687.6 , 2311.6 , - 1519.69 , 1745.7 , 1687.5 , 2312.6 , - 1529.97 , 1751.7 , 1684.9 , 2312.6 , - 1516.44 , 1747.3 , 1674.2 , 2298.4 , - 1515.53 , 1757.8 , 1711.4 , 2313 , - 1543.89 , 1774.2 , 1780.5 , 2381.9 , - 1534.72 , 1774.4 , 1779 , 2362.2 , - 1538.66 , 1788.3 , 1779.3 , 2372.2 , - 1536.71 , 1788 , 1763.7 , 2337.7 , - 1523.83 , 1779.1 , 1756.8 , 2327.5 , - 1527.1 , 1792.8 , 1774.2 , 2340.6 , - 1530.2 , 1812 , 1802 , 2370.9 , - 1601.5 , 1872.1 , 1873.6 , 2422.1 , - 1580.29 , 1851.4 , 1836.2 , 2370 , - 1595.09 , 1873.4 , 1859.8 , 2378.3 , - 1579.47 , 1889.6 , 1852.7 , 2483.9 , - 1600.59 , 1897.5 , 1882.9 , 2567 , - 1566 , 1888.8 , 1826.1 , 2560.1 , - 1557.01 , 1900.4 , 1832.8 , 2586 , - 1542.74 , 1913.4 , 1828.9 , 2580.5 , - 1536.3 , 1909.9 , 1829.5 , 2621.2 , - 1510.66 , 1910.8 , 1843.5 , 2601 , - 1481.03 , 1879.2 , 1770.3 , 2560 , - 1483.83 , 1880.2 , 1731.9 , 2565.5 , - 1470.09 , 1878.3 , 1736.7 , 2553 , - 1484.78 , 1885.2 , 1724 , 2572.3 , - 1475.41 , 1867.6 , 1683.3 , 2549.7 , - 1402.34 , 1788 , 1611 , 2446.3 , - 1421.49 , 1820.5 , 1612.5 , 2488.4 , - 1434.61 , 1858.2 , 1654.2 , 2517.1 , - 1446.32 , 1870.3 , 1673.9 , 2538.8 , - 1437.65 , 1878.4 , 1657.3 , 2541.2 , - 1441.57 , 1881.5 , 1655.1 , 2557.2 , - 1471.64 , 1893.2 , 1685.1 , 2584.7 , - 1453.95 , 1889.3 , 1667.9 , 2574.7 , - 1453.79 , 1877.3 , 1650 , 2546.6 , - 1458.02 , 1884 , 1664.2 , 2563.9 , - 1479.59 , 1904.7 , 1679.1 , 2562.2 , - 1504.89 , 1922.7 , 1731.3 , 2617 , - 1496.54 , 1908.5 , 1722.2 , 2645.7 , - 1511 , 1911.4 , 1730.7 , 2658.1 , - 1528.86 , 1921.1 , 1766.4 , 2669.7 , - 1534.02 , 1930.8 , 1770.7 , 2661.6 , - 1536.6 , 1927.8 , 1774.5 , 2669.8 , - 1508.19 , 1908.3 , 1749.9 , 2650.4 , - 1493.54 , 1905.9 , 1730.9 , 2642.3 , - 1489.68 , 1911.1 , 1742.4 , 2658.3 , - 1482.44 , 1921.6 , 1742.4 , 2687.8 , - 1483.34 , 1933.6 , 1786.9 , 2705.6 , - 1470.57 , 1942 , 1804.1 , 2691.7 , - 1484.84 , 1951.5 , 1804.7 , 2711.1 , - 1487.71 , 1955.7 , 1793.6 , 2702.7 , - 1508.63 , 1957.4 , 1786.7 , 2695.4 , - 1515.27 , 1962.3 , 1798.5 , 2714.6 , - 1509.84 , 1946.1 , 1798.5 , 2696.8 , - 1542.28 , 1950.2 , 1821.5 , 2726.4 , - 1541.79 , 1929.7 , 1796.8 , 2697.5 , - 1542.48 , 1913.4 , 1772.7 , 2679.6 , - 1550.27 , 1889.5 , 1764.4 , 2679.2 , - 1550.27 , 1882.8 , 1759.2 , 2704 , - 1543.37 , 1895.4 , 1722.3 , 2706.2 , - 1547.84 , 1897.9 , 1724.2 , 2732.4 , - 1523.62 , 1891.5 , 1674.8 , 2722.9 , - 1526.68 , 1880.1 , 1720.6 , 2727.1 , - 1513.42 , 1887 , 1721 , 2709.6 , - 1523.02 , 1891.4 , 1739.7 , 2741.8 , - 1529.69 , 1914.6 , 1749.7 , 2760.1 , - 1545.12 , 1931.2 , 1771.4 , 2778.8 , - 1546.82 , 1929.2 , 1792.3 , 2792 , - 1528.12 , 1924.3 , 1783.3 , 2764.1 , - 1530.65 , 1927 , 1799.4 , 2771 , - 1526.25 , 1935 , 1781.7 , 2759.4 , - 1519.48 , 1955.4 , 1788.6 , 2754.5 , - 1506.65 , 1962.2 , 1765.9 , 2769.8 , - 1504.3 , 1980.7 , 1791.2 , 2750.7 , - 1480.65 , 1987.7 , 1769.5 , 2726.5 , - 1476.7 , 1993.7 , 1758.7 , 2716.2 , - 1478.07 , 2015.7 , 1738.3 , 2721.8 , - 1479.62 , 2005 , 1744.8 , 2717.9 , - 1477.55 , 2023.9 , 1736.7 , 2732.8 , - 1472.59 , 2028.5 , 1735.2 , 2740.3 , - 1495.6 , 2044.9 , 1760.1 , 2789.7 , - 1517.45 , 2045.8 , 1786.3 , 2807.7 , - 1520.93 , 2057.3 , 1824.4 , 2842 , - 1527.06 , 2061.7 , 1821.1 , 2827.4 , - 1527.06 , 2061.7 , 1854.6 , 2827.5 , - 1527.06 , 2061.7 , 1854.6 , 2827.5 , - 1547.51 , 2092.3 , 1857.5 , 2827.5 , - 1545.82 , 2090.1 , 1870.3 , 2847.8 , - 1538.43 , 2105.4 , 1858.8 , 2832.5 , - 1538.43 , 2105.4 , 1857.8 , 2846.5 , - 1538.43 , 2105.4 , 1857.8 , 2846.5 , - 1538.04 , 2117.7 , 1843.1 , 2861.5 , - 1554.03 , 2128.2 , 1850.8 , 2833.6 , - 1551.17 , 2124.7 , 1859.6 , 2826 , - 1538.37 , 2079.9 , 1844.5 , 2816.5 , - 1529.1 , 2074.9 , 1852.6 , 2799.2 , - 1522.26 , 2046.4 , 1814.6 , 2773.4 , - 1533.79 , 2079.8 , 1796.8 , 2757.9 , - 1510.18 , 2076.7 , 1782.5 , 2745.3 , - 1526.91 , 2104.5 , 1803.5 , 2759.2 , - 1555.52 , 2101.3 , 1827.1 , 2765.1 , - 1581.49 , 2084 , 1837.5 , 2763.1 , - 1572.61 , 2063.9 , 1837.7 , 2737.6 , - 1572.69 , 2062.7 , 1818.8 , 2748.7 , - 1580.64 , 2089.9 , 1812.2 , 2773.3 , - 1593.35 , 2102.9 , 1820.4 , 2781.2 , - 1571.28 , 2086 , 1779.9 , 2771.9 , - 1575.59 , 2085.9 , 1792.6 , 2835.7 , - 1561.78 , 2064.1 , 1777.4 , 2832.5 , - 1572.68 , 2072.7 , 1780.6 , 2816.9 , - 1574.04 , 2091 , 1772.2 , 2807.2 , - 1590.33 , 2120.2 , 1785.9 , 2851.6 , - 1584.14 , 2120.4 , 1787.3 , 2834.4 , - 1605.91 , 2117.6 , 1824.1 , 2873.8 , - 1615.98 , 2123.7 , 1854.4 , 2865.9 , - 1643.83 , 2132.2 , 1908.2 , 2862.9 , - 1646.85 , 2137 , 1904.7 , 2870 , - 1639.12 , 2134.8 , 1894.1 , 2831.3 , - 1642.8 , 2121.4 , 1893.3 , 2816.4 , - 1659.07 , 2127.5 , 1905.6 , 2834.3 , - 1649.64 , 2135.5 , 1912 , 2843 , - 1674.93 , 2144.8 , 1899.5 , 2845.9 , - 1651.6 , 2131 , 1878.2 , 2812.2 , - 1656.35 , 2112.9 , 1905 , 2814 , - 1670.9 , 2131.3 , 1926.5 , 2837.7 , - 1683.3 , 2117.8 , 1937.2 , 2840 , - 1679.41 , 2096.1 , 1959.2 , 2838.3 , - 1658.09 , 2051.5 , 1944.1 , 2818 , - 1652.92 , 2065.7 , 1953.4 , 2817 , - 1661.96 , 2061 , 1944.6 , 2828.7 , - 1680.02 , 2100.6 , 1983.7 , 2868 , - 1691.37 , 2120.5 , 1998.8 , 2882.6 , - 1701.46 , 2130.9 , 2001.5 , 2882.3 , - 1690.48 , 2142.4 , 1995.2 , 2918.6 , - 1685.46 , 2139.5 , 1986.8 , 2904.8 , - 1686.15 , 2134.6 , 1995.1 , 2916.6 , - 1702.27 , 2132.2 , 2004.3 , 2957.3 , - 1711.91 , 2150.1 , 2009.7 , 2949.9 , - 1714.48 , 2157 , 1992.4 , 2956.7 , - 1708.65 , 2165 , 1988.9 , 2953.4 , - 1688.74 , 2127.2 , 1965.2 , 2915.9 , - 1705.05 , 2157.2 , 1986 , 2922.4 , - 1700.28 , 2150.8 , 1975.3 , 2919.3 , - 1689.71 , 2139.1 , 1967.3 , 2889.9 , - 1696.38 , 2154.7 , 1963.5 , 2883.3 , - 1686.57 , 2182.4 , 1962.7 , 2900.1 , - 1656.59 , 2161.3 , 1939.3 , 2863.9 , - 1653.2 , 2166.3 , 1952.2 , 2861.1 , - 1666.72 , 2146.8 , 1954.6 , 2860.6 , - 1663.27 , 2135.7 , 2001.4 , 2852.8 , - 1667.26 , 2160.9 , 2025.8 , 2852.9 , - 1675.18 , 2175.7 , 2033.9 , 2846.5 , - 1686.64 , 2188.9 , 2035.9 , 2861 , - 1676.84 , 2190.3 , 2031.4 , 2878.7 , - 1670.04 , 2188.4 , 2005.9 , 2878.4 , - 1657.06 , 2190.3 , 1990.8 , 2869.9 , - 1658.36 , 2184 , 1974.7 , 2838.8 , - 1667.64 , 2196 , 1995.3 , 2832.2 , - 1654.6 , 2184.9 , 1984 , 2822.1 , - 1658.13 , 2188.3 , 1986.9 , 2821.8 , - 1658.13 , 2188.3 , 1986.9 , 2821.8 , - 1658.13 , 2188.3 , 1986.9 , 2821.8 , - 1671.54 , 2181.7 , 2018.1 , 2846.8 , - 1674.95 , 2165.7 , 2015.4 , 2842.1 , - 1674.67 , 2160.5 , 1988.6 , 2839.7 , - 1678.65 , 2162.9 , 1986.7 , 2824.4 , - 1687.14 , 2166.3 , 1968.9 , 2830 , - 1680.06 , 2170.8 , 1949.3 , 2856.1 , - 1666.49 , 2178.1 , 1931.9 , 2869.6 , - 1680.01 , 2177.3 , 1944.5 , 2881.1 , - 1656.03 , 2162.3 , 1916.6 , 2843.8 , - 1643.53 , 2140.4 , 1911.6 , 2822.3 , - 1636.59 , 2124.7 , 1927.4 , 2832.7 , - 1630.88 , 2138.2 , 1942.5 , 2797.3 , - 1618.6 , 2123.2 , 1920.6 , 2786.8 , - 1626.83 , 2129.7 , 1939 , 2813.1 , - 1632 , 2152.8 , 1937 , 2813.1 , - 1619.92 , 2160 , 1923.6 , 2812.6 , - 1628.88 , 2165.8 , 1926.3 , 2796.5 , - 1617.74 , 2165.4 , 1920.5 , 2786.3 , - 1607.7 , 2162.6 , 1878.6 , 2793.7 , - 1616.45 , 2179.1 , 1877.2 , 2829.7 , - 1613.46 , 2191.1 , 1854.5 , 2836.1 , - 1632.99 , 2191.5 , 1872.7 , 2860.8 , - 1636.02 , 2183.3 , 1879.9 , 2849.3 , - 1632.35 , 2186.3 , 1851.7 , 2847 , - 1630.37 , 2205.2 , 1835.7 , 2858.1 , - 1619.26 , 2227.2 , 1846.4 , 2847.3 , - 1606.64 , 2227 , 1836.8 , 2819.7 , - 1606.64 , 2227 , 1836.8 , 2816.8 , - 1613.98 , 2232.9 , 1836.8 , 2812.2 , - 1608.58 , 2237.4 , 1861.4 , 2825.6 , - 1623.05 , 2243.5 , 1891.1 , 2837.7 , - 1617.18 , 2247.5 , 1890.4 , 2846.9 , - 1633.18 , 2267.1 , 1904.6 , 2855.3 , - 1627.21 , 2271.6 , 1888.7 , 2840.7 , - 1627.21 , 2271.6 , 1888.7 , 2840.7 , - 1625.59 , 2253.8 , 1872.8 , 2849.2 , - 1628.53 , 2259.8 , 1875.8 , 2863 , - 1630.56 , 2269 , 1867.9 , 2852.8 , - 1638.47 , 2284.2 , 1859.7 , 2829.9 , - 1660.88 , 2309.7 , 1887.9 , 2844.8 , - 1662.28 , 2294.5 , 1893.7 , 2844.4 , - 1679.69 , 2312.5 , 1915.2 , 2866.9 , - 1679.69 , 2309.2 , 1911.2 , 2860 , - 1685.85 , 2308.6 , 1920.4 , 2861.8 , - 1686.44 , 2293.8 , 1916.8 , 2885.5 , - 1684.57 , 2274 , 1897.9 , 2870 , - 1689.93 , 2294.6 , 1918.8 , 2883 , - 1681.47 , 2323.4 , 1900.3 , 2875.7 , - 1687.14 , 2318 , 1910.3 , 2879.4 , - 1697.26 , 2329.5 , 1929.2 , 2903.4 , - 1698.33 , 2335 , 1935.3 , 2907.6 , - 1690.96 , 2323.9 , 1942.4 , 2900.7 , - 1692.16 , 2335.8 , 1963.3 , 2894.7 , - 1699.52 , 2347.3 , 1960.8 , 2887.5 , - 1712.33 , 2369.8 , 1991 , 2897 , - 1703.05 , 2371.9 , 1977.5 , 2886 , - 1700.93 , 2376.2 , 1971.9 , 2900 , - 1698.36 , 2375.5 , 1960.2 , 2888.8 , - 1697.39 , 2368.8 , 1941.2 , 2857.7 , - 1694.83 , 2364.4 , 1925.4 , 2838.5 , - 1705.66 , 2390.9 , 1935.1 , 2848.1 , - 1739.48 , 2372 , 1943.7 , 2848.3 , - 1798.63 , 2397.1 , 1980.4 , 2845.9 , - 1798.36 , 2403 , 1985.7 , 2843.2 , - 1808.74 , 2408.7 , 1992.2 , 2830.9 , - 1806.52 , 2418.1 , 1991.2 , 2837.1 , - 1815.63 , 2410.5 , 1991.2 , 2832.3 , - 1807.12 , 2399.9 , 1963.1 , 2831.7 , - 1829.36 , 2396.4 , 1974.9 , 2833 , - 1835.09 , 2381.8 , 1981.7 , 2842.9 , - 1826.45 , 2324.5 , 1968.4 , 2823.9 , - 1821.28 , 2313.7 , 1947.5 , 2814.1 , - 1828.53 , 2340.2 , 1965.7 , 2820.1 , - 1830.61 , 2350.5 , 1995 , 2827.7 , - 1859.49 , 2388.7 , 2006.2 , 2844.2 , - 1846.02 , 2398 , 1998.1 , 2879.4 , - 1832.2 , 2408.7 , 1989.5 , 2884.2 , - 1823.4 , 2401.5 , 2036 , 2917.6 , - 1823.07 , 2400.9 , 2085.9 , 2926.5 , - 1818.1 , 2400.7 , 2129 , 2941.7 , - 1857.36 , 2429.8 , 2110.6 , 2945 , - 1861.22 , 2431.5 , 2101.4 , 2941.3 , - 1870.8 , 2424.9 , 2115.3 , 2943.4 , - 1878.94 , 2423.3 , 2149.8 , 2969.8 , - 1870.24 , 2420.5 , 2138.5 , 2986.4 , - 1864.51 , 2384.5 , 2139.8 , 2971.6 , - 1894.56 , 2411.1 , 2167.4 , 3006.1 , - 1908.69 , 2449.5 , 2161.9 , 3009.1 , - 1917.69 , 2461 , 2148 , 3010.1 , - 1903.44 , 2478.7 , 2148 , 3008.3 , - 1918.75 , 2464.9 , 2136.3 , 3025 , - 1930.29 , 2488 , 2160.8 , 3073.6 , - 1937.77 , 2480.6 , 2139.2 , 3065.5 , - 1909.53 , 2474.5 , 2128.2 , 3057.6 , - 1893.48 , 2467.3 , 2111.4 , 3042 , - 1907.65 , 2472.4 , 2123.4 , 3049.3 , - 1915.59 , 2499.7 , 2159.3 , 3079.2 , - 1890.58 , 2475.2 , 2173.6 , 3079.2 , - 1909.54 , 2478.6 , 2183.9 , 3100.6 , - 1929.56 , 2481 , 2205.7 , 3100.6 , - 1931.88 , 2488.5 , 2216.5 , 3100 , - 1923.67 , 2470.4 , 2191.9 , 3085.1 , - 1928.63 , 2463.8 , 2185.1 , 3072.6 , - 1920.43 , 2438.8 , 2156.1 , 3057.3 , - 1911.15 , 2392.5 , 2158 , 3055.4 , - 1878.77 , 2403.4 , 2137.3 , 3038.6 , - 1870.32 , 2397.9 , 2129.4 , 3035.4 , - 1870.46 , 2382.1 , 2108.8 , 3031.2 , - 1868.28 , 2363.6 , 2108.4 , 3037 , - 1874.38 , 2365.6 , 2119.1 , 3024.8 , - 1869.25 , 2388.3 , 2134.1 , 3028 , - 1852.81 , 2361.8 , 2078.5 , 2989.4 , - 1862.62 , 2374.4 , 2075.6 , 3003.9 , - 1884.67 , 2385.2 , 2099.5 , 3005.5 , - 1922.69 , 2418.4 , 2107.4 , 3004.5 , - 1922.05 , 2431.8 , 2094.4 , 3001.6 , - 1899.54 , 2414.6 , 2080 , 3007.5 , - 1902.14 , 2425.8 , 2057.5 , 3001.3 , - 1890.18 , 2445.9 , 2092.6 , 3005.2 , - 1914.4 , 2482.4 , 2108.6 , 3026.3 , - 1915.61 , 2478.3 , 2120 , 3036.9 , - 1908.97 , 2485.4 , 2126.8 , 3030.1 , - 1910.23 , 2473.1 , 2114.6 , 3037.5 , - 1920.46 , 2481.6 , 2116.7 , 3039.3 , - 1934.99 , 2490.3 , 2128.7 , 3067.7 , - 1973.45 , 2521.3 , 2158.8 , 3085.2 , - 1994.09 , 2534.8 , 2164.5 , 3100.8 , - 1991.95 , 2528 , 2147.4 , 3092.4 , - 2015.71 , 2533.6 , 2156.4 , 3108.6 , - 2009.28 , 2548.5 , 2138.7 , 3102.2 , - 2004.11 , 2552.5 , 2126.9 , 3094.7 , - 1999.6 , 2571 , 2127.3 , 3080.9 , - 1995.35 , 2586.4 , 2113.9 , 3086.3 , - 2023.26 , 2612.6 , 2139.3 , 3120.8 , - 2032.25 , 2663.6 , 2145 , 3137.6 , - 2036.93 , 2660.7 , 2147.3 , 3129.6 , - 2029.87 , 2668.4 , 2149.7 , 3156.3 , - 2048.05 , 2690.1 , 2199.7 , 3188.3 , - 2083.62 , 2701.4 , 2231.9 , 3199 , - 2061.18 , 2685 , 2227.7 , 3184.8 , - 2048.75 , 2700.2 , 2210.4 , 3165.3 , - 2040.97 , 2715.9 , 2192 , 3154.3 , - 2053.66 , 2720.9 , 2196 , 3163 , - 2064.98 , 2723.2 , 2182 , 3171 , - 2068.51 , 2727.1 , 2182 , 3164.4 , - 2086.4 , 2742.9 , 2169.7 , 3164.1 , - 2086.22 , 2749.9 , 2171.2 , 3162.3 , - 2057.1 , 2706.6 , 2136 , 3149 , - 2013.65 , 2654.2 , 2081 , 3085.6 , - 2007.5 , 2675.3 , 2084.8 , 3077.6 , - 2040.74 , 2727.1 , 2112.9 , 3096 , - 2020.11 , 2742.1 , 2087.3 , 3098.5 , - 2021.81 , 2720.1 , 2087.3 , 3099.7 , - 2023.06 , 2721.1 , 2096.9 , 3099.1 , - 2047.2 , 2717.4 , 2117.9 , 3093.3 , - 2070.17 , 2712.3 , 2115.9 , 3097.5 , - 2070.17 , 2711.1 , 2148 , 3120 , - 2075.99 , 2727.1 , 2149.7 , 3125.5 , - 2072.13 , 2733.9 , 2145.2 , 3108 , - 2020.36 , 2696.5 , 2082.6 , 3070.6 , - 2027.99 , 2702.1 , 2071.5 , 3069.3 , - 2036.45 , 2717.8 , 2070.6 , 3067.2 , - 2057.8 , 2726.8 , 2118.4 , 3093.1 , - 2045.25 , 2741.9 , 2120.6 , 3111.4 , - 2052.09 , 2738.2 , 2119.3 , 3135.8 , - 2052.92 , 2738.5 , 2110.1 , 3166.9 , - 2089.77 , 2774.3 , 2154 , 3233.2 , - 2099.76 , 2787.2 , 2160.5 , 3223.9 , - 2128.3 , 2819 , 2188.4 , 3234.2 , - 2118.01 , 2836.4 , 2186.7 , 3237.3 , - 2127.39 , 2834.8 , 2176.1 , 3237.3 , - 2165.95 , 2843.8 , 2205.3 , 3277.4 , - 2166.58 , 2858.4 , 2211.4 , 3271.6 , - 2165.5 , 2861.2 , 2198.1 , 3261.3 , - 2163.83 , 2876.9 , 2196.3 , 3254.6 , - 2128.07 , 2867.8 , 2156.5 , 3248.4 , - 2129.52 , 2850.6 , 2162.6 , 3278.8 , - 2144.03 , 2867.7 , 2160.3 , 3311.2 , - 2154.76 , 2889.5 , 2196.4 , 3337.1 , - 2188.18 , 2909 , 2223.5 , 3364.9 , - 2183.78 , 2918 , 2215.9 , 3342.4 , - 2209.17 , 2942.4 , 2225.8 , 3355.7 , - 2227.63 , 2967.4 , 2243 , 3396.5 , - 2227.63 , 2967.4 , 2251.5 , 3412.3 , - 2266.7 , 2972.6 , 2276.6 , 3412.3 , - 2236.91 , 2930.9 , 2264.6 , 3412.3 , - 2229.62 , 2934.2 , 2281.9 , 3462 , - 2255.29 , 2957.6 , 2281.2 , 3428.8 , - 2255.29 , 2957.6 , 2268.2 , 3418.4 , - 2274.62 , 2996.2 , 2290.6 , 3418.4 , - 2249.85 , 2999.2 , 2274.3 , 3408.5 , - 2233.61 , 3009.4 , 2249.6 , 3379.2 , - 2220.63 , 3021.9 , 2275.1 , 3403 , - 2224.95 , 3042.9 , 2307.6 , 3446 , - 2225 , 3015.9 , 2317.3 , 3440.6 , - 2228.1 , 3026.6 , 2331.3 , 3413.8 , - 2182.06 , 2999 , 2281.9 , 3372 , - 2142.37 , 2949.9 , 2252.2 , 3360 , - 2151.05 , 2990.6 , 2262.3 , 3400.6 , - 2115.56 , 3011.1 , 2234.8 , 3407.8 , - 2130.35 , 3037.5 , 2247.4 , 3437 , - 2132.52 , 3049.4 , 2274.7 , 3475.1 , - 2098.36 , 3045.9 , 2257.8 , 3470 , - 2073.94 , 3039.3 , 2244 , 3484.2 , - 2107.29 , 3041.3 , 2274.5 , 3481.4 , - 2090.78 , 3066.5 , 2278.3 , 3444 , - 2128.66 , 3091.3 , 2282.4 , 3436.1 , - 2123.31 , 3095.2 , 2281 , 3427.3 , - 2156.61 , 3140.7 , 2313.2 , 3447.4 , - 2192.6 , 3178.4 , 2334.4 , 3491.8 , - 2181.88 , 3148.7 , 2331.3 , 3481.5 , - 2184.05 , 3169.1 , 2355.9 , 3520.3 , - 2137.08 , 3151.9 , 2322 , 3491.5 , - 2143.9 , 3166.6 , 2329.2 , 3475.4 , - 2095.11 , 3089.8 , 2287.1 , 3419.1 , - 2099.57 , 3097.2 , 2299.9 , 3440.2 , - 2116.43 , 3054.2 , 2302.1 , 3429.1 , - 2119.69 , 3012.2 , 2296.8 , 3407 , - 2108.77 , 3012.2 , 2275.1 , 3378.9 , - 2101.93 , 2947.1 , 2281.6 , 3363.5 , - 2130.71 , 2947.1 , 2258 , 3393.2 , - 2135.25 , 2947.1 , 2258 , 3417.7 , - 2162.29 , 3033.4 , 2281.2 , 3425.3 , - 2133.85 , 3025.9 , 2251.8 , 3382.6 , - 2108.06 , 2997.6 , 2215.2 , 3350.3 , - 2113.64 , 2982.8 , 2226.7 , 3333.7 , - 2140.25 , 3027.5 , 2252 , 3341.9 , - 2082.9 , 2958.4 , 2208.3 , 3267.5 , - 2075.33 , 2929.3 , 2199 , 3281.2 , - 2103.24 , 2888.2 , 2238.1 , 3328.1 , - 2057.2 , 2847.4 , 2183.1 , 3270.6 , - 2018.69 , 2768.5 , 2144.7 , 3248.1 , - 2044.45 , 2803.4 , 2144.7 , 3246.5 , - 2076.76 , 2865.2 , 2178.7 , 3278 , - 2132.12 , 2918.7 , 2219.9 , 3305.9 , - 2125.47 , 2902.4 , 2216.4 , 3264.4 , - 2118.01 , 2858.5 , 2199.7 , 3246.7 , - 2124.51 , 2861.2 , 2184.6 , 3233.9 , - 2101.89 , 2831.6 , 2175 , 3191.9 , - 2169.4 , 2870.5 , 2215 , 3233.4 , - 2178.91 , 2906.9 , 2258.5 , 3267.4 , - 2168.11 , 2887.1 , 2242.7 , 3242.9 , - 2160.45 , 2887.7 , 2247.8 , 3255.7 , - 2140.39 , 2843.5 , 2221.3 , 3218.1 , - 2130.55 , 2804.3 , 2202.7 , 3198 , - 2141.7 , 2824.7 , 2200.7 , 3201.5 , - 2162.96 , 2857 , 2200.2 , 3155.3 , - 2144.36 , 2850.8 , 2152.6 , 3121.7 , - 2144 , 2831.8 , 2136.6 , 3129 , - 2167.72 , 2862.4 , 2144.5 , 3129.5 , - 2162.82 , 2827.4 , 2123.4 , 3123.4 , - 2151.84 , 2814.5 , 2083.9 , 3092.4 , - 2142.88 , 2794.8 , 2081.9 , 3086.4 , - 2142.88 , 2794.8 , 2081.9 , 3086.4 , - 2142.88 , 2794.8 , 2081.9 , 3086.4 , - 2177.09 , 2807.3 , 2100.3 , 3116.2 , - 2184.89 , 2830.2 , 2128.2 , 3131.5 , - 2202.57 , 2860.9 , 2119.6 , 3129 , - 2203.18 , 2873.4 , 2114.8 , 3120.8 , - 2224.85 , 2884 , 2145.3 , 3149.4 , - 2211.19 , 2887.8 , 2148.6 , 3159.1 , - 2215.19 , 2877.7 , 2152.4 , 3145.8 , - 2198.24 , 2843.7 , 2139.1 , 3131.7 , - 2211.92 , 2872.9 , 2159.6 , 3168.3 , - 2218.37 , 2869.1 , 2160.1 , 3138.2 , - 2193.89 , 2837.1 , 2136 , 3128 , - 2194.09 , 2818.7 , 2102.7 , 3098.3 , - 2194.41 , 2781.6 , 2092 , 3101.2 , - 2218.13 , 2787.9 , 2135.2 , 3133.7 , - 2208.68 , 2763.5 , 2116.3 , 3106.1 , - 2241.36 , 2776.2 , 2130.9 , 3125.3 , - 2256.98 , 2791.3 , 2147.3 , 3150 , - 2237.82 , 2768.9 , 2150.3 , 3129.9 , - 2252.51 , 2736.3 , 2166 , 3125.3 , - 2266.72 , 2765.2 , 2186.2 , 3125.3 , - 2261.71 , 2755.9 , 2179 , 3100 , - 2241.85 , 2705.6 , 2141.6 , 3070.5 , - 2249.78 , 2682.2 , 2162.6 , 3106 , - 2233.55 , 2641.4 , 2158.2 , 3106 , - 2218.77 , 2569.5 , 2139.4 , 3097.8 , - 2241.34 , 2629 , 2165 , 3136.3 , - 2248.02 , 2633 , 2176.7 , 3130.5 , - 2248.02 , 2633 , 2176.7 , 3137.8 , - 2257.33 , 2678.7 , 2187 , 3119.2 , - 2272.96 , 2709 , 2187.8 , 3115.6 , - 2268.11 , 2727.1 , 2195.2 , 3123.5 , - 2254.21 , 2740.6 , 2184 , 3116.5 , - 2245.79 , 2725.8 , 2165.4 , 3122.8 , - 2238.97 , 2732.7 , 2155.4 , 3127.3 , - 2238.97 , 2732.7 , 2155.4 , 3108.4 , - 2188.01 , 2692 , 2133.3 , 3089.1 , - 2137.56 , 2673.1 , 2084.4 , 3020.7 , - 2146 , 2689.2 , 2091.9 , 3019.7 , - 2112.8 , 2711.9 , 2050.7 , 2966.4 , - 2129.76 , 2742.9 , 2052.5 , 2966.4 , - 2137.34 , 2722.9 , 2029.9 , 2970.5 , - 2113.62 , 2731.5 , 1979.7 , 2931.9 , - 2120.23 , 2725.9 , 2007.4 , 2980.8 , - 2158.88 , 2728.4 , 2041.7 , 2997.8 , - 2163.59 , 2781.4 , 2037.2 , 3009.4 , - 2131.8 , 2778.1 , 2023.7 , 3004.8 , - 2143.93 , 2801.1 , 2046.8 , 3038.2 , - 2131.14 , 2777.2 , 2028.4 , 3028.9 , - 2143.58 , 2763.8 , 2020.7 , 3055.9 , - 2084.42 , 2744.2 , 1977.7 , 3016.3 , - 2088.44 , 2740 , 1992 , 3039.6 , - 2073.21 , 2701.8 , 1966.4 , 3045.8 , - 2047.29 , 2666.6 , 1942.8 , 3030.1 , - 2031.8 , 2627.6 , 1936 , 3022.9 , - 1986.42 , 2545 , 1903 , 2971.1 , - 1957.08 , 2544.2 , 1890.8 , 2940.2 , - 2004.93 , 2595.7 , 1917 , 2960.4 , - 2032.52 , 2626.7 , 1939 , 2942.4 , - 2005.07 , 2577.2 , 1907 , 2876.6 , - 2000.48 , 2561.4 , 1911.6 , 2899.9 , - 2022.25 , 2604.4 , 1925.8 , 2909 , - 2042.45 , 2631.2 , 1936.3 , 2946.3 , - 2020.85 , 2608.8 , 1892 , 2919.2 , - 2040.69 , 2588.9 , 1872.9 , 2936.4 , - 2061.7 , 2636.4 , 1866.2 , 2970.4 , - 2034.64 , 2609.7 , 1878.7 , 2965 , - 2031.33 , 2598.9 , 1889 , 2946.7 , - 2049.1 , 2590.5 , 1920.8 , 2964.4 , - 2047.83 , 2560.3 , 1920.8 , 2962.4 , - 2069.46 , 2562.5 , 1949.8 , 2983.8 , - 2048.57 , 2508 , 1942.1 , 2963.9 , - 2051.25 , 2474.5 , 1974.6 , 3005.3 , - 2070.71 , 2528.3 , 1974.6 , 3050.4 , - 2103.54 , 2514.9 , 1974.6 , 3074.8 , - 2116.96 , 2494.7 , 2025.1 , 3082 , - 2129.86 , 2521.6 , 2052.3 , 3091.3 , - 2120.97 , 2562.3 , 2043.7 , 3077.2 , - 2126.75 , 2579.4 , 2053.8 , 3095.1 , - 2148.23 , 2599.2 , 2041.4 , 3114.7 , - 2144.21 , 2601.2 , 2059.8 , 3106.1 , - 2163.32 , 2604.4 , 2076.8 , 3117.2 , - 2135.93 , 2544.9 , 2055.7 , 3082.3 , - 2134.12 , 2559.3 , 2053.4 , 3095.9 , - 2152.19 , 2579.5 , 2075 , 3082.6 , - 2161.5 , 2579.5 , 2069.6 , 3097.4 , - 2193.63 , 2629.7 , 2117.2 , 3157.5 , - 2190.83 , 2620.7 , 2115 , 3160.4 , - 2176.66 , 2615.3 , 2096.5 , 3150.5 , - 2188.81 , 2600.8 , 2107.1 , 3167.5 , - 2182.32 , 2617.5 , 2106.3 , 3171.9 , - 2160.56 , 2585.5 , 2074.5 , 3168.6 , - 2166.51 , 2591.4 , 2064.2 , 3167 , - 2156.31 , 2588.8 , 2038.9 , 3138.2 , - 2133.74 , 2580.5 , 2007 , 3142.3 , - 2134.34 , 2570.6 , 2007 , 3142.2 , - 2152.65 , 2588.7 , 2012.4 , 3147.3 , - 2166.56 , 2599.3 , 2035 , 3190.3 , - 2151.44 , 2582.7 , 2010.5 , 3182.6 , - 2143.84 , 2557 , 2001.3 , 3191.4 , - 2113.37 , 2532.4 , 1972.6 , 3171.3 , - 2121.25 , 2530.9 , 2000.6 , 3175.1 , - 2132.98 , 2541.1 , 2006.3 , 3205.2 , - 2153.48 , 2551.1 , 2026.5 , 3234.2 , - 2190.58 , 2581.3 , 2062.7 , 3265.1 , - 2215.72 , 2635.2 , 2075.3 , 3265.1 , - 2205.82 , 2635.7 , 2060.4 , 3249.6 , - 2207.09 , 2645.6 , 2069.1 , 3251.3 , - 2185.78 , 2628.4 , 2034.9 , 3216.5 , - 2197.38 , 2672 , 2020.4 , 3222.7 , - 2173.6 , 2674.5 , 1998.2 , 3241.5 , - 2158.07 , 2652.4 , 1961.5 , 3205.4 , - 2167.68 , 2662.5 , 1964.2 , 3203.9 , - 2178.1 , 2664.1 , 1983.4 , 3180 , - 2155.58 , 2642.1 , 1948.8 , 3139.3 , - 2155.81 , 2643 , 1966.8 , 3128.8 , - 2157.15 , 2658.8 , 1969.4 , 3121.4 , - 2118.17 , 2637.7 , 1952.9 , 3079.8 , - 2129.36 , 2628.6 , 1977.3 , 3112.7 , - 2097.45 , 2603.3 , 1924.6 , 3065.1 , - 2100.55 , 2614.7 , 1922.9 , 3079.1 , - 2059.15 , 2593 , 1919.3 , 3037.3 , - 2067.17 , 2594 , 1897.2 , 3014.8 , - 2072.81 , 2602.9 , 1899.4 , 3021.2 , - 2097.33 , 2609.1 , 1927.4 , 3028.2 , - 2057.83 , 2586.1 , 1902.7 , 2999.8 , - 2056.89 , 2581 , 1901.3 , 3008.5 , - 2070.36 , 2590 , 1905 , 3038.7 , - 2016.08 , 2558 , 1876.2 , 2992.5 , - 2002.3 , 2534.4 , 1879.3 , 3026.3 , - 2002.3 , 2499.5 , 1852.8 , 2983.5 , - 1988.67 , 2522.5 , 1876.1 , 3001.8 , - 1946.49 , 2480.4 , 1833.7 , 2956.3 , - 1965.41 , 2484.8 , 1843.4 , 2984.4 , - 1977.67 , 2496.9 , 1856.4 , 2998.7 , - 2048.56 , 2553.4 , 1898.3 , 3032.3 , - 2087.71 , 2570.2 , 1919 , 3073 , - 2072.68 , 2562.7 , 1918.1 , 3100.5 , - 2108.08 , 2593.3 , 1955.6 , 3141.9 , - 2118.52 , 2585.3 , 1933 , 3106.7 , - 2095.58 , 2575.6 , 1906.4 , 3120.2 , - 2069.58 , 2542.5 , 1898.6 , 3085.3 , - 2055.94 , 2529.8 , 1876.3 , 3060.8 , - 2048.15 , 2530.9 , 1867.4 , 3063.2 , - 2016.6 , 2508.6 , 1842.1 , 3032.8 , - 2022.64 , 2525.2 , 1841.6 , 3029.1 , - 1995.85 , 2494.7 , 1824.4 , 3000.9 , - 2009.45 , 2477.2 , 1831.5 , 2999.9 , - 2026.37 , 2458.6 , 1858.1 , 3029.6 , - 2064.86 , 2490.5 , 1905.7 , 3083.8 , - 2061.58 , 2506.5 , 1905.7 , 3097.4 , - 2066.18 , 2503.9 , 1905.7 , 3096.3 , - 2039.91 , 2500 , 1873.6 , 3081.3 , - 2061.37 , 2534.8 , 1911.1 , 3104.4 , - 2069.39 , 2541 , 1931.7 , 3097.6 , - 2043.3 , 2557.9 , 1906.1 , 3065.8 , - 2056.36 , 2543.9 , 1921.5 , 3063.8 , - 2090.78 , 2590.4 , 1943.9 , 3099.6 , - 2098.04 , 2602.7 , 1948.4 , 3103.5 , - 2073.67 , 2597.8 , 1948.4 , 3075.9 , - 2091.04 , 2590.9 , 1941.1 , 3095.3 , - 2112.21 , 2591.9 , 1954.5 , 3135.4 , - 2112.21 , 2609.4 , 1950.2 , 3146.5 , - 2091.94 , 2600.9 , 1927.5 , 3127.5 , - 2089.48 , 2606.5 , 1926.5 , 3131 , - 2097.2 , 2607 , 1927.8 , 3121 , - 2073.29 , 2571.8 , 1911.4 , 3078.7 , - 2040.05 , 2546.1 , 1893.1 , 3027.5 , - 2058.79 , 2568.6 , 1934.7 , 3036.6 , - 2056.27 , 2572.5 , 1945.9 , 3033.5 , - 2050.82 , 2579.4 , 1952.4 , 3047.1 , - 2036.24 , 2584.7 , 1940 , 3061.1 , - 2057.08 , 2594.9 , 1975.9 , 3081.4 , - 2045.54 , 2576 , 1964 , 3039.6 , - 2042.38 , 2577.5 , 1982.7 , 3017.3 , - 2067.26 , 2611 , 1973.7 , 3033.5 , - 2046.99 , 2589.1 , 1969 , 3016.1 , - 2044.04 , 2584.3 , 1969.8 , 3012.5 , - 2041.85 , 2589.3 , 1954.1 , 3013.8 , - 2024.19 , 2576 , 1937 , 2977.3 , - 2003.64 , 2562.8 , 1919.3 , 2943.4 , - 2019.13 , 2566 , 1917.1 , 2946.4 , - 2040.94 , 2581.4 , 1930.2 , 2980.6 , - 2054.23 , 2598 , 1931.1 , 2973.4 , - 2069.9 , 2604.7 , 1924.2 , 3013.6 , - 2066.59 , 2600.7 , 1928.1 , 3034.4 , - 2080.16 , 2614.7 , 1924.7 , 3058.1 , - 2095.5 , 2636.1 , 1940.9 , 3070.4 , - 2102.25 , 2649.8 , 1952.1 , 3091.7 , - 2100.98 , 2651 , 1949.9 , 3083.4 , - 2100.98 , 2651 , 1966.6 , 3083.4 , - 2110.77 , 2673.5 , 1956 , 3083.4 , - 2097.34 , 2656.2 , 1927.8 , 3095.8 , - 2074.68 , 2628.8 , 1894.2 , 3065.6 , - 2097.51 , 2628.8 , 1881.2 , 3065.5 , - 2079.19 , 2628.8 , 1881.2 , 3065.5 , - 2068.92 , 2612.3 , 1885.9 , 3065.7 , - 2072.9 , 2632.4 , 1901.8 , 3051.6 , - 2051.46 , 2613.1 , 1871.5 , 3032.3 , - 2058.2 , 2622.3 , 1886.4 , 3065 , - 2053.41 , 2617.3 , 1864.2 , 3055.8 , - 2062.08 , 2600.4 , 1859.2 , 3060.4 , - 2061.76 , 2597 , 1849.1 , 3049.4 , - 2059.68 , 2600.5 , 1844.1 , 3033.2 , - 2064.14 , 2600.2 , 1854 , 3048.3 , - 2088.25 , 2591.6 , 1872.8 , 3076.7 , - 2081.39 , 2582.8 , 1856.9 , 3054 , - 2085.62 , 2593.6 , 1860.3 , 3054.9 , - 2079.6 , 2595.5 , 1837.1 , 3028.6 , - 2050.86 , 2574.6 , 1813.3 , 2995.9 , - 2013.03 , 2525.3 , 1772.8 , 2954.2 , - 2027.67 , 2534.8 , 1780.2 , 2969 , - 2026.97 , 2525.5 , 1802.5 , 2982.2 , - 2040.79 , 2554.7 , 1826.3 , 3007.3 , - 2030.56 , 2552.4 , 1814.1 , 3022.2 , - 2026.68 , 2540.2 , 1813.4 , 2995.9 , - 2024.82 , 2536.9 , 1797.9 , 2991.6 , - 2047.44 , 2560.8 , 1827.8 , 3017.3 , - 2038.46 , 2563.7 , 1816.1 , 3034.7 , - 2077.94 , 2589.4 , 1842.4 , 3059.7 , - 2085.08 , 2621.4 , 1872.1 , 3062 , - 2093.01 , 2628 , 1870.4 , 3072.7 , - 2087.78 , 2617.4 , 1850.9 , 3072.5 , - 2117.8 , 2636.9 , 1874.4 , 3099 , - 2127.56 , 2635.4 , 1869.4 , 3109.9 , - 2118.96 , 2636 , 1850.1 , 3081.1 , - 2128.33 , 2642.4 , 1856.1 , 3071.3 , - 2135.49 , 2636 , 1861.9 , 3074.9 , - 2112.06 , 2621 , 1835 , 3051.1 , - 2119.29 , 2601 , 1822.5 , 3044.2 , - 2101.98 , 2597.2 , 1802.2 , 3018.6 , - 2101.82 , 2609.6 , 1805.6 , 3023.4 , - 2096.26 , 2610 , 1804.4 , 3019.5 , - 2126.44 , 2632.1 , 1827 , 3049.3 , - 2117.59 , 2623.3 , 1805.7 , 3037.7 , - 2106.05 , 2607.5 , 1802.2 , 3025.3 , - 2097.85 , 2600.4 , 1776.9 , 3009.3 , - 2127.21 , 2619.2 , 1808.4 , 3041.2 , - 2116.64 , 2617.2 , 1807.4 , 3038.2 , - 2094.16 , 2586.5 , 1795.2 , 3025.1 , - 2069.95 , 2553.2 , 1773.3 , 3001.9 , - 2041.26 , 2543.1 , 1748.6 , 2977 , - 2029.38 , 2515.8 , 1756.8 , 2992.1 , - 1989.2 , 2461.5 , 1727.1 , 2986.9 , - 2008.85 , 2467.7 , 1743.1 , 3021.1 , - 1974.14 , 2450.3 , 1721.8 , 3011.8 , - 2022.5 , 2463.3 , 1769 , 3050.6 , - 1995.22 , 2475 , 1738.6 , 3047 , - 2016.15 , 2491.7 , 1785.8 , 3094.1 , - 1979.52 , 2497.5 , 1788.8 , 3089.3 , - 1984.99 , 2516 , 1811.6 , 3124.2 , - 1984.15 , 2505.5 , 1813.8 , 3135 , - 1978.07 , 2501.9 , 1818 , 3139.7 , - 1935.08 , 2480.7 , 1795.7 , 3136.4 , - 1935.87 , 2526.6 , 1817.3 , 3153.4 , - 1928.82 , 2518.1 , 1836.1 , 3149.8 , - 1911.7 , 2495.6 , 1837.2 , 3128.3 , - 1918.85 , 2495 , 1852.4 , 3142.3 , - 1949.76 , 2533.1 , 1893 , 3176.2 , - 1914.69 , 2508.9 , 1859.5 , 3137.9 , - 1934.96 , 2511.1 , 1864 , 3143.1 , - 1965.68 , 2536.2 , 1882.8 , 3188.1 , - 1972.59 , 2536.3 , 1872.9 , 3190.2 , - 1976.52 , 2556.1 , 1890.2 , 3200.9 , - 1978.71 , 2559.3 , 1900.4 , 3210.9 , - 1980.81 , 2561.2 , 1880.9 , 3204.2 , - 1979.26 , 2563.1 , 1869.3 , 3190.9 , - 1991.08 , 2562.4 , 1871.9 , 3209.8 , - 1982.99 , 2560.3 , 1881.1 , 3208.8 , - 1982.99 , 2560.3 , 1881.1 , 3208.8 , - 1982.99 , 2560.3 , 1881.1 , 3208.8 , - 1954.62 , 2547.1 , 1855.7 , 3194.5 , - 1943.88 , 2516.8 , 1874.9 , 3170.1 , - 1955.33 , 2544.2 , 1882 , 3174.7 , - 1987.7 , 2560.8 , 1928.4 , 3199.9 , - 1978.97 , 2554.8 , 1918.5 , 3209.3 , - 2007.57 , 2561.1 , 1945.9 , 3214.9 , - 2028.52 , 2574.4 , 1942.3 , 3226.2 , - 2024.25 , 2567 , 1931 , 3217.6 , - 2017.95 , 2597.2 , 1918.5 , 3216.7 , - 2017.95 , 2597.2 , 1918.5 , 3220.4 , - 2036.47 , 2621.4 , 1936.9 , 3248.2 , - 2037.99 , 2618.6 , 1971.1 , 3262.6 , - 2034.15 , 2641.7 , 1946.2 , 3264.3 , - 2021.22 , 2650.5 , 1927.4 , 3251.7 , - 2030.65 , 2658.8 , 1927.4 , 3251.7 , - 2050.66 , 2655.6 , 1988.7 , 3261.2 , - 2064.41 , 2661.4 , 1996.7 , 3290.1 , - 2086.41 , 2701 , 2003.6 , 3317.9 , - 2102.4 , 2728.2 , 2017.3 , 3310.3 , - 2092 , 2739 , 1991.5 , 3310.7 , - 2109.36 , 2746.6 , 2001.3 , 3300.8 , - 2088.99 , 2739.8 , 2004.7 , 3297.4 , - 2083.8 , 2727.7 , 1989.8 , 3285.8 , - 2064.42 , 2701 , 1965.5 , 3261 , - 2096.87 , 2751.2 , 1979.5 , 3284.5 , - 2083.55 , 2750.4 , 1965.3 , 3291.8 , - 2105.88 , 2778.5 , 1960.7 , 3327.3 , - 2105.88 , 2778.5 , 1960.7 , 3328.2 , - 2065.71 , 2751.7 , 1919.1 , 3311.1 , - 2069.26 , 2762.5 , 1927.8 , 3311.1 , - 2081.46 , 2779.4 , 1927.3 , 3309.9 , - 2099.95 , 2786.4 , 1948 , 3319.4 , - 2119.24 , 2807.8 , 1960.8 , 3340.6 , - 2132.72 , 2805.3 , 1971.3 , 3345 , - 2132.72 , 2805.3 , 1971.3 , 3376.6 , - 2154.17 , 2809.7 , 1965.9 , 3380 , - 2136.72 , 2819.6 , 1974.7 , 3370.8 , - 2137.21 , 2806.8 , 1951.2 , 3380.8 , - 2107.16 , 2795.3 , 1897 , 3337.7 , - 2127.79 , 2802.3 , 1907.8 , 3344.6 , - 2124.25 , 2800.9 , 1922.8 , 3348 , - 2124.84 , 2798.1 , 1893.7 , 3339.8 , - 2130.78 , 2800.2 , 1920.7 , 3370.4 , - 2125.06 , 2775.4 , 1905 , 3366.1 , - 2154.13 , 2803 , 1918.4 , 3381.3 , - 2140.36 , 2805.6 , 1896.1 , 3377.2 , - 2144.88 , 2816.8 , 1902.8 , 3378.3 , - 2144.88 , 2843.3 , 1925.2 , 3403.8 , - 2144.88 , 2837.7 , 1895.1 , 3379.4 , - 2137.36 , 2830.3 , 1902.4 , 3309.2 , - 2128.99 , 2845.1 , 1877.7 , 3313.2 , - 2091.3 , 2836.8 , 1865.5 , 3282.7 , - 2094.68 , 2845.6 , 1861.9 , 3294 , - 2089.04 , 2825.3 , 1858.8 , 3314.6 , - 2099.68 , 2827.5 , 1879.7 , 3323.7 , - 2110.13 , 2847.5 , 1889.4 , 3349.2 , - 2117.63 , 2843.7 , 1907.8 , 3394.9 , - 2111.35 , 2833.7 , 1889.5 , 3388.3 , - 2163.37 , 2848.4 , 1950.8 , 3462.9 , - 2184.39 , 2842.9 , 1949.4 , 3455 , - 2194.15 , 2847.3 , 1961.3 , 3464 , - 2200.32 , 2867.9 , 1961.7 , 3450.6 , - 2193.72 , 2869.7 , 1948.3 , 3447.2 , - 2191.25 , 2863.4 , 1948.3 , 3429.2 , - 2201.36 , 2892.3 , 1951.5 , 3442.6 , - 2183.71 , 2875.1 , 1929 , 3420.7 , - 2195.31 , 2856.2 , 1931.2 , 3405.3 , - 2183.52 , 2822.2 , 1905.9 , 3400.4 , - 2196.54 , 2830.2 , 1908.9 , 3413.1 , - 2232.02 , 2836.6 , 1926.6 , 3431.6 , - 2232.23 , 2833.2 , 1941.3 , 3432.9 , - 2237.73 , 2827.1 , 1942.5 , 3454.3 , - 2239.36 , 2824.7 , 1947.9 , 3458.3 , - 2217.91 , 2833.1 , 1932.8 , 3468.9 , - 2222.51 , 2826.8 , 1920 , 3463.3 , - 2211.26 , 2826.8 , 1917.8 , 3449.9 , - 2249.6 , 2852.3 , 1960 , 3499.9 , - 2234.86 , 2814.3 , 1950.8 , 3475.6 , - 2236.68 , 2807.1 , 1957.1 , 3482.4 , - 2244.56 , 2800.6 , 1950.4 , 3483.5 , - 2236.89 , 2797.4 , 1954.7 , 3468.8 , - 2222.28 , 2781.3 , 1943.7 , 3468.3 , - 2236.72 , 2802.6 , 1949.2 , 3474.7 , - 2228.44 , 2820.1 , 1946.2 , 3467.5 , - 2208.41 , 2807.2 , 1946.2 , 3441.4 , - 2236.73 , 2838.4 , 1946.2 , 3444.4 , - 2251.64 , 2880.6 , 1970.4 , 3465.1 , - 2253.93 , 2880 , 1967.3 , 3470.6 , - 2265.86 , 2889.5 , 1971.6 , 3509.8 , - 2269.6 , 2886.7 , 1984.4 , 3535.7 , - 2258.97 , 2900.8 , 1963.3 , 3530.2 , - 2262.66 , 2896.8 , 1957.4 , 3515.9 , - 2253.91 , 2887.1 , 1939.2 , 3520 , - 2257.34 , 2893.8 , 1937.8 , 3524.9 , - 2240.31 , 2883.3 , 1890.1 , 3524.9 , - 2230.27 , 2887.3 , 1899.5 , 3502.6 , - 2251.3 , 2915.7 , 1921.4 , 3504 , - 2234.23 , 2908.8 , 1883.4 , 3477.8 , - 2242.76 , 2918.3 , 1881.7 , 3509.4 , - 2263.08 , 2952.7 , 1900.5 , 3522.7 , - 2266.57 , 2971.1 , 1902.5 , 3532.4 , - 2266.37 , 2999.6 , 1884.8 , 3557.7 , - 2263.27 , 2989.1 , 1861.7 , 3545.6 , - 2266.77 , 2989.2 , 1854.9 , 3554.5 , - 2268.26 , 2986.3 , 1869.7 , 3549.3 , - 2266.07 , 2990.5 , 1873.6 , 3535.9 , - 2300.72 , 3016.8 , 1898.2 , 3570.8 , - 2300.29 , 3011.6 , 1892.4 , 3565.4 , - 2305.58 , 3025.4 , 1880 , 3564.6 , - 2289.49 , 3008.1 , 1871.7 , 3533.3 , - 2306.66 , 3033.5 , 1882.5 , 3541.4 , - 2294.15 , 3029 , 1863.8 , 3561.5 , - 2275.72 , 3039.1 , 1853.9 , 3557.9 , - 2204.44 , 2994.7 , 1790.7 , 3514.8 , - 2212.97 , 3015.3 , 1800.6 , 3507 , - 2232.02 , 3045.5 , 1816.3 , 3523.3 , - 2190.9 , 3009.8 , 1791.8 , 3485 , - 2184.24 , 3000.6 , 1767.6 , 3479 , - 2201.27 , 3014.8 , 1788.4 , 3508.2 , - 2197.01 , 3039 , 1780.7 , 3520.2 , - 2197.01 , 3049 , 1800.7 , 3524.2 , - 2211.6 , 3036.5 , 1803.9 , 3544.1 , - 2191.54 , 3036.6 , 1800.3 , 3544.4 , - 2176.35 , 3054 , 1809.6 , 3526.5 , - 2157.41 , 3064 , 1785.7 , 3510.3 , - 2137.01 , 3050 , 1778 , 3460.1 , - 2153.56 , 3073 , 1794.4 , 3474.3 , - 2159.73 , 3083.7 , 1803.8 , 3523.8 , - 2206.11 , 3109.2 , 1817 , 3568 , - 2193.85 , 3116.3 , 1790.5 , 3557.3 , - 2185.52 , 3112.3 , 1779.7 , 3562.2 , - 2197.57 , 3135.4 , 1770.7 , 3593 , - 2176.09 , 3124.5 , 1757.3 , 3578.6 , - 2148.12 , 3120.4 , 1740.7 , 3551.4 , - 2116.86 , 3041.7 , 1721.1 , 3531.5 , - 2114.88 , 3062.3 , 1724.2 , 3535.3 , - 2140.74 , 3078.9 , 1764.1 , 3537.8 , - 2142.74 , 3080 , 1754.1 , 3519.6 , - 2112.01 , 3026.6 , 1742.4 , 3497.9 , - 2149.71 , 3057.9 , 1795.3 , 3510 , - 2165.76 , 3108.2 , 1814 , 3529.1 , - 2182.11 , 3128.5 , 1814 , 3518.7 , - 2180.49 , 3123.4 , 1828.7 , 3523 , - 2169.69 , 3137.6 , 1832.1 , 3500.4 , - 2168.57 , 3123.2 , 1822.6 , 3514.8 , - 2174.27 , 3133.8 , 1857.4 , 3522.4 , - 2184.05 , 3132.6 , 1866.3 , 3537.1 , - 2182.47 , 3150.1 , 1852.6 , 3541.6 , - 2174.78 , 3130.4 , 1839.8 , 3523.4 , - 2195.15 , 3121.4 , 1838.2 , 3536.8 , - 2197.34 , 3133 , 1838.2 , 3547.9 , - 2196.64 , 3124.8 , 1875.2 , 3571.4 , - 2199.29 , 3148.4 , 1905.1 , 3610.8 , - 2196.59 , 3152.5 , 1890.5 , 3609.2 , - 2204.01 , 3182.2 , 1881.4 , 3628.8 , - 2201.9 , 3183.9 , 1872.9 , 3604.1 , - 2194.53 , 3201 , 1875.5 , 3632.4 , - 2197.26 , 3209.2 , 1867.1 , 3602.5 , - 2210.92 , 3220.1 , 1891 , 3624 , - 2247.97 , 3251 , 1889.8 , 3649 , - 2242.91 , 3229.5 , 1870.3 , 3648.8 , - 2249.75 , 3245.9 , 1857.3 , 3655.5 , - 2254.95 , 3251.6 , 1828.3 , 3664.3 , - 2266.56 , 3261.2 , 1820.9 , 3664.3 , - 2261.08 , 3278.4 , 1774.9 , 3669.7 , - 2269.34 , 3278.5 , 1814.9 , 3664.2 , - 2274.94 , 3281.5 , 1834.8 , 3662.8 , - 2260.62 , 3245.7 , 1846.8 , 3639.5 , - 2277.7 , 3246.6 , 1856.3 , 3630 , - 2277.7 , 3261.6 , 1849.6 , 3652.1 , - 2278.64 , 3280.9 , 1848.9 , 3654.9 , - 2283.26 , 3273.4 , 1833.8 , 3662.4 , - 2286.21 , 3272.2 , 1875 , 3671.6 , - 2283.84 , 3289.8 , 1859.3 , 3642.6 , - 2240.24 , 3251.6 , 1820.5 , 3596.1 , - 2241.43 , 3217.7 , 1810.2 , 3576.9 , - 2268.07 , 3254.3 , 1831.2 , 3613.7 , - 2268.35 , 3255 , 1834.4 , 3633.3 , - 2280.81 , 3277.9 , 1873.4 , 3658.3 , - 2280.81 , 3277.9 , 1873.4 , 3658.3 , - 2280.81 , 3277.9 , 1866.7 , 3658.3 , - 2280.44 , 3317.1 , 1877 , 3676.4 , - 2273.9 , 3297.7 , 1879.1 , 3676.7 , - 2260.69 , 3297.7 , 1872 , 3689.3 , - 2260.69 , 3297.7 , 1872 , 3689.3 , - 2307.7 , 3297.7 , 1908.4 , 3687.9 , - 2326.18 , 3384.5 , 1943 , 3715.6 , - 2332.81 , 3395.8 , 1931.2 , 3714.1 , - 2315.66 , 3376.1 , 1917.7 , 3704.5 , - 2336.76 , 3368.1 , 1916.6 , 3720.6 , - 2351.47 , 3361.5 , 1916.3 , 3720.6 , - 2340.31 , 3314.8 , 1910.1 , 3671.5 , - 2330.98 , 3284.1 , 1897.9 , 3654.9 , - 2353.89 , 3292.9 , 1907.6 , 3657.3 , - 2361.38 , 3233.9 , 1924.4 , 3662.7 , - 2379.43 , 3254.8 , 1952.1 , 3710.6 , - 2375.63 , 3219.3 , 1966 , 3704.2 , - 2389.62 , 3257.8 , 1960.1 , 3748.7 , - 2400.58 , 3253.1 , 1964.3 , 3748.4 , - 2391.74 , 3249.9 , 1954.4 , 3754.2 , - 2393.12 , 3219 , 1934.1 , 3735 , - 2436.68 , 3221.3 , 1946 , 3758.2 , - 2437.02 , 3211.2 , 1950.2 , 3734.2 , - 2449.71 , 3191.4 , 1966.7 , 3734.7 , - 2437.7 , 3198.2 , 1980.7 , 3734.6 , - 2456.09 , 3236.8 , 2003.1 , 3735.3 , - 2463 , 3248.7 , 2021 , 3759.3 , - 2472.53 , 3279.9 , 2024.1 , 3752.8 , - 2459.81 , 3270 , 2022.2 , 3781.3 , - 2416.84 , 3221.7 , 1985.6 , 3746.6 , - 2437.98 , 3253.8 , 1988.5 , 3747.5 , - 2442.43 , 3262.7 , 1983.3 , 3726.1 , - 2411.49 , 3245.6 , 1956.2 , 3708.4 , - 2435.07 , 3242.7 , 1960.7 , 3716.3 , - 2428.59 , 3253.1 , 1967.7 , 3726.6 , - 2436.09 , 3260.1 , 1983.3 , 3747.6 , - 2427.77 , 3266.1 , 1956.4 , 3745 , - 2426.51 , 3272.2 , 1964.2 , 3779.8 , - 2423.6 , 3280.3 , 1952.5 , 3770.9 , - 2387.6 , 3270.6 , 1939.7 , 3744.3 , - 2373.01 , 3243.5 , 1932.4 , 3714.6 , - 2401.59 , 3253 , 1936.9 , 3725.6 , - 2421.93 , 3264.4 , 1953.3 , 3740 , - 2449.52 , 3296.2 , 1976.9 , 3740.3 , - 2438.73 , 3298.6 , 1960.9 , 3704.2 , - 2449.09 , 3309.9 , 1974.5 , 3715.9 , - 2486.95 , 3360.5 , 1996.9 , 3738.2 , - 2485.18 , 3354.8 , 1990.8 , 3727.6 , - 2488.85 , 3385.5 , 2017.2 , 3752.7 , - 2486.83 , 3400.6 , 2015.3 , 3768.6 , - 2472.52 , 3383.4 , 2001.9 , 3777.1 , - 2471.38 , 3408.3 , 2005.9 , 3758.9 , - 2479.38 , 3581.9 , 2008 , 3758.2 , - 2448.8 , 3549.7 , 1975.5 , 3710.3 , - 2419.72 , 3506.2 , 1948.9 , 3674.5 , - 2415.29 , 3540.5 , 1932.1 , 3639.5 , - 2417 , 3558.3 , 1944.3 , 3640.3 , - 2432.46 , 3578.4 , 1962.4 , 3681.8 , - 2458 , 3561.1 , 1950.1 , 3644.8 , - 2472.55 , 3583.6 , 1965 , 3669.6 , - 2484.74 , 3605.1 , 1967.2 , 3693 , - 2491.73 , 3611.1 , 1969.8 , 3685.4 , - 2505.32 , 3629.3 , 1976.9 , 3698.3 , - 2479.84 , 3647.7 , 1974.4 , 3707 , - 2514.8 , 3677 , 2003.8 , 3681.9 , - 2505.78 , 3658.1 , 2008 , 3660.9 , - 2523.81 , 3671 , 2030.5 , 3672.4 , - 2502.94 , 3640.3 , 2020 , 3672.6 , - 2489.35 , 3646.5 , 2044.8 , 3699.7 , - 2500.75 , 3654.3 , 2055.6 , 3718.4 , - 2508.11 , 3648.3 , 2070.4 , 3728.5 , - 2489.52 , 3606.7 , 2064 , 3725.1 , - 2498.75 , 3611.1 , 2075 , 3755.6 , - 2498.75 , 3611.1 , 2075 , 3755.6 , - 2498.75 , 3611.1 , 2075 , 3755.6 , - 2510.81 , 3594.4 , 2081.7 , 3758.6 , - 2525.59 , 3601.5 , 2093.9 , 3767.4 , - 2508.12 , 3566.9 , 2072.5 , 3744.2 , - 2526.74 , 3575.5 , 2074.7 , 3766.8 , - 2540.79 , 3589.6 , 2080.6 , 3790.5 , - 2547.32 , 3607.5 , 2097.3 , 3825.3 , - 2519.82 , 3603.9 , 2075.1 , 3805.6 , - 2524.18 , 3601.2 , 2086 , 3820.7 , - 2535.86 , 3628.1 , 2092.5 , 3857.1 , - 2549.27 , 3673.2 , 2116.5 , 3852.7 , - 2549.12 , 3647.3 , 2112 , 3833 , - 2524.84 , 3668.4 , 2122.1 , 3817.6 , - 2538.68 , 3668.1 , 2116.4 , 3819.3 , - 2539.88 , 3696 , 2138.4 , 3832.8 , - 2505.97 , 3658.2 , 2130.8 , 3809.2 , - 2492.63 , 3651 , 2146.8 , 3817.9 , - 2492.63 , 3651 , 2146.8 , 3806 , - 2465.49 , 3635.8 , 2136.8 , 3776.4 , - 2472.43 , 3611.2 , 2115.4 , 3751.6 , - 2473.52 , 3591.6 , 2090.4 , 3751.6 , - 2476.79 , 3583.6 , 2083.7 , 3723 , - 2466.21 , 3534.1 , 2083.7 , 3707.3 , - 2470.57 , 3521.6 , 2085.4 , 3728.3 , - 2499.02 , 3556.9 , 2114.8 , 3754.4 , - 2496.33 , 3557.8 , 2100.9 , 3739.2 , - 2528.2 , 3582.4 , 2122.1 , 3759.7 , - 2534.4 , 3572.5 , 2124.6 , 3776.2 , - 2534.4 , 3572.5 , 2124.6 , 3753.6 , - 2552.29 , 3593 , 2136.9 , 3789.6 , - 2541.98 , 3584 , 2120.6 , 3778.2 , - 2564.12 , 3587.3 , 2129.7 , 3789.4 , - 2548.79 , 3550 , 2103.5 , 3764.2 , - 2546.55 , 3547.4 , 2114.5 , 3747 , - 2549.53 , 3572.2 , 2117.7 , 3752.1 , - 2549.53 , 3572.2 , 2117.7 , 3752.1 , - 2559.15 , 3583.8 , 2132.9 , 3760.2 , - 2548.53 , 3558.2 , 2117.1 , 3775.7 , - 2535.78 , 3537.7 , 2108.4 , 3746.7 , - 2523.81 , 3556.1 , 2110.1 , 3747.8 , - 2543.99 , 3544.6 , 2121.1 , 3739.2 , - 2550.42 , 3568.1 , 2111 , 3755.2 , - 2551.03 , 3572 , 2115.4 , 3753.4 , - 2559.02 , 3585.5 , 2133.2 , 3760.3 , - 2536.03 , 3547.9 , 2102 , 3706.8 , - 2552.96 , 3575.8 , 2120.8 , 3728.8 , - 2571.1 , 3575.6 , 2137.5 , 3755.7 , - 2569.9 , 3600.9 , 2137.3 , 3769.2 , - 2566.13 , 3607.4 , 2126.2 , 3761.7 , - 2544.9 , 3593.9 , 2111.8 , 3753.6 , - 2549.71 , 3600.1 , 2113 , 3761.5 , - 2554.12 , 3628.3 , 2107.9 , 3756.4 , - 2546.04 , 3643.6 , 2100.7 , 3753.2 , - 2532.22 , 3655.4 , 2077.1 , 3727.5 , - 2547.78 , 3687.3 , 2084.2 , 3722.3 , - 2562.19 , 3701.5 , 2097.6 , 3710.8 , - 2578.36 , 3699.6 , 2118.4 , 3679.5 , - 2572.06 , 3723.5 , 2113.3 , 3695.5 , - 2551.8 , 3703 , 2112.9 , 3678.8 , - 2570.44 , 3732.9 , 2123.7 , 3711 , - 2573.44 , 3728.2 , 2118.8 , 3725.6 , - 2565.32 , 3750.8 , 2111.8 , 3725.7 , - 2566.32 , 3757 , 2114 , 3714.1 , - 2578.74 , 3771.3 , 2126.8 , 3760.6 , - 2568.79 , 3731.2 , 2098.8 , 3743.2 , - 2561.51 , 3732.8 , 2079.1 , 3741.5 , - 2562.24 , 3773.4 , 2076.6 , 3752.3 , - 2573 , 3788 , 2081.9 , 3765.8 , - 2561.95 , 3810 , 2073.4 , 3749 , - 2548.97 , 3785.8 , 2050.6 , 3728.3 , - 2529.5 , 3755.4 , 2029.5 , 3698.3 , - 2475.98 , 3678.1 , 1989.5 , 3632.3 , - 2497.69 , 3656.2 , 1995.1 , 3658.2 , - 2505.56 , 3649.2 , 2007.3 , 3693.4 , - 2498.35 , 3661.5 , 1992.8 , 3710.5 , - 2468.32 , 3566.1 , 1960.3 , 3681.3 , - 2488.82 , 3585.2 , 1982.2 , 3708.4 , - 2459.13 , 3482.6 , 1954.1 , 3668.8 , - 2464.51 , 3537.4 , 1974.7 , 3684.7 , - 2469.51 , 3537.8 , 1962.9 , 3673.3 , - 2472.25 , 3549.5 , 1961.1 , 3678.8 , - 2466.84 , 3518.2 , 1968.5 , 3668.5 , - 2491.5 , 3494.4 , 1995.9 , 3703.2 , - 2504.16 , 3494.4 , 2009.9 , 3734.4 , - 2520.26 , 3604.6 , 2023.4 , 3770.6 , - 2520.52 , 3623.3 , 2013.2 , 3788.3 , - 2527.73 , 3629 , 1999.3 , 3788.4 , - 2541.41 , 3662.6 , 1996.7 , 3811.1 , - 2534.63 , 3653.4 , 1997.4 , 3811.4 , - 2532.96 , 3643.2 , 1985.4 , 3810.7 , - 2529.14 , 3623.1 , 1978.2 , 3803.3 , - 2545.65 , 3630.2 , 1980.6 , 3823.4 , - 2544.61 , 3650.7 , 1979.5 , 3830.3 , - 2542.75 , 3646.3 , 1979.5 , 3837.4 , - 2567.96 , 3670.5 , 1979.5 , 3872.9 , - 2556.25 , 3664.4 , 1986.2 , 3863.7 , - 2562.12 , 3698.2 , 2019.3 , 3883.2 , - 2534.44 , 3683.8 , 2000.6 , 3872.1 , - 2559.42 , 3713 , 2017.8 , 3891.1 , - 2562.12 , 3725.4 , 2020.8 , 3907.5 , - 2554.42 , 3714.6 , 2020.4 , 3907.5 , - 2563.59 , 3722.4 , 2018 , 3905.7 , - 2556.64 , 3692.6 , 2002.9 , 3918.7 , - 2548.84 , 3682.6 , 1977.6 , 3885 , - 2534.49 , 3646.3 , 1970.6 , 3867.6 , - 2538.34 , 3654.7 , 1977 , 3884.4 , - 2528.73 , 3623.9 , 1971.4 , 3855.9 , - 2526.18 , 3634.2 , 1984.8 , 3872.7 , - 2532.55 , 3627.1 , 1996.2 , 3887.2 , - 2542.74 , 3637.8 , 2004.8 , 3893 , - 2549.71 , 3684.4 , 2020.3 , 3910.8 , - 2568.77 , 3694.2 , 2042.1 , 3916.1 , - 2568.7 , 3678.9 , 2038.1 , 3905.6 , - 2588.04 , 3687.2 , 2065.4 , 3932.6 , - 2614.5 , 3716.8 , 2080.4 , 3967.9 , - 2630.24 , 3722.7 , 2086.2 , 3977.2 , - 2626.43 , 3690 , 2080.9 , 3972.3 , - 2621.2 , 3690.1 , 2072.7 , 3955.7 , - 2625.46 , 3694.9 , 2082.3 , 3974.3 , - 2641.5 , 3694.9 , 2079.5 , 3964.1 , - 2624.18 , 3635.5 , 2067.1 , 3919.7 , - 2643.42 , 3661.2 , 2081.5 , 3910.5 , - 2663.1 , 3697.7 , 2103.4 , 3935.7 , - 2664.96 , 3699.5 , 2104.1 , 3933.2 , - 2659.86 , 3696.6 , 2107.1 , 3946.4 , - 2655.49 , 3736.4 , 2132.8 , 3953.7 , - 2654.34 , 3737.5 , 2123.2 , 3992.2 , - 2685.29 , 3760.2 , 2141.8 , 4015.1 , - 2685.29 , 3771.6 , 2136.1 , 4000 , - 2704.25 , 3771.6 , 2152.7 , 4024.8 , - 2705.21 , 3813.7 , 2151.6 , 4031.5 , - 2702.6 , 3818.1 , 2161.5 , 4035.6 , - 2685.23 , 3807.9 , 2146.7 , 4009.3 , - 2683.52 , 3797.3 , 2135.6 , 3994.7 , - 2692.69 , 3805.2 , 2147.1 , 4028.1 , - 2700.83 , 3813.7 , 2143.6 , 4038.7 , - 2718.73 , 3822.2 , 2168.3 , 4050.8 , - 2705.06 , 3790.2 , 2158.5 , 4024.4 , - 2717.5 , 3793.2 , 2165.3 , 4042.1 , - 2727.56 , 3803.3 , 2185.2 , 4053.1 , - 2733.67 , 3788.2 , 2180.2 , 4073.1 , - 2721.74 , 3775.3 , 2175.6 , 4057.2 , - 2678.89 , 3742.9 , 2148.9 , 4028.4 , - 2681.94 , 3753.6 , 2151.6 , 3999.4 , - 2690.79 , 3758.7 , 2162.4 , 4022.4 , - 2703.33 , 3763.5 , 2150.4 , 4025.3 , - 2675.5 , 3732 , 2125.7 , 3993.5 , - 2664.72 , 3723.1 , 2124.8 , 3963.9 , - 2671.4 , 3725.3 , 2140.5 , 3979.1 , - 2670.19 , 3736.1 , 2140.5 , 3948.5 , - 2678.73 , 3749.2 , 2142.2 , 3928.1 , - 2716.16 , 3784.8 , 2187.3 , 3921.1 , - 2735.28 , 3815.4 , 2213.4 , 3935.7 , - 2724.25 , 3811.5 , 2211.8 , 3900.4 , - 2732.29 , 3812 , 2205.2 , 3910.8 , - 2730.44 , 3827.6 , 2205.2 , 3914.4 , - 2764 , 3829.8 , 2229.1 , 3934.3 , - 2770.61 , 3825.7 , 2217.2 , 3926.9 , - 2784.39 , 3856.4 , 2218.2 , 3926.1 , - 2800.6 , 3897.9 , 2240.3 , 3958.2 , - 2768.68 , 3888.3 , 2228.8 , 3962.1 , - 2781.54 , 3892.6 , 2240.1 , 3978.1 , - 2766.08 , 3883.3 , 2233.4 , 3962.8 , - 2765.29 , 3861.5 , 2233.6 , 3953.8 , - 2769.47 , 3882.8 , 2255.5 , 4018.7 , - 2800.52 , 3891.7 , 2277.1 , 4054.6 , - 2808.62 , 3878.2 , 2275.1 , 4068.4 , - 2793.86 , 3845.3 , 2270.8 , 4049.2 , - 2829.68 , 3884.1 , 2290.3 , 4050.2 , - 2848.84 , 3902.5 , 2315.7 , 4058 , - 2853.46 , 3874 , 2318.6 , 4038.5 , - 2900.76 , 3924.5 , 2349.1 , 4061.5 , - 2880.89 , 3910.6 , 2308.7 , 4045.2 , - 2894.43 , 3913.8 , 2292.5 , 4051.2 , - 2832.53 , 3835.5 , 2240.7 , 3963 , - 2870.3 , 3874 , 2255.8 , 4011.6 , - 2890.95 , 3885.4 , 2251.4 , 4035.7 , - 2836.36 , 3857.6 , 2213.3 , 3982.5 , - 2846.94 , 3860 , 2212.1 , 3990.7 , - 2815.77 , 3839.3 , 2203.4 , 3972.4 , - 2841.16 , 3869.2 , 2222.6 , 3993.8 , - 2808.5 , 3850.4 , 2193.7 , 3979.6 , - 2814.23 , 3874 , 2218.9 , 4018.2 , - 2824.83 , 3880.8 , 2248.7 , 4051.3 , - 2835.54 , 3890.1 , 2278.5 , 4077.6 , - 2844.09 , 3875.5 , 2287.4 , 4087.2 , - 2844.09 , 3869.8 , 2289.6 , 4092.5 , - 2844.09 , 3869.8 , 2289.6 , 4092.5 , - 2844.09 , 3869.8 , 2303.8 , 4092.5 , - 2859.22 , 3922.2 , 2307 , 4091 , - 2880.07 , 3948.3 , 2318.6 , 4115.7 , - 2880.07 , 3942.2 , 2315.7 , 4118.5 , - 2880.07 , 3942.2 , 2315.7 , 4118.5 , - 2820.81 , 3942.2 , 2257 , 4057.4 , - 2863.26 , 3940.1 , 2282.8 , 4089.5 , - 2890.2 , 3923.8 , 2306.7 , 4106.5 , - 2876.34 , 3922.9 , 2301.7 , 4078.8 , - 2904.08 , 3944.9 , 2331.6 , 4087.5 , - 2936.69 , 3966.2 , 2349.1 , 4087 , - 2915.81 , 3947.4 , 2327.5 , 4056.6 , - 2956.78 , 3975.5 , 2361.3 , 4107.3 , - 2978.84 , 3983.6 , 2402.1 , 4168.2 , - 2976.56 , 3979.6 , 2388 , 4158.9 , - 2996.12 , 4007.1 , 2407.8 , 4197.5 , - 3006.87 , 4019.9 , 2425.1 , 4207.7 , - 2999.19 , 4009.5 , 2406.1 , 4194 , - 3000.66 , 4023.1 , 2409.9 , 4195.5 , - 3026.63 , 4115.4 , 2442.5 , 4219.1 , - 3037.28 , 4161 , 2461.3 , 4219.1 , - 2982.63 , 4125.5 , 2430.3 , 4218.8 , - 2992.55 , 4127.3 , 2435.2 , 4212 , - 3028.27 , 4182.3 , 2482.8 , 4237.4 , - 2997.95 , 4169.7 , 2465 , 4207.5 , - 3018.58 , 4209.1 , 2503.1 , 4228.4 , - 3037.7 , 4272.2 , 2516.6 , 4275.8 , - 3064.7 , 4282.8 , 2508.6 , 4257.8 , - 3067.48 , 4296.5 , 2503.1 , 4260.9 , - 3114.73 , 4305.5 , 2541.3 , 4281.5 , - 3124.78 , 4309.8 , 2558.4 , 4265.9 , - 3161.36 , 4357.9 , 2597.5 , 4307.8 , - 3185.72 , 4384.3 , 2595.4 , 4307.7 , - 3191.45 , 4408.4 , 2582.1 , 4304.3 , - 3211.01 , 4444.1 , 2599.3 , 4304.3 , - 3256.86 , 4436.3 , 2628.4 , 4327.1 , - 3249.17 , 4464.2 , 2627.4 , 4341 , - 3260.3 , 4514.6 , 2634.5 , 4337.8 , - 3230.83 , 4490.7 , 2617.5 , 4332.3 , - 3209.04 , 4525.5 , 2594.8 , 4357.4 , - 3197.09 , 4530.8 , 2575.2 , 4356.1 , - 3203.79 , 4522.5 , 2562.8 , 4336.8 , - 3180.63 , 4463.2 , 2567.9 , 4331.1 , - 3233.34 , 4503.9 , 2607.7 , 4344.7 , - 3245.02 , 4539 , 2602.2 , 4329.3 , - 3272.58 , 4519.7 , 2629.4 , 4339.2 , - 3261.04 , 4487.6 , 2607.8 , 4308.3 , - 3258.74 , 4460.1 , 2600.3 , 4307.1 , - 3345.09 , 4513.7 , 2651.7 , 4357.7 , - 3375.45 , 4547.1 , 2666.2 , 4360.1 , - 3396.55 , 4605.2 , 2698.9 , 4399.3 , - 3419.51 , 4638.9 , 2708.3 , 4420.3 , - 3426.77 , 4684.4 , 2709.2 , 4437.4 , - 3430.95 , 4677.1 , 2686.2 , 4444.3 , - 3382.4 , 4676.2 , 2641.7 , 4422.5 , - 3367.82 , 4609.9 , 2632.1 , 4397.7 , - 3404.29 , 4636.2 , 2645.6 , 4424.3 , - 3337.11 , 4556.5 , 2588.4 , 4373.3 , - 3289.59 , 4519.9 , 2574 , 4356.8 , - 3305.72 , 4535.1 , 2596.8 , 4332.2 , - 3247.03 , 4442.9 , 2553.7 , 4258.1 , - 3288.52 , 4491.3 , 2587.1 , 4254.8 , - 3302.57 , 4497.3 , 2579.3 , 4214.8 , - 3374.93 , 4558.6 , 2624.3 , 4270.7 , - 3439.22 , 4620.5 , 2648.7 , 4301.5 , - 3407.83 , 4659.2 , 2656.7 , 4312.9 , - 3407.83 , 4659.2 , 2656.7 , 4312.9 , - 3407.83 , 4659.2 , 2656.7 , 4312.9 , - 3281.46 , 4501.7 , 2581.8 , 4248.1 , - 3210.94 , 4488.7 , 2530.3 , 4236.6 , - 3212.82 , 4463.9 , 2514.5 , 4214.6 , - 3235.35 , 4471.5 , 2518 , 4236.6 , - 3342.77 , 4588 , 2572.3 , 4271.7 , - 3328.13 , 4582.6 , 2579 , 4269.3 , - 3364.76 , 4634.9 , 2617.6 , 4292.3 , - 3352.58 , 4626.6 , 2608 , 4313.2 , - 3319.24 , 4604.2 , 2574.6 , 4270.7 , - 3297.52 , 4586.3 , 2566.1 , 4251.7 , - 3369.26 , 4643.4 , 2620.6 , 4286.8 , - 3347.54 , 4625.6 , 2621 , 4294.6 , - 3361.8 , 4665.7 , 2615.2 , 4298.9 , - 3361.2 , 4699.1 , 2547.6 , 4310.5 , - 3328.41 , 4740.1 , 2522.7 , 4328.7 , - 3348.9 , 4752.3 , 2514.7 , 4346.1 , - 3366.87 , 4781.1 , 2533.6 , 4387.7 , - 3396.49 , 4836.1 , 2539.8 , 4388.5 , - 3357.57 , 4772.3 , 2536.3 , 4369.7 , - 3372.96 , 4793.3 , 2550.3 , 4389.7 , - 3425.86 , 4855.1 , 2602.9 , 4433.2 , - 3438.09 , 4897.6 , 2639.5 , 4436 , - 3438.09 , 4897.6 , 2639.5 , 4445 , - 3491.08 , 4953.5 , 2655.3 , 4455.6 , - 3565.69 , 5029.6 , 2672.8 , 4455.6 , - 3548.52 , 4988.4 , 2651.9 , 4519.3 , - 3537.45 , 5016 , 2643.3 , 4537.5 , - 3537.45 , 5016 , 2643.3 , 4580.4 , - 3533.21 , 5004.7 , 2633.9 , 4630.9 , - 3593.14 , 5042.5 , 2693.1 , 4669.6 , - 3559.29 , 5084.2 , 2719.6 , 4691 , - 3588.57 , 5134.3 , 2774.6 , 4686.9 , - 3564.85 , 5141.7 , 2776 , 4681.2 , - 3569.26 , 5157.5 , 2784.3 , 4693.9 , - 3569.26 , 5157.5 , 2784.3 , 4645.2 , - 3516.2 , 5081 , 2751.1 , 4607.5 , - 3600.4 , 5178.6 , 2786.4 , 4642 , - 3575.44 , 5176.4 , 2741.7 , 4651.8 , - 3621.72 , 5181 , 2762.9 , 4661.8 , - 3669.31 , 5196.7 , 2654.7 , 4661.8 , - 3665.43 , 5190 , 2680.3 , 4681.6 , - 3626.6 , 5133.1 , 2583.2 , 4677.5 , - 3635.38 , 5132.1 , 2579.2 , 4672.3 , - 3562.73 , 5041.6 , 2583.9 , 4621.3 , - 3596.4 , 5150 , 2601.5 , 4562.8 , - 3655.59 , 5207.2 , 2624.5 , 4557.8 , - 3651.59 , 5238.5 , 2635.4 , 4557.1 , - 3684.6 , 5251.2 , 2690.9 , 4576.2 , - 3700.53 , 5320 , 2719.3 , 4645 , - 3668.61 , 5368.8 , 2686.2 , 4686.7 , - 3671.16 , 5361.9 , 2664.2 , 4739.6 , - 3671.87 , 5308.6 , 2696.2 , 4724.8 , - 3737.16 , 5364.2 , 2760.3 , 4757.4 , - 3752.37 , 5384.6 , 2808.5 , 4783.1 , - 3750.02 , 5362 , 2795.9 , 4745.1 , - 3721.18 , 5345.9 , 2762.6 , 4682.2 , - 3730.56 , 5405 , 2751.7 , 4657 , - 3777.56 , 5510.3 , 2739.7 , 4653.7 , - 3788.54 , 5561.8 , 2757.1 , 4593.9 , - 3748.79 , 5587.8 , 2762.2 , 4575.8 , - 3761.07 , 5576.1 , 2784.8 , 4596.3 , - 3819.52 , 5662.4 , 2867.4 , 4640 , - 3820.16 , 5669.9 , 2893.6 , 4657.9 , - 3809.92 , 5700.3 , 2891 , 4640.3 , - 3766.89 , 5620.6 , 2858.3 , 4604.6 , - 3834.84 , 5654.8 , 2944 , 4728.3 , - 3867.53 , 5674.3 , 2909.5 , 4751.4 , - 3939.73 , 5804.9 , 2937 , 4831.7 , - 3946.73 , 5846.5 , 2934.5 , 4812.8 , - 4003.35 , 5947 , 2947.7 , 4810.7 , - 4030.1 , 6012.6 , 2929.8 , 4758.5 , - 4026.97 , 5977.1 , 2950.6 , 4762.4 , - 4000.65 , 5885.4 , 2929.1 , 4767.8 , - 4074.3 , 5801.5 , 2941.6 , 4799.5 , - 4142.19 , 5845.8 , 2941.6 , 4857.4 , - 4139.68 , 5844.7 , 2950.7 , 4899.3 , - 4223.69 , 5927.5 , 2988 , 4964.2 , - 4203.91 , 5868.3 , 2958.6 , 4949 , - 4131.94 , 5737.1 , 2876.7 , 4877.2 , - 4139.96 , 5620.5 , 2874.1 , 4805.7 , - 4297.64 , 5677.1 , 2921.1 , 4846.7 , - 4384.82 , 5869.9 , 3003.5 , 4874.5 , - 4320.52 , 5849.2 , 2973.5 , 4862.9 , - 4368.54 , 5847 , 3025.9 , 4851.5 , - 4400.3 , 5888 , 3022.2 , 4862.6 , - 4377.7 , 5842.1 , 3023.6 , 4876.6 , - 4458.66 , 5929.5 , 3069.3 , 4927.3 , - 4405.52 , 5898.2 , 3075.7 , 4907.5 , - 4336.98 , 5898.2 , 3049.5 , 4899.3 , - 4302.5 , 5771 , 2992.4 , 4895.7 , - 4325.86 , 5765.2 , 2984.1 , 4960.6 , - 4364.25 , 5812.1 , 3037.1 , 5026.2 , - 4428.08 , 5922.1 , 3056.3 , 5086.8 , - 4342.31 , 5864.8 , 2996.3 , 5031.3 , - 4333.15 , 5825.6 , 2983.4 , 5031.9 , - 4377.51 , 5808.4 , 2998.6 , 5075.8 , - 4237.06 , 5682.1 , 2924 , 5003.6 , - 4195.53 , 5579.5 , 2921.8 , 4991.3 , - 4077.59 , 5498.5 , 2921.8 , 4865.8 , - 4080.55 , 5405.6 , 2870.1 , 4835 , - 4190.45 , 5580.1 , 2936.2 , 4914.2 , - 4251.93 , 5690.1 , 2979.3 , 4958.4 , - 4204.81 , 5668.8 , 2957.2 , 4978 , - 4090.14 , 5475.8 , 2904.2 , 4901.1 , - 4076.75 , 5473.9 , 2898.6 , 4901.1 , - 3993.7 , 5363.3 , 2869.3 , 4886.3 , - 3992.03 , 5409.6 , 2871.7 , 4906.9 , - 3897.43 , 5217.3 , 2828.4 , 4845.4 , - 3919.79 , 5216.7 , 2770.5 , 4817.5 , - 4001.81 , 5271.5 , 2805.8 , 4870.2 , - 4127.28 , 5447.5 , 2921.2 , 4952.2 , - 4062.13 , 5478.6 , 2918 , 4976.9 , - 4093.43 , 5478.1 , 2927 , 4991.3 , - 4073.71 , 5532.9 , 2924.5 , 4994.2 , - 4131.26 , 5505.3 , 2940.9 , 4985.2 , - 4104.57 , 5445.1 , 2919.7 , 4950.5 , - 4028 , 5356.7 , 2874.6 , 4905.2 , - 3890.24 , 5280.8 , 2843.6 , 4854.8 , - 3796.61 , 5281.9 , 2834.1 , 4848.2 , - 3869.53 , 5321.7 , 2898.6 , 4902.9 , - 3995.69 , 5417.8 , 2940.6 , 4976.4 , - 3970.44 , 5550.4 , 2944 , 5013.1 , - 4004.04 , 5629 , 2978.4 , 5046.2 , - 3983.06 , 5611 , 2977.2 , 5023.8 , - 4096.85 , 5705.1 , 3017.5 , 5075.7 , - 4091.77 , 5730.4 , 2997.2 , 5027.5 , - 4150.95 , 5732.5 , 3023.7 , 5077.2 , - 4104.93 , 5667.1 , 3005.4 , 5065.5 , - 4135.09 , 5716.6 , 2985.6 , 5226.3 , - 4116.52 , 5691.8 , 2989 , 5220.3 , - 4154.89 , 5673.6 , 3008.3 , 5244.2 , - 4262.98 , 5754.7 , 3054.9 , 5317.1 , - 4266.17 , 5825 , 3052.1 , 5296.1 , - 4266.17 , 5929 , 3094 , 5330.8 , - 4326.35 , 5897.4 , 3078 , 5300 , - 4311.13 , 5846.9 , 3064.4 , 5305.6 , - 4267.4 , 5822.3 , 3024.1 , 5262.1 , - 4179.92 , 5732.2 , 2960.7 , 5217.8 , - 4164.62 , 5699.5 , 2955.1 , 5227.3 , - 4225.27 , 5792.8 , 3002.9 , 5300.1 , - 4215.23 , 5836.3 , 3002.5 , 5298.9 , - 4168.62 , 5815.9 , 2992.2 , 5263.7 , - 4149.92 , 5806.8 , 2992.9 , 5287.9 , - 4049.16 , 5751.6 , 2958 , 5271.1 , - 4069.25 , 5777.2 , 2946.7 , 5211 , - 4172.47 , 5862.9 , 2989.9 , 5225.9 , - 4124.86 , 5803.2 , 2958.1 , 5148.8 , - 3976.38 , 5651.8 , 2856.9 , 4991.5 , - 3981.44 , 5689.5 , 2849 , 4970.2 , - 3871.39 , 5533.5 , 2769.6 , 4840.7 , - 3645.69 , 5279.7 , 2651.3 , 4755.4 , - 3806.66 , 5479 , 2818 , 4871.8 , - 3748.88 , 5370.9 , 2739.5 , 4801.9 , - 3753.66 , 5467.2 , 2739.3 , 4842.3 , - 3847.73 , 5581.6 , 2788 , 4906.4 , - 3784.8 , 5538.2 , 2774.9 , 4897.4 , - 3841.39 , 5601.6 , 2822.4 , 4908.3 , - 3813.88 , 5557.4 , 2781.8 , 4863.8 , - 3715.38 , 5438.6 , 2707.1 , 4764.3 , - 3728.37 , 5459.7 , 2707.1 , 4806.8 , - 3734.79 , 5483.9 , 2707.1 , 4793.7 , - 3697.48 , 5434 , 2694.5 , 4720.4 , - 3701.94 , 5418.2 , 2700.7 , 4711 , - 3676.65 , 5437 , 2698.9 , 4741.8 , - 3816.71 , 5565 , 2773 , 4867 , - 3844.14 , 5574.2 , 2782.6 , 4845.4 , - 3876.9 , 5571.7 , 2790.6 , 4830.1 , - 3931.81 , 5650.4 , 2821.2 , 4908.4 , - 3941.91 , 5725.5 , 2861.7 , 4985.8 , - 3832.1 , 5645.7 , 2802.5 , 4898.6 , - 3850.14 , 5666.3 , 2786.3 , 4863.5 , - 3926.93 , 5738.3 , 2811.7 , 4891.2 , - 3961.97 , 5772.4 , 2829 , 4889 , - 3972.08 , 5775.9 , 2854.4 , 4831.8 , - 4125.92 , 5875.1 , 2918.5 , 4921.8 , - 4096.4 , 5919.9 , 2913.1 , 4977.6 , - 4074.55 , 5922.7 , 2902.4 , 4970.7 , - 4159.72 , 5969.5 , 2914.5 , 5082.3 , - 4191.81 , 6009 , 2910.1 , 5142.9 , - 4208.14 , 6095.3 , 2932.5 , 5187.4 , - 4187.13 , 6103.2 , 2959.4 , 5177.1 , - 4116.7 , 6056.6 , 2932.2 , 5130.7 , - 4016.7 , 6021.8 , 2828.5 , 5035.9 , - 4061.91 , 6018.7 , 2830.3 , 5045.2 , - 4029.08 , 5986.6 , 2838.3 , 5121.8 , - 4150.31 , 6092.7 , 2912.2 , 5203.4 , - 4154.57 , 6122.1 , 2893.3 , 5190.8 , - 4162.92 , 6115.1 , 2894.5 , 5168.3 , - 4055.35 , 5989.9 , 2822.9 , 5020.2 , - 4125.54 , 6049.3 , 2869.7 , 5018.2 , - 4132.79 , 6044.7 , 2858.1 , 5049.8 , - 4132.79 , 6046.7 , 2874.1 , 5013.9 , - 4132.79 , 6046.7 , 2874.1 , 5013.9 , - 4132.79 , 6046.7 , 2875.1 , 5013.9 , - 4266.02 , 6190.4 , 2939.5 , 5112.4 , - 4224.3 , 6267.6 , 2975.5 , 5132.3 , - 4224.3 , 6265.5 , 2998.9 , 5135.5 , - 4224.3 , 6265.5 , 2998.9 , 5135.5 , - 4364.32 , 6265.5 , 3038.7 , 5193.5 , - 4416.95 , 6397 , 3072.8 , 5262.5 , - 4360.05 , 6375.7 , 3037.7 , 5264.4 , - 4339.98 , 6390 , 3006.7 , 5224.1 , - 4293.64 , 6330.2 , 2954.9 , 5237.1 , - 4237.75 , 6251.8 , 2919.8 , 5138.3 , - 4134.64 , 6062.1 , 2862.5 , 5068.8 , - 4150.01 , 6169.3 , 2902.9 , 5083.9 , - 4145.41 , 6149.8 , 2919.8 , 5106.9 , - 4140.22 , 6148.5 , 2932.8 , 5165.8 , - 4216.24 , 6274 , 2976.1 , 5263.1 , - 4290.05 , 6340.4 , 2987 , 5273.6 , - 4310.83 , 6397.5 , 3008.3 , 5278.2 , - 4250.47 , 6391.4 , 2998.1 , 5272.3 , - 4238.77 , 6356.1 , 2988.6 , 5253.1 , - 4222.16 , 6391 , 2966.2 , 5181.4 , - 4266.34 , 6411 , 3000.5 , 5237.2 , - 4316.05 , 6424 , 3052 , 5326.3 , - 4385.29 , 6508.7 , 3088.3 , 5372.6 , - 4444.53 , 6530.4 , 3133.8 , 5422.4 , - 4442.53 , 6582.6 , 3172.1 , 5458.5 , - 4529.88 , 6688 , 3187.5 , 5599 , - 4529.18 , 6720.7 , 3188.4 , 5612.8 , - 4509.25 , 6708.9 , 3166.3 , 5595.8 , - 4494.72 , 6772 , 3189.6 , 5606.4 , - 4536.91 , 6857.1 , 3216.7 , 5629.7 , - 4519.56 , 6828.4 , 3220.9 , 5600.9 , - 4558.62 , 6860.8 , 3235.8 , 5613.3 , - 4552.46 , 6931.6 , 3240 , 5607.9 , - 4509.37 , 6856 , 3178.7 , 5552.5 , - 4522.42 , 6898.9 , 3187.7 , 5582.3 , - 4535.56 , 6905.3 , 3225.1 , 5619.9 , - 4627.42 , 6990.5 , 3280.5 , 5709.5 , - 4611.66 , 6966.2 , 3281.7 , 5723.4 , - 4581.08 , 6953.2 , 3250.6 , 5718.5 , - 4583.03 , 6986.7 , 3262.5 , 5718.5 , - 4610.66 , 6986.1 , 3273.5 , 5702.8 , - 4604.55 , 6945 , 3262.3 , 5651 , - 4704.58 , 7065.4 , 3348.2 , 5745.1 , - 4695.78 , 7118.6 , 3397 , 5764.8 , - 4693.86 , 7153.1 , 3421.9 , 5767.3 , - 4781.62 , 7273 , 3446.7 , 5820.6 , - 4759.62 , 7259.5 , 3414.9 , 5807.7 , - 4690.52 , 7130.5 , 3381.3 , 5733.1 , - 4676.42 , 7077.3 , 3395.8 , 5695.6 , - 4762.71 , 7197.2 , 3483.2 , 5782.9 , - 4828.89 , 7187.5 , 3525.9 , 5818.9 , - 4852.22 , 7246.5 , 3521.5 , 5828.5 , - 4862.41 , 7276.7 , 3539.4 , 5829.8 , - 4838.67 , 7267.9 , 3526.6 , 5794.8 , - 4872.24 , 7328 , 3540.2 , 5782.3 , - 4905.59 , 7261.2 , 3598.3 , 5785.1 , - 4945.91 , 7236.5 , 3661.3 , 5834.9 , - 4908.55 , 7132.4 , 3652.5 , 5903.6 , - 4949.91 , 7143.8 , 3688.7 , 5997.9 , - 5045.16 , 7300.5 , 3688.9 , 5956.3 , - 5014.13 , 7341 , 3680.1 , 5947 , - 5064.35 , 7407.4 , 3738.5 , 5983.7 , - 5114.13 , 7472.1 , 3818.7 , 5967.8 , - 5029 , 7415.9 , 3783.8 , 5905.6 , - 5066.9 , 7530.3 , 3810.2 , 5939.3 , - 5069.89 , 7536.3 , 3800.2 , 5911.9 , - 5097.25 , 7585.5 , 3875.3 , 5932.2 , - 5135.35 , 7615.5 , 3883.3 , 6017.6 , - 5179.04 , 7638.8 , 3935.9 , 6052.8 , - 5254.32 , 7725.9 , 3932 , 6064.2 , - 5345.89 , 7827.7 , 3986.8 , 6105.8 , - 5309.67 , 7744.3 , 3903.3 , 6094 , - 5267.35 , 7588.1 , 3873.9 , 6055.2 , - 5312.25 , 7624.1 , 3894.5 , 6105.5 , - 5312.25 , 7624.1 , 3894.5 , 6105.5 , - 5312.25 , 7624.1 , 3894.5 , 6105.5 , - 5367.98 , 7662.9 , 3867.7 , 6104.1 , - 5359.24 , 7616.3 , 3884.6 , 6074.1 , - 5292.97 , 7500.1 , 3845.9 , 6002 , - 5326.63 , 7453.7 , 3861.6 , 5922.2 , - 5407.93 , 7500.1 , 3885.7 , 5954.1 , - 5373.8 , 7369.1 , 3860.4 , 5955 , - 5312.28 , 7308.9 , 3835.1 , 5931.1 , - 5262.57 , 7265.5 , 3822.1 , 5898.1 , - 5144.42 , 7232.3 , 3788.7 , 5863.9 , - 5002.71 , 7053.5 , 3689.4 , 5722.4 , - 5110.88 , 7180.1 , 3777.2 , 5806.6 , - 5083.8 , 7241.8 , 3726.2 , 5833.1 , - 5241.23 , 7401.4 , 3867.9 , 5928.3 , - 5241.23 , 7401.4 , 3867.9 , 6011.3 , - 5337.75 , 7640.8 , 3979.3 , 6011.3 , - 5226.2 , 7596.2 , 3945.5 , 5986.5 , - 5264.62 , 7610.8 , 3947.5 , 5992.4 , - 5164.89 , 7536 , 3912.8 , 5938 , - 5270.61 , 7587.1 , 3912.8 , 5969.8 , - 5348.75 , 7677.5 , 4007.3 , 6028.3 , - 5307.82 , 7627.3 , 3986.1 , 5956.7 , - 5371.99 , 7582.8 , 4018.5 , 5972.9 , - 5374.11 , 7550.6 , 4012 , 5948.5 , - 5414.31 , 7519.4 , 3990.2 , 5917.8 , - 5343.66 , 7371.4 , 3945.3 , 5826.2 , - 5441 , 7483.2 , 3980.8 , 5877.8 , - 5514.51 , 7495.8 , 4047.9 , 5907.4 , - 5514.51 , 7495.8 , 4047.9 , 5935.6 , - 5530.19 , 7542.7 , 4049.8 , 5955.6 , - 5592.46 , 7657.1 , 4108.7 , 5955.6 , - 5639.89 , 7731.9 , 4115.9 , 5970.7 , - 5466.88 , 7633.5 , 4017.4 , 5870.2 , - 5507.36 , 7605 , 4014.9 , 5862.3 , - 5556.99 , 7656.1 , 4041.2 , 5870.7 , - 5556.99 , 7656.1 , 4041.2 , 5837.9 , - 5583.83 , 7657.5 , 4087 , 5842.3 , - 5640.42 , 7676.3 , 4149.4 , 5898.4 , - 5605.38 , 7592.9 , 4119 , 5860.8 , - 5724.75 , 7699.5 , 4185.1 , 5947.3 , - 5787.05 , 7743.4 , 4204.6 , 6037.8 , - 5773.77 , 7716.8 , 4201.9 , 6019.8 , - 5799.22 , 7652.6 , 4208.6 , 5987.4 , - 5799.22 , 7498.4 , 4141.6 , 5852.5 , - 5631.34 , 7417.4 , 4050.8 , 5769.8 , - 5581.24 , 7342.7 , 4005.3 , 5715.7 , - 5621.71 , 7388.7 , 4013.3 , 5729.7 , - 5742.83 , 7562.7 , 4092.9 , 5832.7 , - 5689.89 , 7488 , 4052.3 , 5812.1 , - 5644.22 , 7518.6 , 4027.3 , 5748.1 , - 5648.11 , 7511.8 , 4018.6 , 5712.4 , - 5748.34 , 7624.8 , 4065 , 5772 , - 5784.4 , 7667.9 , 4126.3 , 5804.9 , - 5886.72 , 7794.7 , 4203.8 , 5858.9 , - 5870.49 , 7816.9 , 4215.7 , 5877.4 , - 5933.73 , 7881.9 , 4248.2 , 5884.5 , - 5841.83 , 7882 , 4203.5 , 5832.5 , - 5910.51 , 8038.2 , 4260.7 , 5919.9 , - 5905.15 , 8047.3 , 4252.1 , 5960.2 , - 5961.45 , 8099 , 4304.4 , 5988.4 , - 5942.06 , 8166 , 4311.1 , 5990.3 , - 5975.88 , 8160 , 4333.1 , 6003.4 , - 6018.89 , 8227.2 , 4339.9 , 6009.6 , - 6000.84 , 8205 , 4319.2 , 5969.7 , - 6001.24 , 8192.4 , 4256.4 , 5927.9 , - 6023.31 , 8141.9 , 4256.4 , 5958.2 , - 6101.9 , 8180.5 , 4256.4 , 6100.2 , - 6106.1 , 8158.1 , 4344.3 , 6151.5 , - 6108 , 8126.5 , 4358.1 , 6116.8 , - 6162.86 , 8288.2 , 4388.5 , 6174 , - 6186.09 , 8400.8 , 4368.9 , 6179 , - 6184.1 , 8412 , 4322.1 , 6132.7 , - 6081.11 , 8340.7 , 4220.1 , 5989.6 , - 6043.82 , 8229.2 , 4235.9 , 5976.2 , - 6040.58 , 8205.7 , 4205.4 , 5892.3 , - 5854.35 , 7998.7 , 4139.5 , 5836.1 , - 5867.52 , 8093 , 4122.4 , 5835.8 , - 5828.74 , 8102.7 , 4139.2 , 5844.1 , - 5906.33 , 8205.5 , 4197.6 , 5910.7 , - 5861.19 , 8239.5 , 4177.3 , 5837 , - 5774.38 , 8139.2 , 4095 , 5809.7 , - 5718.7 , 8170.2 , 4047.9 , 5736.1 , - 5614.77 , 7943.2 , 3976.4 , 5632.5 , - 5528.12 , 7846.2 , 3968.6 , 5594.1 , - 5598.32 , 7952.9 , 4041.9 , 5680.4 , - 5460.43 , 7721.3 , 3939.5 , 5587.6 , - 5285.78 , 7447.9 , 3846 , 5432.8 , - 5386.94 , 7607.5 , 3945.7 , 5462.2 , - 5355.03 , 7552.6 , 3951.7 , 5399.5 , + index_values = [ + 1628.75 , 1678.1 , 1772.8 , 2443.6 , + 1613.63 , 1688.5 , 1750.5 , 2460.2 , + 1606.51 , 1678.6 , 1718 , 2448.2 , + 1621.04 , 1684.1 , 1708.1 , 2470.4 , + 1618.16 , 1686.6 , 1723.1 , 2484.7 , + 1610.61 , 1671.6 , 1714.3 , 2466.8 , + 1630.75 , 1682.9 , 1734.5 , 2487.9 , + 1640.17 , 1703.6 , 1757.4 , 2508.4 , + 1635.47 , 1697.5 , 1754 , 2510.5 , + 1645.89 , 1716.3 , 1754.3 , 2497.4 , + 1647.84 , 1723.8 , 1759.8 , 2532.5 , + 1638.35 , 1730.5 , 1755.5 , 2556.8 , + 1629.93 , 1727.4 , 1758.1 , 2561 , + 1621.49 , 1733.3 , 1757.5 , 2547.3 , + 1624.74 , 1734 , 1763.5 , 2541.5 , + 1627.63 , 1728.3 , 1762.8 , 2558.5 , + 1631.99 , 1737.1 , 1768.9 , 2587.9 , + 1621.18 , 1723.1 , 1778.1 , 2580.5 , + 1613.42 , 1723.6 , 1780.1 , 2579.6 , + 1604.95 , 1719 , 1767.7 , 2589.3 , + 1605.75 , 1721.2 , 1757.9 , 2595 , + 1616.67 , 1725.3 , 1756.6 , 2595.6 , + 1619.29 , 1727.2 , 1754.7 , 2588.8 , + 1620.49 , 1727.2 , 1766.8 , 2591.7 , + 1619.67 , 1731.6 , 1766.5 , 2601.7 , + 1623.07 , 1724.1 , 1762.2 , 2585.4 , + 1613.98 , 1716.9 , 1759.5 , 2573.3 , + 1631.87 , 1723.4 , 1782.4 , 2597.4 , + 1630.37 , 1723 , 1789.5 , 2600.6 , + 1633.47 , 1728.4 , 1783.5 , 2570.6 , + 1626.55 , 1722.1 , 1780.4 , 2569.4 , + 1650.43 , 1724.5 , 1808.8 , 2584.9 , + 1650.06 , 1733.6 , 1820.3 , 2608.8 , + 1654.11 , 1739 , 1820.3 , 2617.2 , + 1653.6 , 1726.2 , 1820.3 , 2621 , + 1501.82 , 1587.4 , 1687.5 , 2540.5 , + 1524.28 , 1630.6 , 1725.6 , 2554.5 , + 1603.65 , 1685.5 , 1792.9 , 2601.9 , + 1622.49 , 1701.3 , 1819.1 , 2623 , + 1636.68 , 1718 , 1833.5 , 2640.7 , + 1652.1 , 1726.2 , 1853.4 , 2640.7 , + 1645.81 , 1716.6 , 1849.7 , 2619.8 , + 1650.36 , 1725.8 , 1851.8 , 2624.2 , + 1651.55 , 1737.4 , 1857.7 , 2638.2 , + 1649.88 , 1736.6 , 1864.3 , 2645.7 , + 1653.52 , 1732.4 , 1863.5 , 2679.6 , + 1657.51 , 1731.2 , 1873.2 , 2669 , + 1649.55 , 1726.9 , 1860.8 , 2664.6 , + 1649.09 , 1727.8 , 1868.7 , 2663.3 , + 1646.41 , 1720.2 , 1860.4 , 2667.4 , + 1638.65 , 1715.4 , 1855.9 , 2653.2 , + 1625.8 , 1708.7 , 1840.5 , 2630.8 , + 1628.64 , 1713 , 1842.6 , 2626.6 , + 1632.22 , 1713.5 , 1861.2 , 2641.9 , + 1633.65 , 1718 , 1876.2 , 2625.8 , + 1631.17 , 1701.7 , 1878.3 , 2606 , + 1635.8 , 1701.7 , 1878.4 , 2594.4 , + 1621.27 , 1684.9 , 1869.4 , 2583.6 , + 1624.7 , 1687.2 , 1880.4 , 2588.7 , + 1616.13 , 1690.6 , 1885.5 , 2600.3 , + 1618.12 , 1684.3 , 1888.4 , 2579.5 , + 1627.8 , 1679.9 , 1885.2 , 2576.6 , + 1625.79 , 1672.9 , 1877.9 , 2597.8 , + 1614.8 , 1663.1 , 1876.5 , 2595.6 , + 1612.8 , 1669.3 , 1883.8 , 2599 , + 1605.47 , 1664.7 , 1880.6 , 2621.7 , + 1609.32 , 1672.3 , 1887.4 , 2645.6 , + 1607.48 , 1687.7 , 1878.3 , 2644.2 , + 1607.48 , 1686.8 , 1867.1 , 2625.6 , + 1604.89 , 1686.6 , 1851.9 , 2624.6 , + 1589.12 , 1675.8 , 1843.6 , 2596.2 , + 1582.27 , 1677.4 , 1848.1 , 2599.5 , + 1567.99 , 1673.2 , 1843.4 , 2584.1 , + 1568.16 , 1665 , 1843.6 , 2570.8 , + 1569.71 , 1671.3 , 1833.8 , 2555 , + 1571.74 , 1672.4 , 1833.4 , 2574.5 , + 1585.41 , 1676.2 , 1856.9 , 2576.7 , + 1570.01 , 1692.6 , 1863.4 , 2579 , + 1561.89 , 1696.5 , 1855.5 , 2588.7 , + 1565.18 , 1716.1 , 1864.2 , 2601.1 , + 1570.34 , 1713.3 , 1846 , 2575.7 , + 1577 , 1705.1 , 1836.8 , 2559.5 , + 1590.29 , 1711.3 , 1830.4 , 2561.1 , + 1572.72 , 1709.8 , 1831.6 , 2528.3 , + 1572.07 , 1688.6 , 1834.8 , 2514.7 , + 1579.19 , 1698.9 , 1852.1 , 2558.5 , + 1588.73 , 1700 , 1849.8 , 2553.3 , + 1586.01 , 1693 , 1861.8 , 2577.1 , + 1579.77 , 1683.9 , 1856.7 , 2566 , + 1572.58 , 1679.2 , 1856.7 , 2549.5 , + 1568.09 , 1673.9 , 1841.5 , 2527.8 , + 1578.21 , 1683.9 , 1846.9 , 2540.9 , + 1573.94 , 1688.4 , 1836.1 , 2534.2 , + 1582.06 , 1693.9 , 1838.6 , 2538 , + 1610.18 , 1720.9 , 1857.6 , 2559 , + 1605.16 , 1717.9 , 1857.6 , 2554.9 , + 1623.84 , 1733.6 , 1858.4 , 2575.5 , + 1615.26 , 1729.7 , 1846.8 , 2546.5 , + 1627.08 , 1735.6 , 1868.5 , 2561.6 , + 1626.97 , 1734.1 , 1863.2 , 2546.6 , + 1605.7 , 1699.3 , 1808.3 , 2502.9 , + 1589.7 , 1678.6 , 1765.1 , 2463.1 , + 1589.7 , 1675.5 , 1763.5 , 2472.6 , + 1603.26 , 1670.1 , 1766 , 2463.5 , + 1599.75 , 1652.2 , 1741.3 , 2446.3 , + 1590.86 , 1635 , 1743.3 , 2456.2 , + 1603.5 , 1654.9 , 1769 , 2471.5 , + 1589.86 , 1642 , 1757.9 , 2447.5 , + 1587.92 , 1638.7 , 1754.9 , 2428.6 , + 1571.06 , 1622.6 , 1739.7 , 2420.2 , + 1549.81 , 1596.1 , 1708.8 , 2414.9 , + 1549.36 , 1612.4 , 1722.2 , 2420.2 , + 1554.65 , 1625 , 1713.9 , 2423.8 , + 1557.52 , 1610.5 , 1703.2 , 2407 , + 1555.31 , 1606.6 , 1685.7 , 2388.7 , + 1559.76 , 1610.7 , 1663.4 , 2409.6 , + 1548.44 , 1603.1 , 1636.9 , 2392 , + 1543.99 , 1591.5 , 1645.6 , 2380.2 , + 1550.21 , 1605.2 , 1671.6 , 2423.3 , + 1557.03 , 1621.4 , 1688.3 , 2451.6 , + 1551.78 , 1622.5 , 1696.8 , 2440.8 , + 1562.89 , 1626.6 , 1711.7 , 2432.9 , + 1570.28 , 1627.4 , 1706.2 , 2413.6 , + 1559.26 , 1614.9 , 1684.2 , 2391.6 , + 1545.87 , 1602.3 , 1648.5 , 2358.1 , + 1542.77 , 1598.3 , 1633.6 , 2345.4 , + 1542.77 , 1627 , 1699.1 , 2384.4 , + 1542.77 , 1627 , 1699.1 , 2384.4 , + 1542.77 , 1627 , 1722.5 , 2384.4 , + 1564.27 , 1655.7 , 1720.7 , 2418.7 , + 1577.26 , 1670.1 , 1741.9 , 2420 , + 1577.26 , 1670.1 , 1765.7 , 2493.1 , + 1577.26 , 1670.1 , 1765.7 , 2493.1 , + 1598.19 , 1670.1 , 1749.9 , 2492.8 , + 1604.05 , 1704 , 1770.3 , 2504.1 , + 1604.69 , 1711.8 , 1787.6 , 2493.2 , + 1593.65 , 1700.5 , 1778.7 , 2482.9 , + 1581.68 , 1690.3 , 1785.6 , 2467.1 , + 1599.14 , 1715.4 , 1833.9 , 2497.9 , + 1613.82 , 1723.5 , 1837.4 , 2477.9 , + 1620.45 , 1719.4 , 1824.3 , 2490.1 , + 1629.51 , 1734.4 , 1843.8 , 2516.3 , + 1663.7 , 1772.8 , 1873.6 , 2537.1 , + 1664.09 , 1760.3 , 1860.2 , 2541.6 , + 1669.29 , 1747.2 , 1860.2 , 2536.7 , + 1685.14 , 1750.2 , 1865.9 , 2544.9 , + 1687.07 , 1755.3 , 1867.9 , 2543.4 , + 1680.13 , 1754.6 , 1841.3 , 2522 , + 1671.84 , 1751.2 , 1838.7 , 2525.3 , + 1669.52 , 1752.5 , 1849.9 , 2510.4 , + 1686.71 , 1769.4 , 1869.3 , 2539.9 , + 1685.51 , 1767.6 , 1890.6 , 2552 , + 1671.01 , 1750 , 1879.6 , 2546.5 , + 1683.06 , 1747.1 , 1873.9 , 2550.8 , + 1685.7 , 1753.5 , 1875.3 , 2571.2 , + 1685.66 , 1752.8 , 1857 , 2560.2 , + 1678.77 , 1752.9 , 1856.5 , 2556.8 , + 1685.85 , 1764.7 , 1865.8 , 2547.1 , + 1683.71 , 1776.8 , 1860.6 , 2534.3 , + 1686.59 , 1779.3 , 1861.6 , 2517.2 , + 1683.73 , 1785.1 , 1865.6 , 2538.4 , + 1679.14 , 1798.2 , 1864.1 , 2537.1 , + 1685.03 , 1794.1 , 1861.6 , 2523.7 , + 1680.81 , 1795.2 , 1876.5 , 2522.6 , + 1676.17 , 1780.4 , 1865.1 , 2513.9 , + 1688.46 , 1789.5 , 1882.1 , 2541 , + 1696.55 , 1794.2 , 1912.2 , 2555.9 , + 1690.24 , 1784.4 , 1915.4 , 2536.7 , + 1711.35 , 1800.1 , 1951.2 , 2543.4 , + 1711.29 , 1804 , 1962.4 , 2542.3 , + 1729.86 , 1816.2 , 1976.5 , 2559.7 , + 1716.63 , 1810.5 , 1953.5 , 2546.8 , + 1743.36 , 1821.9 , 1981.3 , 2565 , + 1745.17 , 1828.2 , 1985.1 , 2562 , + 1746.76 , 1840.6 , 1983.4 , 2562.1 , + 1749.29 , 1841.1 , 1979.7 , 2554.3 , + 1763.86 , 1846.3 , 1983.8 , 2565.4 , + 1762.27 , 1850 , 1988.1 , 2558.4 , + 1762.29 , 1839 , 1973 , 2538.3 , + 1746.77 , 1820.2 , 1966.9 , 2533.1 , + 1753.5 , 1815.2 , 1976.3 , 2550.7 , + 1753.21 , 1820.6 , 1993.9 , 2574.8 , + 1739.88 , 1807.1 , 1968 , 2522.4 , + 1723.92 , 1791.4 , 1941.8 , 2493.3 , + 1734.42 , 1806.2 , 1947.1 , 2476 , + 1723.13 , 1798.7 , 1929.2 , 2470.7 , + 1732.92 , 1818.2 , 1943.6 , 2491.2 , + 1729.89 , 1820.5 , 1928.2 , 2464.7 , + 1725.74 , 1833.3 , 1922 , 2467.6 , + 1730.9 , 1837.1 , 1919.1 , 2456.6 , + 1714.17 , 1818.2 , 1884.6 , 2441 , + 1716.2 , 1824.1 , 1896.3 , 2458.7 , + 1719.06 , 1830.1 , 1928.3 , 2464.9 , + 1718.21 , 1835.6 , 1934.8 , 2472.2 , + 1698.84 , 1828.7 , 1923.5 , 2447.9 , + 1714.76 , 1839.2 , 1943.8 , 2452.9 , + 1718.35 , 1837.2 , 1942.4 , 2440.1 , + 1706.69 , 1826.7 , 1928.1 , 2408.6 , + 1723.37 , 1838 , 1942 , 2405.4 , + 1716.18 , 1829.1 , 1942.7 , 2382.7 , + 1738.78 , 1843.1 , 1974.8 , 2400.9 , + 1737.41 , 1850.5 , 1975.4 , 2404.2 , + 1714.77 , 1827.1 , 1907.5 , 2393.2 , + 1724.24 , 1829.1 , 1943.6 , 2436.4 , + 1733.77 , 1848 , 1974.1 , 2572.6 , + 1729.96 , 1840.5 , 1963.3 , 2591 , + 1734.46 , 1853.8 , 1972.3 , 2600.5 , + 1744.35 , 1874.1 , 1990.7 , 2640.2 , + 1746.88 , 1871.3 , 1978.2 , 2638.6 , + 1746.88 , 1871.3 , 1978.2 , 2638.6 , + 1746.88 , 1871.3 , 1978.2 , 2638.6 , + 1747.47 , 1860.5 , 1980.4 , 2625.8 , + 1753.1 , 1874.7 , 1983.7 , 2607.8 , + 1745.17 , 1880.1 , 1978.1 , 2609.8 , + 1745.72 , 1874.7 , 1984.9 , 2643 , + 1742.92 , 1875.6 , 1995.7 , 2658.2 , + 1731.68 , 1859.5 , 2006.6 , 2651 , + 1731.18 , 1874.2 , 2036.7 , 2664.9 , + 1728.09 , 1880.1 , 2031.1 , 2654.1 , + 1728.09 , 1880.1 , 2031.1 , 2659.8 , + 1731.29 , 1907.7 , 2041.6 , 2659.8 , + 1733.82 , 1920.5 , 2046.9 , 2662.2 , + 1745.78 , 1937.3 , 2047.2 , 2698.7 , + 1752.57 , 1936.8 , 2063.4 , 2701.9 , + 1748.13 , 1949.1 , 2063.4 , 2725.7 , + 1750.7 , 1963.7 , 2077.5 , 2737.8 , + 1747.91 , 1950.8 , 2063.6 , 2722.4 , + 1745.79 , 1953.5 , 2053.2 , 2720.5 , + 1735.34 , 1945 , 2017 , 2694.7 , + 1719.92 , 1921.1 , 2024 , 2682.6 , + 1763.59 , 1939.1 , 2051.6 , 2703.6 , + 1766.76 , 1928 , 2023.1 , 2700.6 , + 1785.4 , 1933.4 , 2030.8 , 2711.9 , + 1783.56 , 1925.7 , 2016.8 , 2702 , + 1804.42 , 1931.7 , 2045.1 , 2715 , + 1812.33 , 1928.7 , 2046.3 , 2715 , + 1799.51 , 1924.5 , 2029.6 , 2704.6 , + 1792.8 , 1914.2 , 2014.1 , 2698.6 , + 1792.8 , 1914.2 , 2014.1 , 2694.2 , + 1806.36 , 1920.6 , 2033.3 , 2707.6 , + 1798.23 , 1923.3 , 2017.4 , 2697.6 , + 1800.62 , 1930.4 , 2024.9 , 2705.9 , + 1786.19 , 1915.2 , 1992.6 , 2680.9 , + 1791.35 , 1916.9 , 1994.9 , 2681.9 , + 1789.05 , 1913.8 , 1981.6 , 2668.5 , + 1789.05 , 1913.8 , 1981.6 , 2645.8 , + 1784.71 , 1899.7 , 1962.2 , 2635.4 , + 1789.45 , 1888 , 1953.7 , 2636.1 , + 1779.74 , 1868.8 , 1928.8 , 2614.1 , + 1786.97 , 1879.9 , 1928.3 , 2603.7 , + 1773.25 , 1865.7 , 1918.1 , 2593.6 , + 1781.62 , 1881.3 , 1931.4 , 2616.3 , + 1773.75 , 1873.1 , 1908.8 , 2598.4 , + 1773.75 , 1862.5 , 1891.8 , 2562.7 , + 1776.34 , 1869.3 , 1913.9 , 2584.8 , + 1770.72 , 1846.9 , 1885.8 , 2550.3 , + 1772.39 , 1847.1 , 1895.8 , 2560.6 , + 1762.55 , 1838.3 , 1899.6 , 2532.6 , + 1764.35 , 1845.8 , 1920.3 , 2557.3 , + 1752.83 , 1835.5 , 1915.3 , 2534.1 , + 1755.98 , 1846.6 , 1907.3 , 2515.8 , + 1754.95 , 1854.8 , 1900.6 , 2521.2 , + 1759.9 , 1845.3 , 1880.9 , 2493.9 , + 1759.84 , 1854.5 , 1873.5 , 2476.1 , + 1776.5 , 1870.5 , 1883.6 , 2497.1 , + 1769.98 , 1862.6 , 1868.5 , 2469 , + 1766.98 , 1856.6 , 1879.1 , 2493.7 , + 1752.29 , 1837.6 , 1847.8 , 2472.6 , + 1760.17 , 1846.7 , 1861.8 , 2497.9 , + 1750.32 , 1856.5 , 1859.4 , 2490.8 , + 1731.44 , 1841.8 , 1859.4 , 2478.3 , + 1735.51 , 1835 , 1859.4 , 2484 , + 1733.84 , 1844.4 , 1853.3 , 2486.4 , + 1730.78 , 1838.9 , 1851.2 , 2483.4 , + 1699.46 , 1805.6 , 1801.8 , 2431.9 , + 1652.71 , 1756.6 , 1767.9 , 2403.7 , + 1654.09 , 1786.1 , 1762.7 , 2415.6 , + 1636.81 , 1757.1 , 1727.5 , 2387.9 , + 1622.81 , 1762.8 , 1734.6 , 2399.5 , + 1613.36 , 1756.8 , 1734.6 , 2377.2 , + 1617.78 , 1761.9 , 1755.4 , 2348 , + 1617.18 , 1778.5 , 1769 , 2373.4 , + 1637.62 , 1812.7 , 1801.6 , 2423.2 , + 1622.2 , 1806.1 , 1782.6 , 2411.6 , + 1608.49 , 1798.1 , 1754.7 , 2399.6 , + 1605.11 , 1794.9 , 1784.4 , 2420.2 , + 1609.61 , 1805.4 , 1787.6 , 2407.5 , + 1624.94 , 1820.3 , 1798 , 2392.8 , + 1618.07 , 1819.6 , 1793.8 , 2377.6 , + 1611.96 , 1809.6 , 1777.3 , 2350.1 , + 1578.95 , 1799.9 , 1755.2 , 2325.7 , + 1561.39 , 1800.3 , 1737.8 , 2309.6 , + 1547.87 , 1793.3 , 1730.1 , 2303.1 , + 1548.63 , 1784.8 , 1722.4 , 2318 , + 1560.16 , 1791.7 , 1753.5 , 2356.8 , + 1554.76 , 1800.2 , 1757.3 , 2376.1 , + 1531.87 , 1788.6 , 1736.7 , 2354.7 , + 1526.14 , 1775.7 , 1734.2 , 2363.5 , + 1509.03 , 1753.5 , 1724.2 , 2359.4 , + 1530.03 , 1768.2 , 1744.2 , 2365.7 , + 1484.97 , 1727.9 , 1689.7 , 2311.1 , + 1464.03 , 1709.6 , 1667.7 , 2281 , + 1475.11 , 1704.6 , 1667.8 , 2285 , + 1516.12 , 1740.6 , 1687.6 , 2311.6 , + 1519.69 , 1745.7 , 1687.5 , 2312.6 , + 1529.97 , 1751.7 , 1684.9 , 2312.6 , + 1516.44 , 1747.3 , 1674.2 , 2298.4 , + 1515.53 , 1757.8 , 1711.4 , 2313 , + 1543.89 , 1774.2 , 1780.5 , 2381.9 , + 1534.72 , 1774.4 , 1779 , 2362.2 , + 1538.66 , 1788.3 , 1779.3 , 2372.2 , + 1536.71 , 1788 , 1763.7 , 2337.7 , + 1523.83 , 1779.1 , 1756.8 , 2327.5 , + 1527.1 , 1792.8 , 1774.2 , 2340.6 , + 1530.2 , 1812 , 1802 , 2370.9 , + 1601.5 , 1872.1 , 1873.6 , 2422.1 , + 1580.29 , 1851.4 , 1836.2 , 2370 , + 1595.09 , 1873.4 , 1859.8 , 2378.3 , + 1579.47 , 1889.6 , 1852.7 , 2483.9 , + 1600.59 , 1897.5 , 1882.9 , 2567 , + 1566 , 1888.8 , 1826.1 , 2560.1 , + 1557.01 , 1900.4 , 1832.8 , 2586 , + 1542.74 , 1913.4 , 1828.9 , 2580.5 , + 1536.3 , 1909.9 , 1829.5 , 2621.2 , + 1510.66 , 1910.8 , 1843.5 , 2601 , + 1481.03 , 1879.2 , 1770.3 , 2560 , + 1483.83 , 1880.2 , 1731.9 , 2565.5 , + 1470.09 , 1878.3 , 1736.7 , 2553 , + 1484.78 , 1885.2 , 1724 , 2572.3 , + 1475.41 , 1867.6 , 1683.3 , 2549.7 , + 1402.34 , 1788 , 1611 , 2446.3 , + 1421.49 , 1820.5 , 1612.5 , 2488.4 , + 1434.61 , 1858.2 , 1654.2 , 2517.1 , + 1446.32 , 1870.3 , 1673.9 , 2538.8 , + 1437.65 , 1878.4 , 1657.3 , 2541.2 , + 1441.57 , 1881.5 , 1655.1 , 2557.2 , + 1471.64 , 1893.2 , 1685.1 , 2584.7 , + 1453.95 , 1889.3 , 1667.9 , 2574.7 , + 1453.79 , 1877.3 , 1650 , 2546.6 , + 1458.02 , 1884 , 1664.2 , 2563.9 , + 1479.59 , 1904.7 , 1679.1 , 2562.2 , + 1504.89 , 1922.7 , 1731.3 , 2617 , + 1496.54 , 1908.5 , 1722.2 , 2645.7 , + 1511 , 1911.4 , 1730.7 , 2658.1 , + 1528.86 , 1921.1 , 1766.4 , 2669.7 , + 1534.02 , 1930.8 , 1770.7 , 2661.6 , + 1536.6 , 1927.8 , 1774.5 , 2669.8 , + 1508.19 , 1908.3 , 1749.9 , 2650.4 , + 1493.54 , 1905.9 , 1730.9 , 2642.3 , + 1489.68 , 1911.1 , 1742.4 , 2658.3 , + 1482.44 , 1921.6 , 1742.4 , 2687.8 , + 1483.34 , 1933.6 , 1786.9 , 2705.6 , + 1470.57 , 1942 , 1804.1 , 2691.7 , + 1484.84 , 1951.5 , 1804.7 , 2711.1 , + 1487.71 , 1955.7 , 1793.6 , 2702.7 , + 1508.63 , 1957.4 , 1786.7 , 2695.4 , + 1515.27 , 1962.3 , 1798.5 , 2714.6 , + 1509.84 , 1946.1 , 1798.5 , 2696.8 , + 1542.28 , 1950.2 , 1821.5 , 2726.4 , + 1541.79 , 1929.7 , 1796.8 , 2697.5 , + 1542.48 , 1913.4 , 1772.7 , 2679.6 , + 1550.27 , 1889.5 , 1764.4 , 2679.2 , + 1550.27 , 1882.8 , 1759.2 , 2704 , + 1543.37 , 1895.4 , 1722.3 , 2706.2 , + 1547.84 , 1897.9 , 1724.2 , 2732.4 , + 1523.62 , 1891.5 , 1674.8 , 2722.9 , + 1526.68 , 1880.1 , 1720.6 , 2727.1 , + 1513.42 , 1887 , 1721 , 2709.6 , + 1523.02 , 1891.4 , 1739.7 , 2741.8 , + 1529.69 , 1914.6 , 1749.7 , 2760.1 , + 1545.12 , 1931.2 , 1771.4 , 2778.8 , + 1546.82 , 1929.2 , 1792.3 , 2792 , + 1528.12 , 1924.3 , 1783.3 , 2764.1 , + 1530.65 , 1927 , 1799.4 , 2771 , + 1526.25 , 1935 , 1781.7 , 2759.4 , + 1519.48 , 1955.4 , 1788.6 , 2754.5 , + 1506.65 , 1962.2 , 1765.9 , 2769.8 , + 1504.3 , 1980.7 , 1791.2 , 2750.7 , + 1480.65 , 1987.7 , 1769.5 , 2726.5 , + 1476.7 , 1993.7 , 1758.7 , 2716.2 , + 1478.07 , 2015.7 , 1738.3 , 2721.8 , + 1479.62 , 2005 , 1744.8 , 2717.9 , + 1477.55 , 2023.9 , 1736.7 , 2732.8 , + 1472.59 , 2028.5 , 1735.2 , 2740.3 , + 1495.6 , 2044.9 , 1760.1 , 2789.7 , + 1517.45 , 2045.8 , 1786.3 , 2807.7 , + 1520.93 , 2057.3 , 1824.4 , 2842 , + 1527.06 , 2061.7 , 1821.1 , 2827.4 , + 1527.06 , 2061.7 , 1854.6 , 2827.5 , + 1527.06 , 2061.7 , 1854.6 , 2827.5 , + 1547.51 , 2092.3 , 1857.5 , 2827.5 , + 1545.82 , 2090.1 , 1870.3 , 2847.8 , + 1538.43 , 2105.4 , 1858.8 , 2832.5 , + 1538.43 , 2105.4 , 1857.8 , 2846.5 , + 1538.43 , 2105.4 , 1857.8 , 2846.5 , + 1538.04 , 2117.7 , 1843.1 , 2861.5 , + 1554.03 , 2128.2 , 1850.8 , 2833.6 , + 1551.17 , 2124.7 , 1859.6 , 2826 , + 1538.37 , 2079.9 , 1844.5 , 2816.5 , + 1529.1 , 2074.9 , 1852.6 , 2799.2 , + 1522.26 , 2046.4 , 1814.6 , 2773.4 , + 1533.79 , 2079.8 , 1796.8 , 2757.9 , + 1510.18 , 2076.7 , 1782.5 , 2745.3 , + 1526.91 , 2104.5 , 1803.5 , 2759.2 , + 1555.52 , 2101.3 , 1827.1 , 2765.1 , + 1581.49 , 2084 , 1837.5 , 2763.1 , + 1572.61 , 2063.9 , 1837.7 , 2737.6 , + 1572.69 , 2062.7 , 1818.8 , 2748.7 , + 1580.64 , 2089.9 , 1812.2 , 2773.3 , + 1593.35 , 2102.9 , 1820.4 , 2781.2 , + 1571.28 , 2086 , 1779.9 , 2771.9 , + 1575.59 , 2085.9 , 1792.6 , 2835.7 , + 1561.78 , 2064.1 , 1777.4 , 2832.5 , + 1572.68 , 2072.7 , 1780.6 , 2816.9 , + 1574.04 , 2091 , 1772.2 , 2807.2 , + 1590.33 , 2120.2 , 1785.9 , 2851.6 , + 1584.14 , 2120.4 , 1787.3 , 2834.4 , + 1605.91 , 2117.6 , 1824.1 , 2873.8 , + 1615.98 , 2123.7 , 1854.4 , 2865.9 , + 1643.83 , 2132.2 , 1908.2 , 2862.9 , + 1646.85 , 2137 , 1904.7 , 2870 , + 1639.12 , 2134.8 , 1894.1 , 2831.3 , + 1642.8 , 2121.4 , 1893.3 , 2816.4 , + 1659.07 , 2127.5 , 1905.6 , 2834.3 , + 1649.64 , 2135.5 , 1912 , 2843 , + 1674.93 , 2144.8 , 1899.5 , 2845.9 , + 1651.6 , 2131 , 1878.2 , 2812.2 , + 1656.35 , 2112.9 , 1905 , 2814 , + 1670.9 , 2131.3 , 1926.5 , 2837.7 , + 1683.3 , 2117.8 , 1937.2 , 2840 , + 1679.41 , 2096.1 , 1959.2 , 2838.3 , + 1658.09 , 2051.5 , 1944.1 , 2818 , + 1652.92 , 2065.7 , 1953.4 , 2817 , + 1661.96 , 2061 , 1944.6 , 2828.7 , + 1680.02 , 2100.6 , 1983.7 , 2868 , + 1691.37 , 2120.5 , 1998.8 , 2882.6 , + 1701.46 , 2130.9 , 2001.5 , 2882.3 , + 1690.48 , 2142.4 , 1995.2 , 2918.6 , + 1685.46 , 2139.5 , 1986.8 , 2904.8 , + 1686.15 , 2134.6 , 1995.1 , 2916.6 , + 1702.27 , 2132.2 , 2004.3 , 2957.3 , + 1711.91 , 2150.1 , 2009.7 , 2949.9 , + 1714.48 , 2157 , 1992.4 , 2956.7 , + 1708.65 , 2165 , 1988.9 , 2953.4 , + 1688.74 , 2127.2 , 1965.2 , 2915.9 , + 1705.05 , 2157.2 , 1986 , 2922.4 , + 1700.28 , 2150.8 , 1975.3 , 2919.3 , + 1689.71 , 2139.1 , 1967.3 , 2889.9 , + 1696.38 , 2154.7 , 1963.5 , 2883.3 , + 1686.57 , 2182.4 , 1962.7 , 2900.1 , + 1656.59 , 2161.3 , 1939.3 , 2863.9 , + 1653.2 , 2166.3 , 1952.2 , 2861.1 , + 1666.72 , 2146.8 , 1954.6 , 2860.6 , + 1663.27 , 2135.7 , 2001.4 , 2852.8 , + 1667.26 , 2160.9 , 2025.8 , 2852.9 , + 1675.18 , 2175.7 , 2033.9 , 2846.5 , + 1686.64 , 2188.9 , 2035.9 , 2861 , + 1676.84 , 2190.3 , 2031.4 , 2878.7 , + 1670.04 , 2188.4 , 2005.9 , 2878.4 , + 1657.06 , 2190.3 , 1990.8 , 2869.9 , + 1658.36 , 2184 , 1974.7 , 2838.8 , + 1667.64 , 2196 , 1995.3 , 2832.2 , + 1654.6 , 2184.9 , 1984 , 2822.1 , + 1658.13 , 2188.3 , 1986.9 , 2821.8 , + 1658.13 , 2188.3 , 1986.9 , 2821.8 , + 1658.13 , 2188.3 , 1986.9 , 2821.8 , + 1671.54 , 2181.7 , 2018.1 , 2846.8 , + 1674.95 , 2165.7 , 2015.4 , 2842.1 , + 1674.67 , 2160.5 , 1988.6 , 2839.7 , + 1678.65 , 2162.9 , 1986.7 , 2824.4 , + 1687.14 , 2166.3 , 1968.9 , 2830 , + 1680.06 , 2170.8 , 1949.3 , 2856.1 , + 1666.49 , 2178.1 , 1931.9 , 2869.6 , + 1680.01 , 2177.3 , 1944.5 , 2881.1 , + 1656.03 , 2162.3 , 1916.6 , 2843.8 , + 1643.53 , 2140.4 , 1911.6 , 2822.3 , + 1636.59 , 2124.7 , 1927.4 , 2832.7 , + 1630.88 , 2138.2 , 1942.5 , 2797.3 , + 1618.6 , 2123.2 , 1920.6 , 2786.8 , + 1626.83 , 2129.7 , 1939 , 2813.1 , + 1632 , 2152.8 , 1937 , 2813.1 , + 1619.92 , 2160 , 1923.6 , 2812.6 , + 1628.88 , 2165.8 , 1926.3 , 2796.5 , + 1617.74 , 2165.4 , 1920.5 , 2786.3 , + 1607.7 , 2162.6 , 1878.6 , 2793.7 , + 1616.45 , 2179.1 , 1877.2 , 2829.7 , + 1613.46 , 2191.1 , 1854.5 , 2836.1 , + 1632.99 , 2191.5 , 1872.7 , 2860.8 , + 1636.02 , 2183.3 , 1879.9 , 2849.3 , + 1632.35 , 2186.3 , 1851.7 , 2847 , + 1630.37 , 2205.2 , 1835.7 , 2858.1 , + 1619.26 , 2227.2 , 1846.4 , 2847.3 , + 1606.64 , 2227 , 1836.8 , 2819.7 , + 1606.64 , 2227 , 1836.8 , 2816.8 , + 1613.98 , 2232.9 , 1836.8 , 2812.2 , + 1608.58 , 2237.4 , 1861.4 , 2825.6 , + 1623.05 , 2243.5 , 1891.1 , 2837.7 , + 1617.18 , 2247.5 , 1890.4 , 2846.9 , + 1633.18 , 2267.1 , 1904.6 , 2855.3 , + 1627.21 , 2271.6 , 1888.7 , 2840.7 , + 1627.21 , 2271.6 , 1888.7 , 2840.7 , + 1625.59 , 2253.8 , 1872.8 , 2849.2 , + 1628.53 , 2259.8 , 1875.8 , 2863 , + 1630.56 , 2269 , 1867.9 , 2852.8 , + 1638.47 , 2284.2 , 1859.7 , 2829.9 , + 1660.88 , 2309.7 , 1887.9 , 2844.8 , + 1662.28 , 2294.5 , 1893.7 , 2844.4 , + 1679.69 , 2312.5 , 1915.2 , 2866.9 , + 1679.69 , 2309.2 , 1911.2 , 2860 , + 1685.85 , 2308.6 , 1920.4 , 2861.8 , + 1686.44 , 2293.8 , 1916.8 , 2885.5 , + 1684.57 , 2274 , 1897.9 , 2870 , + 1689.93 , 2294.6 , 1918.8 , 2883 , + 1681.47 , 2323.4 , 1900.3 , 2875.7 , + 1687.14 , 2318 , 1910.3 , 2879.4 , + 1697.26 , 2329.5 , 1929.2 , 2903.4 , + 1698.33 , 2335 , 1935.3 , 2907.6 , + 1690.96 , 2323.9 , 1942.4 , 2900.7 , + 1692.16 , 2335.8 , 1963.3 , 2894.7 , + 1699.52 , 2347.3 , 1960.8 , 2887.5 , + 1712.33 , 2369.8 , 1991 , 2897 , + 1703.05 , 2371.9 , 1977.5 , 2886 , + 1700.93 , 2376.2 , 1971.9 , 2900 , + 1698.36 , 2375.5 , 1960.2 , 2888.8 , + 1697.39 , 2368.8 , 1941.2 , 2857.7 , + 1694.83 , 2364.4 , 1925.4 , 2838.5 , + 1705.66 , 2390.9 , 1935.1 , 2848.1 , + 1739.48 , 2372 , 1943.7 , 2848.3 , + 1798.63 , 2397.1 , 1980.4 , 2845.9 , + 1798.36 , 2403 , 1985.7 , 2843.2 , + 1808.74 , 2408.7 , 1992.2 , 2830.9 , + 1806.52 , 2418.1 , 1991.2 , 2837.1 , + 1815.63 , 2410.5 , 1991.2 , 2832.3 , + 1807.12 , 2399.9 , 1963.1 , 2831.7 , + 1829.36 , 2396.4 , 1974.9 , 2833 , + 1835.09 , 2381.8 , 1981.7 , 2842.9 , + 1826.45 , 2324.5 , 1968.4 , 2823.9 , + 1821.28 , 2313.7 , 1947.5 , 2814.1 , + 1828.53 , 2340.2 , 1965.7 , 2820.1 , + 1830.61 , 2350.5 , 1995 , 2827.7 , + 1859.49 , 2388.7 , 2006.2 , 2844.2 , + 1846.02 , 2398 , 1998.1 , 2879.4 , + 1832.2 , 2408.7 , 1989.5 , 2884.2 , + 1823.4 , 2401.5 , 2036 , 2917.6 , + 1823.07 , 2400.9 , 2085.9 , 2926.5 , + 1818.1 , 2400.7 , 2129 , 2941.7 , + 1857.36 , 2429.8 , 2110.6 , 2945 , + 1861.22 , 2431.5 , 2101.4 , 2941.3 , + 1870.8 , 2424.9 , 2115.3 , 2943.4 , + 1878.94 , 2423.3 , 2149.8 , 2969.8 , + 1870.24 , 2420.5 , 2138.5 , 2986.4 , + 1864.51 , 2384.5 , 2139.8 , 2971.6 , + 1894.56 , 2411.1 , 2167.4 , 3006.1 , + 1908.69 , 2449.5 , 2161.9 , 3009.1 , + 1917.69 , 2461 , 2148 , 3010.1 , + 1903.44 , 2478.7 , 2148 , 3008.3 , + 1918.75 , 2464.9 , 2136.3 , 3025 , + 1930.29 , 2488 , 2160.8 , 3073.6 , + 1937.77 , 2480.6 , 2139.2 , 3065.5 , + 1909.53 , 2474.5 , 2128.2 , 3057.6 , + 1893.48 , 2467.3 , 2111.4 , 3042 , + 1907.65 , 2472.4 , 2123.4 , 3049.3 , + 1915.59 , 2499.7 , 2159.3 , 3079.2 , + 1890.58 , 2475.2 , 2173.6 , 3079.2 , + 1909.54 , 2478.6 , 2183.9 , 3100.6 , + 1929.56 , 2481 , 2205.7 , 3100.6 , + 1931.88 , 2488.5 , 2216.5 , 3100 , + 1923.67 , 2470.4 , 2191.9 , 3085.1 , + 1928.63 , 2463.8 , 2185.1 , 3072.6 , + 1920.43 , 2438.8 , 2156.1 , 3057.3 , + 1911.15 , 2392.5 , 2158 , 3055.4 , + 1878.77 , 2403.4 , 2137.3 , 3038.6 , + 1870.32 , 2397.9 , 2129.4 , 3035.4 , + 1870.46 , 2382.1 , 2108.8 , 3031.2 , + 1868.28 , 2363.6 , 2108.4 , 3037 , + 1874.38 , 2365.6 , 2119.1 , 3024.8 , + 1869.25 , 2388.3 , 2134.1 , 3028 , + 1852.81 , 2361.8 , 2078.5 , 2989.4 , + 1862.62 , 2374.4 , 2075.6 , 3003.9 , + 1884.67 , 2385.2 , 2099.5 , 3005.5 , + 1922.69 , 2418.4 , 2107.4 , 3004.5 , + 1922.05 , 2431.8 , 2094.4 , 3001.6 , + 1899.54 , 2414.6 , 2080 , 3007.5 , + 1902.14 , 2425.8 , 2057.5 , 3001.3 , + 1890.18 , 2445.9 , 2092.6 , 3005.2 , + 1914.4 , 2482.4 , 2108.6 , 3026.3 , + 1915.61 , 2478.3 , 2120 , 3036.9 , + 1908.97 , 2485.4 , 2126.8 , 3030.1 , + 1910.23 , 2473.1 , 2114.6 , 3037.5 , + 1920.46 , 2481.6 , 2116.7 , 3039.3 , + 1934.99 , 2490.3 , 2128.7 , 3067.7 , + 1973.45 , 2521.3 , 2158.8 , 3085.2 , + 1994.09 , 2534.8 , 2164.5 , 3100.8 , + 1991.95 , 2528 , 2147.4 , 3092.4 , + 2015.71 , 2533.6 , 2156.4 , 3108.6 , + 2009.28 , 2548.5 , 2138.7 , 3102.2 , + 2004.11 , 2552.5 , 2126.9 , 3094.7 , + 1999.6 , 2571 , 2127.3 , 3080.9 , + 1995.35 , 2586.4 , 2113.9 , 3086.3 , + 2023.26 , 2612.6 , 2139.3 , 3120.8 , + 2032.25 , 2663.6 , 2145 , 3137.6 , + 2036.93 , 2660.7 , 2147.3 , 3129.6 , + 2029.87 , 2668.4 , 2149.7 , 3156.3 , + 2048.05 , 2690.1 , 2199.7 , 3188.3 , + 2083.62 , 2701.4 , 2231.9 , 3199 , + 2061.18 , 2685 , 2227.7 , 3184.8 , + 2048.75 , 2700.2 , 2210.4 , 3165.3 , + 2040.97 , 2715.9 , 2192 , 3154.3 , + 2053.66 , 2720.9 , 2196 , 3163 , + 2064.98 , 2723.2 , 2182 , 3171 , + 2068.51 , 2727.1 , 2182 , 3164.4 , + 2086.4 , 2742.9 , 2169.7 , 3164.1 , + 2086.22 , 2749.9 , 2171.2 , 3162.3 , + 2057.1 , 2706.6 , 2136 , 3149 , + 2013.65 , 2654.2 , 2081 , 3085.6 , + 2007.5 , 2675.3 , 2084.8 , 3077.6 , + 2040.74 , 2727.1 , 2112.9 , 3096 , + 2020.11 , 2742.1 , 2087.3 , 3098.5 , + 2021.81 , 2720.1 , 2087.3 , 3099.7 , + 2023.06 , 2721.1 , 2096.9 , 3099.1 , + 2047.2 , 2717.4 , 2117.9 , 3093.3 , + 2070.17 , 2712.3 , 2115.9 , 3097.5 , + 2070.17 , 2711.1 , 2148 , 3120 , + 2075.99 , 2727.1 , 2149.7 , 3125.5 , + 2072.13 , 2733.9 , 2145.2 , 3108 , + 2020.36 , 2696.5 , 2082.6 , 3070.6 , + 2027.99 , 2702.1 , 2071.5 , 3069.3 , + 2036.45 , 2717.8 , 2070.6 , 3067.2 , + 2057.8 , 2726.8 , 2118.4 , 3093.1 , + 2045.25 , 2741.9 , 2120.6 , 3111.4 , + 2052.09 , 2738.2 , 2119.3 , 3135.8 , + 2052.92 , 2738.5 , 2110.1 , 3166.9 , + 2089.77 , 2774.3 , 2154 , 3233.2 , + 2099.76 , 2787.2 , 2160.5 , 3223.9 , + 2128.3 , 2819 , 2188.4 , 3234.2 , + 2118.01 , 2836.4 , 2186.7 , 3237.3 , + 2127.39 , 2834.8 , 2176.1 , 3237.3 , + 2165.95 , 2843.8 , 2205.3 , 3277.4 , + 2166.58 , 2858.4 , 2211.4 , 3271.6 , + 2165.5 , 2861.2 , 2198.1 , 3261.3 , + 2163.83 , 2876.9 , 2196.3 , 3254.6 , + 2128.07 , 2867.8 , 2156.5 , 3248.4 , + 2129.52 , 2850.6 , 2162.6 , 3278.8 , + 2144.03 , 2867.7 , 2160.3 , 3311.2 , + 2154.76 , 2889.5 , 2196.4 , 3337.1 , + 2188.18 , 2909 , 2223.5 , 3364.9 , + 2183.78 , 2918 , 2215.9 , 3342.4 , + 2209.17 , 2942.4 , 2225.8 , 3355.7 , + 2227.63 , 2967.4 , 2243 , 3396.5 , + 2227.63 , 2967.4 , 2251.5 , 3412.3 , + 2266.7 , 2972.6 , 2276.6 , 3412.3 , + 2236.91 , 2930.9 , 2264.6 , 3412.3 , + 2229.62 , 2934.2 , 2281.9 , 3462 , + 2255.29 , 2957.6 , 2281.2 , 3428.8 , + 2255.29 , 2957.6 , 2268.2 , 3418.4 , + 2274.62 , 2996.2 , 2290.6 , 3418.4 , + 2249.85 , 2999.2 , 2274.3 , 3408.5 , + 2233.61 , 3009.4 , 2249.6 , 3379.2 , + 2220.63 , 3021.9 , 2275.1 , 3403 , + 2224.95 , 3042.9 , 2307.6 , 3446 , + 2225 , 3015.9 , 2317.3 , 3440.6 , + 2228.1 , 3026.6 , 2331.3 , 3413.8 , + 2182.06 , 2999 , 2281.9 , 3372 , + 2142.37 , 2949.9 , 2252.2 , 3360 , + 2151.05 , 2990.6 , 2262.3 , 3400.6 , + 2115.56 , 3011.1 , 2234.8 , 3407.8 , + 2130.35 , 3037.5 , 2247.4 , 3437 , + 2132.52 , 3049.4 , 2274.7 , 3475.1 , + 2098.36 , 3045.9 , 2257.8 , 3470 , + 2073.94 , 3039.3 , 2244 , 3484.2 , + 2107.29 , 3041.3 , 2274.5 , 3481.4 , + 2090.78 , 3066.5 , 2278.3 , 3444 , + 2128.66 , 3091.3 , 2282.4 , 3436.1 , + 2123.31 , 3095.2 , 2281 , 3427.3 , + 2156.61 , 3140.7 , 2313.2 , 3447.4 , + 2192.6 , 3178.4 , 2334.4 , 3491.8 , + 2181.88 , 3148.7 , 2331.3 , 3481.5 , + 2184.05 , 3169.1 , 2355.9 , 3520.3 , + 2137.08 , 3151.9 , 2322 , 3491.5 , + 2143.9 , 3166.6 , 2329.2 , 3475.4 , + 2095.11 , 3089.8 , 2287.1 , 3419.1 , + 2099.57 , 3097.2 , 2299.9 , 3440.2 , + 2116.43 , 3054.2 , 2302.1 , 3429.1 , + 2119.69 , 3012.2 , 2296.8 , 3407 , + 2108.77 , 3012.2 , 2275.1 , 3378.9 , + 2101.93 , 2947.1 , 2281.6 , 3363.5 , + 2130.71 , 2947.1 , 2258 , 3393.2 , + 2135.25 , 2947.1 , 2258 , 3417.7 , + 2162.29 , 3033.4 , 2281.2 , 3425.3 , + 2133.85 , 3025.9 , 2251.8 , 3382.6 , + 2108.06 , 2997.6 , 2215.2 , 3350.3 , + 2113.64 , 2982.8 , 2226.7 , 3333.7 , + 2140.25 , 3027.5 , 2252 , 3341.9 , + 2082.9 , 2958.4 , 2208.3 , 3267.5 , + 2075.33 , 2929.3 , 2199 , 3281.2 , + 2103.24 , 2888.2 , 2238.1 , 3328.1 , + 2057.2 , 2847.4 , 2183.1 , 3270.6 , + 2018.69 , 2768.5 , 2144.7 , 3248.1 , + 2044.45 , 2803.4 , 2144.7 , 3246.5 , + 2076.76 , 2865.2 , 2178.7 , 3278 , + 2132.12 , 2918.7 , 2219.9 , 3305.9 , + 2125.47 , 2902.4 , 2216.4 , 3264.4 , + 2118.01 , 2858.5 , 2199.7 , 3246.7 , + 2124.51 , 2861.2 , 2184.6 , 3233.9 , + 2101.89 , 2831.6 , 2175 , 3191.9 , + 2169.4 , 2870.5 , 2215 , 3233.4 , + 2178.91 , 2906.9 , 2258.5 , 3267.4 , + 2168.11 , 2887.1 , 2242.7 , 3242.9 , + 2160.45 , 2887.7 , 2247.8 , 3255.7 , + 2140.39 , 2843.5 , 2221.3 , 3218.1 , + 2130.55 , 2804.3 , 2202.7 , 3198 , + 2141.7 , 2824.7 , 2200.7 , 3201.5 , + 2162.96 , 2857 , 2200.2 , 3155.3 , + 2144.36 , 2850.8 , 2152.6 , 3121.7 , + 2144 , 2831.8 , 2136.6 , 3129 , + 2167.72 , 2862.4 , 2144.5 , 3129.5 , + 2162.82 , 2827.4 , 2123.4 , 3123.4 , + 2151.84 , 2814.5 , 2083.9 , 3092.4 , + 2142.88 , 2794.8 , 2081.9 , 3086.4 , + 2142.88 , 2794.8 , 2081.9 , 3086.4 , + 2142.88 , 2794.8 , 2081.9 , 3086.4 , + 2177.09 , 2807.3 , 2100.3 , 3116.2 , + 2184.89 , 2830.2 , 2128.2 , 3131.5 , + 2202.57 , 2860.9 , 2119.6 , 3129 , + 2203.18 , 2873.4 , 2114.8 , 3120.8 , + 2224.85 , 2884 , 2145.3 , 3149.4 , + 2211.19 , 2887.8 , 2148.6 , 3159.1 , + 2215.19 , 2877.7 , 2152.4 , 3145.8 , + 2198.24 , 2843.7 , 2139.1 , 3131.7 , + 2211.92 , 2872.9 , 2159.6 , 3168.3 , + 2218.37 , 2869.1 , 2160.1 , 3138.2 , + 2193.89 , 2837.1 , 2136 , 3128 , + 2194.09 , 2818.7 , 2102.7 , 3098.3 , + 2194.41 , 2781.6 , 2092 , 3101.2 , + 2218.13 , 2787.9 , 2135.2 , 3133.7 , + 2208.68 , 2763.5 , 2116.3 , 3106.1 , + 2241.36 , 2776.2 , 2130.9 , 3125.3 , + 2256.98 , 2791.3 , 2147.3 , 3150 , + 2237.82 , 2768.9 , 2150.3 , 3129.9 , + 2252.51 , 2736.3 , 2166 , 3125.3 , + 2266.72 , 2765.2 , 2186.2 , 3125.3 , + 2261.71 , 2755.9 , 2179 , 3100 , + 2241.85 , 2705.6 , 2141.6 , 3070.5 , + 2249.78 , 2682.2 , 2162.6 , 3106 , + 2233.55 , 2641.4 , 2158.2 , 3106 , + 2218.77 , 2569.5 , 2139.4 , 3097.8 , + 2241.34 , 2629 , 2165 , 3136.3 , + 2248.02 , 2633 , 2176.7 , 3130.5 , + 2248.02 , 2633 , 2176.7 , 3137.8 , + 2257.33 , 2678.7 , 2187 , 3119.2 , + 2272.96 , 2709 , 2187.8 , 3115.6 , + 2268.11 , 2727.1 , 2195.2 , 3123.5 , + 2254.21 , 2740.6 , 2184 , 3116.5 , + 2245.79 , 2725.8 , 2165.4 , 3122.8 , + 2238.97 , 2732.7 , 2155.4 , 3127.3 , + 2238.97 , 2732.7 , 2155.4 , 3108.4 , + 2188.01 , 2692 , 2133.3 , 3089.1 , + 2137.56 , 2673.1 , 2084.4 , 3020.7 , + 2146 , 2689.2 , 2091.9 , 3019.7 , + 2112.8 , 2711.9 , 2050.7 , 2966.4 , + 2129.76 , 2742.9 , 2052.5 , 2966.4 , + 2137.34 , 2722.9 , 2029.9 , 2970.5 , + 2113.62 , 2731.5 , 1979.7 , 2931.9 , + 2120.23 , 2725.9 , 2007.4 , 2980.8 , + 2158.88 , 2728.4 , 2041.7 , 2997.8 , + 2163.59 , 2781.4 , 2037.2 , 3009.4 , + 2131.8 , 2778.1 , 2023.7 , 3004.8 , + 2143.93 , 2801.1 , 2046.8 , 3038.2 , + 2131.14 , 2777.2 , 2028.4 , 3028.9 , + 2143.58 , 2763.8 , 2020.7 , 3055.9 , + 2084.42 , 2744.2 , 1977.7 , 3016.3 , + 2088.44 , 2740 , 1992 , 3039.6 , + 2073.21 , 2701.8 , 1966.4 , 3045.8 , + 2047.29 , 2666.6 , 1942.8 , 3030.1 , + 2031.8 , 2627.6 , 1936 , 3022.9 , + 1986.42 , 2545 , 1903 , 2971.1 , + 1957.08 , 2544.2 , 1890.8 , 2940.2 , + 2004.93 , 2595.7 , 1917 , 2960.4 , + 2032.52 , 2626.7 , 1939 , 2942.4 , + 2005.07 , 2577.2 , 1907 , 2876.6 , + 2000.48 , 2561.4 , 1911.6 , 2899.9 , + 2022.25 , 2604.4 , 1925.8 , 2909 , + 2042.45 , 2631.2 , 1936.3 , 2946.3 , + 2020.85 , 2608.8 , 1892 , 2919.2 , + 2040.69 , 2588.9 , 1872.9 , 2936.4 , + 2061.7 , 2636.4 , 1866.2 , 2970.4 , + 2034.64 , 2609.7 , 1878.7 , 2965 , + 2031.33 , 2598.9 , 1889 , 2946.7 , + 2049.1 , 2590.5 , 1920.8 , 2964.4 , + 2047.83 , 2560.3 , 1920.8 , 2962.4 , + 2069.46 , 2562.5 , 1949.8 , 2983.8 , + 2048.57 , 2508 , 1942.1 , 2963.9 , + 2051.25 , 2474.5 , 1974.6 , 3005.3 , + 2070.71 , 2528.3 , 1974.6 , 3050.4 , + 2103.54 , 2514.9 , 1974.6 , 3074.8 , + 2116.96 , 2494.7 , 2025.1 , 3082 , + 2129.86 , 2521.6 , 2052.3 , 3091.3 , + 2120.97 , 2562.3 , 2043.7 , 3077.2 , + 2126.75 , 2579.4 , 2053.8 , 3095.1 , + 2148.23 , 2599.2 , 2041.4 , 3114.7 , + 2144.21 , 2601.2 , 2059.8 , 3106.1 , + 2163.32 , 2604.4 , 2076.8 , 3117.2 , + 2135.93 , 2544.9 , 2055.7 , 3082.3 , + 2134.12 , 2559.3 , 2053.4 , 3095.9 , + 2152.19 , 2579.5 , 2075 , 3082.6 , + 2161.5 , 2579.5 , 2069.6 , 3097.4 , + 2193.63 , 2629.7 , 2117.2 , 3157.5 , + 2190.83 , 2620.7 , 2115 , 3160.4 , + 2176.66 , 2615.3 , 2096.5 , 3150.5 , + 2188.81 , 2600.8 , 2107.1 , 3167.5 , + 2182.32 , 2617.5 , 2106.3 , 3171.9 , + 2160.56 , 2585.5 , 2074.5 , 3168.6 , + 2166.51 , 2591.4 , 2064.2 , 3167 , + 2156.31 , 2588.8 , 2038.9 , 3138.2 , + 2133.74 , 2580.5 , 2007 , 3142.3 , + 2134.34 , 2570.6 , 2007 , 3142.2 , + 2152.65 , 2588.7 , 2012.4 , 3147.3 , + 2166.56 , 2599.3 , 2035 , 3190.3 , + 2151.44 , 2582.7 , 2010.5 , 3182.6 , + 2143.84 , 2557 , 2001.3 , 3191.4 , + 2113.37 , 2532.4 , 1972.6 , 3171.3 , + 2121.25 , 2530.9 , 2000.6 , 3175.1 , + 2132.98 , 2541.1 , 2006.3 , 3205.2 , + 2153.48 , 2551.1 , 2026.5 , 3234.2 , + 2190.58 , 2581.3 , 2062.7 , 3265.1 , + 2215.72 , 2635.2 , 2075.3 , 3265.1 , + 2205.82 , 2635.7 , 2060.4 , 3249.6 , + 2207.09 , 2645.6 , 2069.1 , 3251.3 , + 2185.78 , 2628.4 , 2034.9 , 3216.5 , + 2197.38 , 2672 , 2020.4 , 3222.7 , + 2173.6 , 2674.5 , 1998.2 , 3241.5 , + 2158.07 , 2652.4 , 1961.5 , 3205.4 , + 2167.68 , 2662.5 , 1964.2 , 3203.9 , + 2178.1 , 2664.1 , 1983.4 , 3180 , + 2155.58 , 2642.1 , 1948.8 , 3139.3 , + 2155.81 , 2643 , 1966.8 , 3128.8 , + 2157.15 , 2658.8 , 1969.4 , 3121.4 , + 2118.17 , 2637.7 , 1952.9 , 3079.8 , + 2129.36 , 2628.6 , 1977.3 , 3112.7 , + 2097.45 , 2603.3 , 1924.6 , 3065.1 , + 2100.55 , 2614.7 , 1922.9 , 3079.1 , + 2059.15 , 2593 , 1919.3 , 3037.3 , + 2067.17 , 2594 , 1897.2 , 3014.8 , + 2072.81 , 2602.9 , 1899.4 , 3021.2 , + 2097.33 , 2609.1 , 1927.4 , 3028.2 , + 2057.83 , 2586.1 , 1902.7 , 2999.8 , + 2056.89 , 2581 , 1901.3 , 3008.5 , + 2070.36 , 2590 , 1905 , 3038.7 , + 2016.08 , 2558 , 1876.2 , 2992.5 , + 2002.3 , 2534.4 , 1879.3 , 3026.3 , + 2002.3 , 2499.5 , 1852.8 , 2983.5 , + 1988.67 , 2522.5 , 1876.1 , 3001.8 , + 1946.49 , 2480.4 , 1833.7 , 2956.3 , + 1965.41 , 2484.8 , 1843.4 , 2984.4 , + 1977.67 , 2496.9 , 1856.4 , 2998.7 , + 2048.56 , 2553.4 , 1898.3 , 3032.3 , + 2087.71 , 2570.2 , 1919 , 3073 , + 2072.68 , 2562.7 , 1918.1 , 3100.5 , + 2108.08 , 2593.3 , 1955.6 , 3141.9 , + 2118.52 , 2585.3 , 1933 , 3106.7 , + 2095.58 , 2575.6 , 1906.4 , 3120.2 , + 2069.58 , 2542.5 , 1898.6 , 3085.3 , + 2055.94 , 2529.8 , 1876.3 , 3060.8 , + 2048.15 , 2530.9 , 1867.4 , 3063.2 , + 2016.6 , 2508.6 , 1842.1 , 3032.8 , + 2022.64 , 2525.2 , 1841.6 , 3029.1 , + 1995.85 , 2494.7 , 1824.4 , 3000.9 , + 2009.45 , 2477.2 , 1831.5 , 2999.9 , + 2026.37 , 2458.6 , 1858.1 , 3029.6 , + 2064.86 , 2490.5 , 1905.7 , 3083.8 , + 2061.58 , 2506.5 , 1905.7 , 3097.4 , + 2066.18 , 2503.9 , 1905.7 , 3096.3 , + 2039.91 , 2500 , 1873.6 , 3081.3 , + 2061.37 , 2534.8 , 1911.1 , 3104.4 , + 2069.39 , 2541 , 1931.7 , 3097.6 , + 2043.3 , 2557.9 , 1906.1 , 3065.8 , + 2056.36 , 2543.9 , 1921.5 , 3063.8 , + 2090.78 , 2590.4 , 1943.9 , 3099.6 , + 2098.04 , 2602.7 , 1948.4 , 3103.5 , + 2073.67 , 2597.8 , 1948.4 , 3075.9 , + 2091.04 , 2590.9 , 1941.1 , 3095.3 , + 2112.21 , 2591.9 , 1954.5 , 3135.4 , + 2112.21 , 2609.4 , 1950.2 , 3146.5 , + 2091.94 , 2600.9 , 1927.5 , 3127.5 , + 2089.48 , 2606.5 , 1926.5 , 3131 , + 2097.2 , 2607 , 1927.8 , 3121 , + 2073.29 , 2571.8 , 1911.4 , 3078.7 , + 2040.05 , 2546.1 , 1893.1 , 3027.5 , + 2058.79 , 2568.6 , 1934.7 , 3036.6 , + 2056.27 , 2572.5 , 1945.9 , 3033.5 , + 2050.82 , 2579.4 , 1952.4 , 3047.1 , + 2036.24 , 2584.7 , 1940 , 3061.1 , + 2057.08 , 2594.9 , 1975.9 , 3081.4 , + 2045.54 , 2576 , 1964 , 3039.6 , + 2042.38 , 2577.5 , 1982.7 , 3017.3 , + 2067.26 , 2611 , 1973.7 , 3033.5 , + 2046.99 , 2589.1 , 1969 , 3016.1 , + 2044.04 , 2584.3 , 1969.8 , 3012.5 , + 2041.85 , 2589.3 , 1954.1 , 3013.8 , + 2024.19 , 2576 , 1937 , 2977.3 , + 2003.64 , 2562.8 , 1919.3 , 2943.4 , + 2019.13 , 2566 , 1917.1 , 2946.4 , + 2040.94 , 2581.4 , 1930.2 , 2980.6 , + 2054.23 , 2598 , 1931.1 , 2973.4 , + 2069.9 , 2604.7 , 1924.2 , 3013.6 , + 2066.59 , 2600.7 , 1928.1 , 3034.4 , + 2080.16 , 2614.7 , 1924.7 , 3058.1 , + 2095.5 , 2636.1 , 1940.9 , 3070.4 , + 2102.25 , 2649.8 , 1952.1 , 3091.7 , + 2100.98 , 2651 , 1949.9 , 3083.4 , + 2100.98 , 2651 , 1966.6 , 3083.4 , + 2110.77 , 2673.5 , 1956 , 3083.4 , + 2097.34 , 2656.2 , 1927.8 , 3095.8 , + 2074.68 , 2628.8 , 1894.2 , 3065.6 , + 2097.51 , 2628.8 , 1881.2 , 3065.5 , + 2079.19 , 2628.8 , 1881.2 , 3065.5 , + 2068.92 , 2612.3 , 1885.9 , 3065.7 , + 2072.9 , 2632.4 , 1901.8 , 3051.6 , + 2051.46 , 2613.1 , 1871.5 , 3032.3 , + 2058.2 , 2622.3 , 1886.4 , 3065 , + 2053.41 , 2617.3 , 1864.2 , 3055.8 , + 2062.08 , 2600.4 , 1859.2 , 3060.4 , + 2061.76 , 2597 , 1849.1 , 3049.4 , + 2059.68 , 2600.5 , 1844.1 , 3033.2 , + 2064.14 , 2600.2 , 1854 , 3048.3 , + 2088.25 , 2591.6 , 1872.8 , 3076.7 , + 2081.39 , 2582.8 , 1856.9 , 3054 , + 2085.62 , 2593.6 , 1860.3 , 3054.9 , + 2079.6 , 2595.5 , 1837.1 , 3028.6 , + 2050.86 , 2574.6 , 1813.3 , 2995.9 , + 2013.03 , 2525.3 , 1772.8 , 2954.2 , + 2027.67 , 2534.8 , 1780.2 , 2969 , + 2026.97 , 2525.5 , 1802.5 , 2982.2 , + 2040.79 , 2554.7 , 1826.3 , 3007.3 , + 2030.56 , 2552.4 , 1814.1 , 3022.2 , + 2026.68 , 2540.2 , 1813.4 , 2995.9 , + 2024.82 , 2536.9 , 1797.9 , 2991.6 , + 2047.44 , 2560.8 , 1827.8 , 3017.3 , + 2038.46 , 2563.7 , 1816.1 , 3034.7 , + 2077.94 , 2589.4 , 1842.4 , 3059.7 , + 2085.08 , 2621.4 , 1872.1 , 3062 , + 2093.01 , 2628 , 1870.4 , 3072.7 , + 2087.78 , 2617.4 , 1850.9 , 3072.5 , + 2117.8 , 2636.9 , 1874.4 , 3099 , + 2127.56 , 2635.4 , 1869.4 , 3109.9 , + 2118.96 , 2636 , 1850.1 , 3081.1 , + 2128.33 , 2642.4 , 1856.1 , 3071.3 , + 2135.49 , 2636 , 1861.9 , 3074.9 , + 2112.06 , 2621 , 1835 , 3051.1 , + 2119.29 , 2601 , 1822.5 , 3044.2 , + 2101.98 , 2597.2 , 1802.2 , 3018.6 , + 2101.82 , 2609.6 , 1805.6 , 3023.4 , + 2096.26 , 2610 , 1804.4 , 3019.5 , + 2126.44 , 2632.1 , 1827 , 3049.3 , + 2117.59 , 2623.3 , 1805.7 , 3037.7 , + 2106.05 , 2607.5 , 1802.2 , 3025.3 , + 2097.85 , 2600.4 , 1776.9 , 3009.3 , + 2127.21 , 2619.2 , 1808.4 , 3041.2 , + 2116.64 , 2617.2 , 1807.4 , 3038.2 , + 2094.16 , 2586.5 , 1795.2 , 3025.1 , + 2069.95 , 2553.2 , 1773.3 , 3001.9 , + 2041.26 , 2543.1 , 1748.6 , 2977 , + 2029.38 , 2515.8 , 1756.8 , 2992.1 , + 1989.2 , 2461.5 , 1727.1 , 2986.9 , + 2008.85 , 2467.7 , 1743.1 , 3021.1 , + 1974.14 , 2450.3 , 1721.8 , 3011.8 , + 2022.5 , 2463.3 , 1769 , 3050.6 , + 1995.22 , 2475 , 1738.6 , 3047 , + 2016.15 , 2491.7 , 1785.8 , 3094.1 , + 1979.52 , 2497.5 , 1788.8 , 3089.3 , + 1984.99 , 2516 , 1811.6 , 3124.2 , + 1984.15 , 2505.5 , 1813.8 , 3135 , + 1978.07 , 2501.9 , 1818 , 3139.7 , + 1935.08 , 2480.7 , 1795.7 , 3136.4 , + 1935.87 , 2526.6 , 1817.3 , 3153.4 , + 1928.82 , 2518.1 , 1836.1 , 3149.8 , + 1911.7 , 2495.6 , 1837.2 , 3128.3 , + 1918.85 , 2495 , 1852.4 , 3142.3 , + 1949.76 , 2533.1 , 1893 , 3176.2 , + 1914.69 , 2508.9 , 1859.5 , 3137.9 , + 1934.96 , 2511.1 , 1864 , 3143.1 , + 1965.68 , 2536.2 , 1882.8 , 3188.1 , + 1972.59 , 2536.3 , 1872.9 , 3190.2 , + 1976.52 , 2556.1 , 1890.2 , 3200.9 , + 1978.71 , 2559.3 , 1900.4 , 3210.9 , + 1980.81 , 2561.2 , 1880.9 , 3204.2 , + 1979.26 , 2563.1 , 1869.3 , 3190.9 , + 1991.08 , 2562.4 , 1871.9 , 3209.8 , + 1982.99 , 2560.3 , 1881.1 , 3208.8 , + 1982.99 , 2560.3 , 1881.1 , 3208.8 , + 1982.99 , 2560.3 , 1881.1 , 3208.8 , + 1954.62 , 2547.1 , 1855.7 , 3194.5 , + 1943.88 , 2516.8 , 1874.9 , 3170.1 , + 1955.33 , 2544.2 , 1882 , 3174.7 , + 1987.7 , 2560.8 , 1928.4 , 3199.9 , + 1978.97 , 2554.8 , 1918.5 , 3209.3 , + 2007.57 , 2561.1 , 1945.9 , 3214.9 , + 2028.52 , 2574.4 , 1942.3 , 3226.2 , + 2024.25 , 2567 , 1931 , 3217.6 , + 2017.95 , 2597.2 , 1918.5 , 3216.7 , + 2017.95 , 2597.2 , 1918.5 , 3220.4 , + 2036.47 , 2621.4 , 1936.9 , 3248.2 , + 2037.99 , 2618.6 , 1971.1 , 3262.6 , + 2034.15 , 2641.7 , 1946.2 , 3264.3 , + 2021.22 , 2650.5 , 1927.4 , 3251.7 , + 2030.65 , 2658.8 , 1927.4 , 3251.7 , + 2050.66 , 2655.6 , 1988.7 , 3261.2 , + 2064.41 , 2661.4 , 1996.7 , 3290.1 , + 2086.41 , 2701 , 2003.6 , 3317.9 , + 2102.4 , 2728.2 , 2017.3 , 3310.3 , + 2092 , 2739 , 1991.5 , 3310.7 , + 2109.36 , 2746.6 , 2001.3 , 3300.8 , + 2088.99 , 2739.8 , 2004.7 , 3297.4 , + 2083.8 , 2727.7 , 1989.8 , 3285.8 , + 2064.42 , 2701 , 1965.5 , 3261 , + 2096.87 , 2751.2 , 1979.5 , 3284.5 , + 2083.55 , 2750.4 , 1965.3 , 3291.8 , + 2105.88 , 2778.5 , 1960.7 , 3327.3 , + 2105.88 , 2778.5 , 1960.7 , 3328.2 , + 2065.71 , 2751.7 , 1919.1 , 3311.1 , + 2069.26 , 2762.5 , 1927.8 , 3311.1 , + 2081.46 , 2779.4 , 1927.3 , 3309.9 , + 2099.95 , 2786.4 , 1948 , 3319.4 , + 2119.24 , 2807.8 , 1960.8 , 3340.6 , + 2132.72 , 2805.3 , 1971.3 , 3345 , + 2132.72 , 2805.3 , 1971.3 , 3376.6 , + 2154.17 , 2809.7 , 1965.9 , 3380 , + 2136.72 , 2819.6 , 1974.7 , 3370.8 , + 2137.21 , 2806.8 , 1951.2 , 3380.8 , + 2107.16 , 2795.3 , 1897 , 3337.7 , + 2127.79 , 2802.3 , 1907.8 , 3344.6 , + 2124.25 , 2800.9 , 1922.8 , 3348 , + 2124.84 , 2798.1 , 1893.7 , 3339.8 , + 2130.78 , 2800.2 , 1920.7 , 3370.4 , + 2125.06 , 2775.4 , 1905 , 3366.1 , + 2154.13 , 2803 , 1918.4 , 3381.3 , + 2140.36 , 2805.6 , 1896.1 , 3377.2 , + 2144.88 , 2816.8 , 1902.8 , 3378.3 , + 2144.88 , 2843.3 , 1925.2 , 3403.8 , + 2144.88 , 2837.7 , 1895.1 , 3379.4 , + 2137.36 , 2830.3 , 1902.4 , 3309.2 , + 2128.99 , 2845.1 , 1877.7 , 3313.2 , + 2091.3 , 2836.8 , 1865.5 , 3282.7 , + 2094.68 , 2845.6 , 1861.9 , 3294 , + 2089.04 , 2825.3 , 1858.8 , 3314.6 , + 2099.68 , 2827.5 , 1879.7 , 3323.7 , + 2110.13 , 2847.5 , 1889.4 , 3349.2 , + 2117.63 , 2843.7 , 1907.8 , 3394.9 , + 2111.35 , 2833.7 , 1889.5 , 3388.3 , + 2163.37 , 2848.4 , 1950.8 , 3462.9 , + 2184.39 , 2842.9 , 1949.4 , 3455 , + 2194.15 , 2847.3 , 1961.3 , 3464 , + 2200.32 , 2867.9 , 1961.7 , 3450.6 , + 2193.72 , 2869.7 , 1948.3 , 3447.2 , + 2191.25 , 2863.4 , 1948.3 , 3429.2 , + 2201.36 , 2892.3 , 1951.5 , 3442.6 , + 2183.71 , 2875.1 , 1929 , 3420.7 , + 2195.31 , 2856.2 , 1931.2 , 3405.3 , + 2183.52 , 2822.2 , 1905.9 , 3400.4 , + 2196.54 , 2830.2 , 1908.9 , 3413.1 , + 2232.02 , 2836.6 , 1926.6 , 3431.6 , + 2232.23 , 2833.2 , 1941.3 , 3432.9 , + 2237.73 , 2827.1 , 1942.5 , 3454.3 , + 2239.36 , 2824.7 , 1947.9 , 3458.3 , + 2217.91 , 2833.1 , 1932.8 , 3468.9 , + 2222.51 , 2826.8 , 1920 , 3463.3 , + 2211.26 , 2826.8 , 1917.8 , 3449.9 , + 2249.6 , 2852.3 , 1960 , 3499.9 , + 2234.86 , 2814.3 , 1950.8 , 3475.6 , + 2236.68 , 2807.1 , 1957.1 , 3482.4 , + 2244.56 , 2800.6 , 1950.4 , 3483.5 , + 2236.89 , 2797.4 , 1954.7 , 3468.8 , + 2222.28 , 2781.3 , 1943.7 , 3468.3 , + 2236.72 , 2802.6 , 1949.2 , 3474.7 , + 2228.44 , 2820.1 , 1946.2 , 3467.5 , + 2208.41 , 2807.2 , 1946.2 , 3441.4 , + 2236.73 , 2838.4 , 1946.2 , 3444.4 , + 2251.64 , 2880.6 , 1970.4 , 3465.1 , + 2253.93 , 2880 , 1967.3 , 3470.6 , + 2265.86 , 2889.5 , 1971.6 , 3509.8 , + 2269.6 , 2886.7 , 1984.4 , 3535.7 , + 2258.97 , 2900.8 , 1963.3 , 3530.2 , + 2262.66 , 2896.8 , 1957.4 , 3515.9 , + 2253.91 , 2887.1 , 1939.2 , 3520 , + 2257.34 , 2893.8 , 1937.8 , 3524.9 , + 2240.31 , 2883.3 , 1890.1 , 3524.9 , + 2230.27 , 2887.3 , 1899.5 , 3502.6 , + 2251.3 , 2915.7 , 1921.4 , 3504 , + 2234.23 , 2908.8 , 1883.4 , 3477.8 , + 2242.76 , 2918.3 , 1881.7 , 3509.4 , + 2263.08 , 2952.7 , 1900.5 , 3522.7 , + 2266.57 , 2971.1 , 1902.5 , 3532.4 , + 2266.37 , 2999.6 , 1884.8 , 3557.7 , + 2263.27 , 2989.1 , 1861.7 , 3545.6 , + 2266.77 , 2989.2 , 1854.9 , 3554.5 , + 2268.26 , 2986.3 , 1869.7 , 3549.3 , + 2266.07 , 2990.5 , 1873.6 , 3535.9 , + 2300.72 , 3016.8 , 1898.2 , 3570.8 , + 2300.29 , 3011.6 , 1892.4 , 3565.4 , + 2305.58 , 3025.4 , 1880 , 3564.6 , + 2289.49 , 3008.1 , 1871.7 , 3533.3 , + 2306.66 , 3033.5 , 1882.5 , 3541.4 , + 2294.15 , 3029 , 1863.8 , 3561.5 , + 2275.72 , 3039.1 , 1853.9 , 3557.9 , + 2204.44 , 2994.7 , 1790.7 , 3514.8 , + 2212.97 , 3015.3 , 1800.6 , 3507 , + 2232.02 , 3045.5 , 1816.3 , 3523.3 , + 2190.9 , 3009.8 , 1791.8 , 3485 , + 2184.24 , 3000.6 , 1767.6 , 3479 , + 2201.27 , 3014.8 , 1788.4 , 3508.2 , + 2197.01 , 3039 , 1780.7 , 3520.2 , + 2197.01 , 3049 , 1800.7 , 3524.2 , + 2211.6 , 3036.5 , 1803.9 , 3544.1 , + 2191.54 , 3036.6 , 1800.3 , 3544.4 , + 2176.35 , 3054 , 1809.6 , 3526.5 , + 2157.41 , 3064 , 1785.7 , 3510.3 , + 2137.01 , 3050 , 1778 , 3460.1 , + 2153.56 , 3073 , 1794.4 , 3474.3 , + 2159.73 , 3083.7 , 1803.8 , 3523.8 , + 2206.11 , 3109.2 , 1817 , 3568 , + 2193.85 , 3116.3 , 1790.5 , 3557.3 , + 2185.52 , 3112.3 , 1779.7 , 3562.2 , + 2197.57 , 3135.4 , 1770.7 , 3593 , + 2176.09 , 3124.5 , 1757.3 , 3578.6 , + 2148.12 , 3120.4 , 1740.7 , 3551.4 , + 2116.86 , 3041.7 , 1721.1 , 3531.5 , + 2114.88 , 3062.3 , 1724.2 , 3535.3 , + 2140.74 , 3078.9 , 1764.1 , 3537.8 , + 2142.74 , 3080 , 1754.1 , 3519.6 , + 2112.01 , 3026.6 , 1742.4 , 3497.9 , + 2149.71 , 3057.9 , 1795.3 , 3510 , + 2165.76 , 3108.2 , 1814 , 3529.1 , + 2182.11 , 3128.5 , 1814 , 3518.7 , + 2180.49 , 3123.4 , 1828.7 , 3523 , + 2169.69 , 3137.6 , 1832.1 , 3500.4 , + 2168.57 , 3123.2 , 1822.6 , 3514.8 , + 2174.27 , 3133.8 , 1857.4 , 3522.4 , + 2184.05 , 3132.6 , 1866.3 , 3537.1 , + 2182.47 , 3150.1 , 1852.6 , 3541.6 , + 2174.78 , 3130.4 , 1839.8 , 3523.4 , + 2195.15 , 3121.4 , 1838.2 , 3536.8 , + 2197.34 , 3133 , 1838.2 , 3547.9 , + 2196.64 , 3124.8 , 1875.2 , 3571.4 , + 2199.29 , 3148.4 , 1905.1 , 3610.8 , + 2196.59 , 3152.5 , 1890.5 , 3609.2 , + 2204.01 , 3182.2 , 1881.4 , 3628.8 , + 2201.9 , 3183.9 , 1872.9 , 3604.1 , + 2194.53 , 3201 , 1875.5 , 3632.4 , + 2197.26 , 3209.2 , 1867.1 , 3602.5 , + 2210.92 , 3220.1 , 1891 , 3624 , + 2247.97 , 3251 , 1889.8 , 3649 , + 2242.91 , 3229.5 , 1870.3 , 3648.8 , + 2249.75 , 3245.9 , 1857.3 , 3655.5 , + 2254.95 , 3251.6 , 1828.3 , 3664.3 , + 2266.56 , 3261.2 , 1820.9 , 3664.3 , + 2261.08 , 3278.4 , 1774.9 , 3669.7 , + 2269.34 , 3278.5 , 1814.9 , 3664.2 , + 2274.94 , 3281.5 , 1834.8 , 3662.8 , + 2260.62 , 3245.7 , 1846.8 , 3639.5 , + 2277.7 , 3246.6 , 1856.3 , 3630 , + 2277.7 , 3261.6 , 1849.6 , 3652.1 , + 2278.64 , 3280.9 , 1848.9 , 3654.9 , + 2283.26 , 3273.4 , 1833.8 , 3662.4 , + 2286.21 , 3272.2 , 1875 , 3671.6 , + 2283.84 , 3289.8 , 1859.3 , 3642.6 , + 2240.24 , 3251.6 , 1820.5 , 3596.1 , + 2241.43 , 3217.7 , 1810.2 , 3576.9 , + 2268.07 , 3254.3 , 1831.2 , 3613.7 , + 2268.35 , 3255 , 1834.4 , 3633.3 , + 2280.81 , 3277.9 , 1873.4 , 3658.3 , + 2280.81 , 3277.9 , 1873.4 , 3658.3 , + 2280.81 , 3277.9 , 1866.7 , 3658.3 , + 2280.44 , 3317.1 , 1877 , 3676.4 , + 2273.9 , 3297.7 , 1879.1 , 3676.7 , + 2260.69 , 3297.7 , 1872 , 3689.3 , + 2260.69 , 3297.7 , 1872 , 3689.3 , + 2307.7 , 3297.7 , 1908.4 , 3687.9 , + 2326.18 , 3384.5 , 1943 , 3715.6 , + 2332.81 , 3395.8 , 1931.2 , 3714.1 , + 2315.66 , 3376.1 , 1917.7 , 3704.5 , + 2336.76 , 3368.1 , 1916.6 , 3720.6 , + 2351.47 , 3361.5 , 1916.3 , 3720.6 , + 2340.31 , 3314.8 , 1910.1 , 3671.5 , + 2330.98 , 3284.1 , 1897.9 , 3654.9 , + 2353.89 , 3292.9 , 1907.6 , 3657.3 , + 2361.38 , 3233.9 , 1924.4 , 3662.7 , + 2379.43 , 3254.8 , 1952.1 , 3710.6 , + 2375.63 , 3219.3 , 1966 , 3704.2 , + 2389.62 , 3257.8 , 1960.1 , 3748.7 , + 2400.58 , 3253.1 , 1964.3 , 3748.4 , + 2391.74 , 3249.9 , 1954.4 , 3754.2 , + 2393.12 , 3219 , 1934.1 , 3735 , + 2436.68 , 3221.3 , 1946 , 3758.2 , + 2437.02 , 3211.2 , 1950.2 , 3734.2 , + 2449.71 , 3191.4 , 1966.7 , 3734.7 , + 2437.7 , 3198.2 , 1980.7 , 3734.6 , + 2456.09 , 3236.8 , 2003.1 , 3735.3 , + 2463 , 3248.7 , 2021 , 3759.3 , + 2472.53 , 3279.9 , 2024.1 , 3752.8 , + 2459.81 , 3270 , 2022.2 , 3781.3 , + 2416.84 , 3221.7 , 1985.6 , 3746.6 , + 2437.98 , 3253.8 , 1988.5 , 3747.5 , + 2442.43 , 3262.7 , 1983.3 , 3726.1 , + 2411.49 , 3245.6 , 1956.2 , 3708.4 , + 2435.07 , 3242.7 , 1960.7 , 3716.3 , + 2428.59 , 3253.1 , 1967.7 , 3726.6 , + 2436.09 , 3260.1 , 1983.3 , 3747.6 , + 2427.77 , 3266.1 , 1956.4 , 3745 , + 2426.51 , 3272.2 , 1964.2 , 3779.8 , + 2423.6 , 3280.3 , 1952.5 , 3770.9 , + 2387.6 , 3270.6 , 1939.7 , 3744.3 , + 2373.01 , 3243.5 , 1932.4 , 3714.6 , + 2401.59 , 3253 , 1936.9 , 3725.6 , + 2421.93 , 3264.4 , 1953.3 , 3740 , + 2449.52 , 3296.2 , 1976.9 , 3740.3 , + 2438.73 , 3298.6 , 1960.9 , 3704.2 , + 2449.09 , 3309.9 , 1974.5 , 3715.9 , + 2486.95 , 3360.5 , 1996.9 , 3738.2 , + 2485.18 , 3354.8 , 1990.8 , 3727.6 , + 2488.85 , 3385.5 , 2017.2 , 3752.7 , + 2486.83 , 3400.6 , 2015.3 , 3768.6 , + 2472.52 , 3383.4 , 2001.9 , 3777.1 , + 2471.38 , 3408.3 , 2005.9 , 3758.9 , + 2479.38 , 3581.9 , 2008 , 3758.2 , + 2448.8 , 3549.7 , 1975.5 , 3710.3 , + 2419.72 , 3506.2 , 1948.9 , 3674.5 , + 2415.29 , 3540.5 , 1932.1 , 3639.5 , + 2417 , 3558.3 , 1944.3 , 3640.3 , + 2432.46 , 3578.4 , 1962.4 , 3681.8 , + 2458 , 3561.1 , 1950.1 , 3644.8 , + 2472.55 , 3583.6 , 1965 , 3669.6 , + 2484.74 , 3605.1 , 1967.2 , 3693 , + 2491.73 , 3611.1 , 1969.8 , 3685.4 , + 2505.32 , 3629.3 , 1976.9 , 3698.3 , + 2479.84 , 3647.7 , 1974.4 , 3707 , + 2514.8 , 3677 , 2003.8 , 3681.9 , + 2505.78 , 3658.1 , 2008 , 3660.9 , + 2523.81 , 3671 , 2030.5 , 3672.4 , + 2502.94 , 3640.3 , 2020 , 3672.6 , + 2489.35 , 3646.5 , 2044.8 , 3699.7 , + 2500.75 , 3654.3 , 2055.6 , 3718.4 , + 2508.11 , 3648.3 , 2070.4 , 3728.5 , + 2489.52 , 3606.7 , 2064 , 3725.1 , + 2498.75 , 3611.1 , 2075 , 3755.6 , + 2498.75 , 3611.1 , 2075 , 3755.6 , + 2498.75 , 3611.1 , 2075 , 3755.6 , + 2510.81 , 3594.4 , 2081.7 , 3758.6 , + 2525.59 , 3601.5 , 2093.9 , 3767.4 , + 2508.12 , 3566.9 , 2072.5 , 3744.2 , + 2526.74 , 3575.5 , 2074.7 , 3766.8 , + 2540.79 , 3589.6 , 2080.6 , 3790.5 , + 2547.32 , 3607.5 , 2097.3 , 3825.3 , + 2519.82 , 3603.9 , 2075.1 , 3805.6 , + 2524.18 , 3601.2 , 2086 , 3820.7 , + 2535.86 , 3628.1 , 2092.5 , 3857.1 , + 2549.27 , 3673.2 , 2116.5 , 3852.7 , + 2549.12 , 3647.3 , 2112 , 3833 , + 2524.84 , 3668.4 , 2122.1 , 3817.6 , + 2538.68 , 3668.1 , 2116.4 , 3819.3 , + 2539.88 , 3696 , 2138.4 , 3832.8 , + 2505.97 , 3658.2 , 2130.8 , 3809.2 , + 2492.63 , 3651 , 2146.8 , 3817.9 , + 2492.63 , 3651 , 2146.8 , 3806 , + 2465.49 , 3635.8 , 2136.8 , 3776.4 , + 2472.43 , 3611.2 , 2115.4 , 3751.6 , + 2473.52 , 3591.6 , 2090.4 , 3751.6 , + 2476.79 , 3583.6 , 2083.7 , 3723 , + 2466.21 , 3534.1 , 2083.7 , 3707.3 , + 2470.57 , 3521.6 , 2085.4 , 3728.3 , + 2499.02 , 3556.9 , 2114.8 , 3754.4 , + 2496.33 , 3557.8 , 2100.9 , 3739.2 , + 2528.2 , 3582.4 , 2122.1 , 3759.7 , + 2534.4 , 3572.5 , 2124.6 , 3776.2 , + 2534.4 , 3572.5 , 2124.6 , 3753.6 , + 2552.29 , 3593 , 2136.9 , 3789.6 , + 2541.98 , 3584 , 2120.6 , 3778.2 , + 2564.12 , 3587.3 , 2129.7 , 3789.4 , + 2548.79 , 3550 , 2103.5 , 3764.2 , + 2546.55 , 3547.4 , 2114.5 , 3747 , + 2549.53 , 3572.2 , 2117.7 , 3752.1 , + 2549.53 , 3572.2 , 2117.7 , 3752.1 , + 2559.15 , 3583.8 , 2132.9 , 3760.2 , + 2548.53 , 3558.2 , 2117.1 , 3775.7 , + 2535.78 , 3537.7 , 2108.4 , 3746.7 , + 2523.81 , 3556.1 , 2110.1 , 3747.8 , + 2543.99 , 3544.6 , 2121.1 , 3739.2 , + 2550.42 , 3568.1 , 2111 , 3755.2 , + 2551.03 , 3572 , 2115.4 , 3753.4 , + 2559.02 , 3585.5 , 2133.2 , 3760.3 , + 2536.03 , 3547.9 , 2102 , 3706.8 , + 2552.96 , 3575.8 , 2120.8 , 3728.8 , + 2571.1 , 3575.6 , 2137.5 , 3755.7 , + 2569.9 , 3600.9 , 2137.3 , 3769.2 , + 2566.13 , 3607.4 , 2126.2 , 3761.7 , + 2544.9 , 3593.9 , 2111.8 , 3753.6 , + 2549.71 , 3600.1 , 2113 , 3761.5 , + 2554.12 , 3628.3 , 2107.9 , 3756.4 , + 2546.04 , 3643.6 , 2100.7 , 3753.2 , + 2532.22 , 3655.4 , 2077.1 , 3727.5 , + 2547.78 , 3687.3 , 2084.2 , 3722.3 , + 2562.19 , 3701.5 , 2097.6 , 3710.8 , + 2578.36 , 3699.6 , 2118.4 , 3679.5 , + 2572.06 , 3723.5 , 2113.3 , 3695.5 , + 2551.8 , 3703 , 2112.9 , 3678.8 , + 2570.44 , 3732.9 , 2123.7 , 3711 , + 2573.44 , 3728.2 , 2118.8 , 3725.6 , + 2565.32 , 3750.8 , 2111.8 , 3725.7 , + 2566.32 , 3757 , 2114 , 3714.1 , + 2578.74 , 3771.3 , 2126.8 , 3760.6 , + 2568.79 , 3731.2 , 2098.8 , 3743.2 , + 2561.51 , 3732.8 , 2079.1 , 3741.5 , + 2562.24 , 3773.4 , 2076.6 , 3752.3 , + 2573 , 3788 , 2081.9 , 3765.8 , + 2561.95 , 3810 , 2073.4 , 3749 , + 2548.97 , 3785.8 , 2050.6 , 3728.3 , + 2529.5 , 3755.4 , 2029.5 , 3698.3 , + 2475.98 , 3678.1 , 1989.5 , 3632.3 , + 2497.69 , 3656.2 , 1995.1 , 3658.2 , + 2505.56 , 3649.2 , 2007.3 , 3693.4 , + 2498.35 , 3661.5 , 1992.8 , 3710.5 , + 2468.32 , 3566.1 , 1960.3 , 3681.3 , + 2488.82 , 3585.2 , 1982.2 , 3708.4 , + 2459.13 , 3482.6 , 1954.1 , 3668.8 , + 2464.51 , 3537.4 , 1974.7 , 3684.7 , + 2469.51 , 3537.8 , 1962.9 , 3673.3 , + 2472.25 , 3549.5 , 1961.1 , 3678.8 , + 2466.84 , 3518.2 , 1968.5 , 3668.5 , + 2491.5 , 3494.4 , 1995.9 , 3703.2 , + 2504.16 , 3494.4 , 2009.9 , 3734.4 , + 2520.26 , 3604.6 , 2023.4 , 3770.6 , + 2520.52 , 3623.3 , 2013.2 , 3788.3 , + 2527.73 , 3629 , 1999.3 , 3788.4 , + 2541.41 , 3662.6 , 1996.7 , 3811.1 , + 2534.63 , 3653.4 , 1997.4 , 3811.4 , + 2532.96 , 3643.2 , 1985.4 , 3810.7 , + 2529.14 , 3623.1 , 1978.2 , 3803.3 , + 2545.65 , 3630.2 , 1980.6 , 3823.4 , + 2544.61 , 3650.7 , 1979.5 , 3830.3 , + 2542.75 , 3646.3 , 1979.5 , 3837.4 , + 2567.96 , 3670.5 , 1979.5 , 3872.9 , + 2556.25 , 3664.4 , 1986.2 , 3863.7 , + 2562.12 , 3698.2 , 2019.3 , 3883.2 , + 2534.44 , 3683.8 , 2000.6 , 3872.1 , + 2559.42 , 3713 , 2017.8 , 3891.1 , + 2562.12 , 3725.4 , 2020.8 , 3907.5 , + 2554.42 , 3714.6 , 2020.4 , 3907.5 , + 2563.59 , 3722.4 , 2018 , 3905.7 , + 2556.64 , 3692.6 , 2002.9 , 3918.7 , + 2548.84 , 3682.6 , 1977.6 , 3885 , + 2534.49 , 3646.3 , 1970.6 , 3867.6 , + 2538.34 , 3654.7 , 1977 , 3884.4 , + 2528.73 , 3623.9 , 1971.4 , 3855.9 , + 2526.18 , 3634.2 , 1984.8 , 3872.7 , + 2532.55 , 3627.1 , 1996.2 , 3887.2 , + 2542.74 , 3637.8 , 2004.8 , 3893 , + 2549.71 , 3684.4 , 2020.3 , 3910.8 , + 2568.77 , 3694.2 , 2042.1 , 3916.1 , + 2568.7 , 3678.9 , 2038.1 , 3905.6 , + 2588.04 , 3687.2 , 2065.4 , 3932.6 , + 2614.5 , 3716.8 , 2080.4 , 3967.9 , + 2630.24 , 3722.7 , 2086.2 , 3977.2 , + 2626.43 , 3690 , 2080.9 , 3972.3 , + 2621.2 , 3690.1 , 2072.7 , 3955.7 , + 2625.46 , 3694.9 , 2082.3 , 3974.3 , + 2641.5 , 3694.9 , 2079.5 , 3964.1 , + 2624.18 , 3635.5 , 2067.1 , 3919.7 , + 2643.42 , 3661.2 , 2081.5 , 3910.5 , + 2663.1 , 3697.7 , 2103.4 , 3935.7 , + 2664.96 , 3699.5 , 2104.1 , 3933.2 , + 2659.86 , 3696.6 , 2107.1 , 3946.4 , + 2655.49 , 3736.4 , 2132.8 , 3953.7 , + 2654.34 , 3737.5 , 2123.2 , 3992.2 , + 2685.29 , 3760.2 , 2141.8 , 4015.1 , + 2685.29 , 3771.6 , 2136.1 , 4000 , + 2704.25 , 3771.6 , 2152.7 , 4024.8 , + 2705.21 , 3813.7 , 2151.6 , 4031.5 , + 2702.6 , 3818.1 , 2161.5 , 4035.6 , + 2685.23 , 3807.9 , 2146.7 , 4009.3 , + 2683.52 , 3797.3 , 2135.6 , 3994.7 , + 2692.69 , 3805.2 , 2147.1 , 4028.1 , + 2700.83 , 3813.7 , 2143.6 , 4038.7 , + 2718.73 , 3822.2 , 2168.3 , 4050.8 , + 2705.06 , 3790.2 , 2158.5 , 4024.4 , + 2717.5 , 3793.2 , 2165.3 , 4042.1 , + 2727.56 , 3803.3 , 2185.2 , 4053.1 , + 2733.67 , 3788.2 , 2180.2 , 4073.1 , + 2721.74 , 3775.3 , 2175.6 , 4057.2 , + 2678.89 , 3742.9 , 2148.9 , 4028.4 , + 2681.94 , 3753.6 , 2151.6 , 3999.4 , + 2690.79 , 3758.7 , 2162.4 , 4022.4 , + 2703.33 , 3763.5 , 2150.4 , 4025.3 , + 2675.5 , 3732 , 2125.7 , 3993.5 , + 2664.72 , 3723.1 , 2124.8 , 3963.9 , + 2671.4 , 3725.3 , 2140.5 , 3979.1 , + 2670.19 , 3736.1 , 2140.5 , 3948.5 , + 2678.73 , 3749.2 , 2142.2 , 3928.1 , + 2716.16 , 3784.8 , 2187.3 , 3921.1 , + 2735.28 , 3815.4 , 2213.4 , 3935.7 , + 2724.25 , 3811.5 , 2211.8 , 3900.4 , + 2732.29 , 3812 , 2205.2 , 3910.8 , + 2730.44 , 3827.6 , 2205.2 , 3914.4 , + 2764 , 3829.8 , 2229.1 , 3934.3 , + 2770.61 , 3825.7 , 2217.2 , 3926.9 , + 2784.39 , 3856.4 , 2218.2 , 3926.1 , + 2800.6 , 3897.9 , 2240.3 , 3958.2 , + 2768.68 , 3888.3 , 2228.8 , 3962.1 , + 2781.54 , 3892.6 , 2240.1 , 3978.1 , + 2766.08 , 3883.3 , 2233.4 , 3962.8 , + 2765.29 , 3861.5 , 2233.6 , 3953.8 , + 2769.47 , 3882.8 , 2255.5 , 4018.7 , + 2800.52 , 3891.7 , 2277.1 , 4054.6 , + 2808.62 , 3878.2 , 2275.1 , 4068.4 , + 2793.86 , 3845.3 , 2270.8 , 4049.2 , + 2829.68 , 3884.1 , 2290.3 , 4050.2 , + 2848.84 , 3902.5 , 2315.7 , 4058 , + 2853.46 , 3874 , 2318.6 , 4038.5 , + 2900.76 , 3924.5 , 2349.1 , 4061.5 , + 2880.89 , 3910.6 , 2308.7 , 4045.2 , + 2894.43 , 3913.8 , 2292.5 , 4051.2 , + 2832.53 , 3835.5 , 2240.7 , 3963 , + 2870.3 , 3874 , 2255.8 , 4011.6 , + 2890.95 , 3885.4 , 2251.4 , 4035.7 , + 2836.36 , 3857.6 , 2213.3 , 3982.5 , + 2846.94 , 3860 , 2212.1 , 3990.7 , + 2815.77 , 3839.3 , 2203.4 , 3972.4 , + 2841.16 , 3869.2 , 2222.6 , 3993.8 , + 2808.5 , 3850.4 , 2193.7 , 3979.6 , + 2814.23 , 3874 , 2218.9 , 4018.2 , + 2824.83 , 3880.8 , 2248.7 , 4051.3 , + 2835.54 , 3890.1 , 2278.5 , 4077.6 , + 2844.09 , 3875.5 , 2287.4 , 4087.2 , + 2844.09 , 3869.8 , 2289.6 , 4092.5 , + 2844.09 , 3869.8 , 2289.6 , 4092.5 , + 2844.09 , 3869.8 , 2303.8 , 4092.5 , + 2859.22 , 3922.2 , 2307 , 4091 , + 2880.07 , 3948.3 , 2318.6 , 4115.7 , + 2880.07 , 3942.2 , 2315.7 , 4118.5 , + 2880.07 , 3942.2 , 2315.7 , 4118.5 , + 2820.81 , 3942.2 , 2257 , 4057.4 , + 2863.26 , 3940.1 , 2282.8 , 4089.5 , + 2890.2 , 3923.8 , 2306.7 , 4106.5 , + 2876.34 , 3922.9 , 2301.7 , 4078.8 , + 2904.08 , 3944.9 , 2331.6 , 4087.5 , + 2936.69 , 3966.2 , 2349.1 , 4087 , + 2915.81 , 3947.4 , 2327.5 , 4056.6 , + 2956.78 , 3975.5 , 2361.3 , 4107.3 , + 2978.84 , 3983.6 , 2402.1 , 4168.2 , + 2976.56 , 3979.6 , 2388 , 4158.9 , + 2996.12 , 4007.1 , 2407.8 , 4197.5 , + 3006.87 , 4019.9 , 2425.1 , 4207.7 , + 2999.19 , 4009.5 , 2406.1 , 4194 , + 3000.66 , 4023.1 , 2409.9 , 4195.5 , + 3026.63 , 4115.4 , 2442.5 , 4219.1 , + 3037.28 , 4161 , 2461.3 , 4219.1 , + 2982.63 , 4125.5 , 2430.3 , 4218.8 , + 2992.55 , 4127.3 , 2435.2 , 4212 , + 3028.27 , 4182.3 , 2482.8 , 4237.4 , + 2997.95 , 4169.7 , 2465 , 4207.5 , + 3018.58 , 4209.1 , 2503.1 , 4228.4 , + 3037.7 , 4272.2 , 2516.6 , 4275.8 , + 3064.7 , 4282.8 , 2508.6 , 4257.8 , + 3067.48 , 4296.5 , 2503.1 , 4260.9 , + 3114.73 , 4305.5 , 2541.3 , 4281.5 , + 3124.78 , 4309.8 , 2558.4 , 4265.9 , + 3161.36 , 4357.9 , 2597.5 , 4307.8 , + 3185.72 , 4384.3 , 2595.4 , 4307.7 , + 3191.45 , 4408.4 , 2582.1 , 4304.3 , + 3211.01 , 4444.1 , 2599.3 , 4304.3 , + 3256.86 , 4436.3 , 2628.4 , 4327.1 , + 3249.17 , 4464.2 , 2627.4 , 4341 , + 3260.3 , 4514.6 , 2634.5 , 4337.8 , + 3230.83 , 4490.7 , 2617.5 , 4332.3 , + 3209.04 , 4525.5 , 2594.8 , 4357.4 , + 3197.09 , 4530.8 , 2575.2 , 4356.1 , + 3203.79 , 4522.5 , 2562.8 , 4336.8 , + 3180.63 , 4463.2 , 2567.9 , 4331.1 , + 3233.34 , 4503.9 , 2607.7 , 4344.7 , + 3245.02 , 4539 , 2602.2 , 4329.3 , + 3272.58 , 4519.7 , 2629.4 , 4339.2 , + 3261.04 , 4487.6 , 2607.8 , 4308.3 , + 3258.74 , 4460.1 , 2600.3 , 4307.1 , + 3345.09 , 4513.7 , 2651.7 , 4357.7 , + 3375.45 , 4547.1 , 2666.2 , 4360.1 , + 3396.55 , 4605.2 , 2698.9 , 4399.3 , + 3419.51 , 4638.9 , 2708.3 , 4420.3 , + 3426.77 , 4684.4 , 2709.2 , 4437.4 , + 3430.95 , 4677.1 , 2686.2 , 4444.3 , + 3382.4 , 4676.2 , 2641.7 , 4422.5 , + 3367.82 , 4609.9 , 2632.1 , 4397.7 , + 3404.29 , 4636.2 , 2645.6 , 4424.3 , + 3337.11 , 4556.5 , 2588.4 , 4373.3 , + 3289.59 , 4519.9 , 2574 , 4356.8 , + 3305.72 , 4535.1 , 2596.8 , 4332.2 , + 3247.03 , 4442.9 , 2553.7 , 4258.1 , + 3288.52 , 4491.3 , 2587.1 , 4254.8 , + 3302.57 , 4497.3 , 2579.3 , 4214.8 , + 3374.93 , 4558.6 , 2624.3 , 4270.7 , + 3439.22 , 4620.5 , 2648.7 , 4301.5 , + 3407.83 , 4659.2 , 2656.7 , 4312.9 , + 3407.83 , 4659.2 , 2656.7 , 4312.9 , + 3407.83 , 4659.2 , 2656.7 , 4312.9 , + 3281.46 , 4501.7 , 2581.8 , 4248.1 , + 3210.94 , 4488.7 , 2530.3 , 4236.6 , + 3212.82 , 4463.9 , 2514.5 , 4214.6 , + 3235.35 , 4471.5 , 2518 , 4236.6 , + 3342.77 , 4588 , 2572.3 , 4271.7 , + 3328.13 , 4582.6 , 2579 , 4269.3 , + 3364.76 , 4634.9 , 2617.6 , 4292.3 , + 3352.58 , 4626.6 , 2608 , 4313.2 , + 3319.24 , 4604.2 , 2574.6 , 4270.7 , + 3297.52 , 4586.3 , 2566.1 , 4251.7 , + 3369.26 , 4643.4 , 2620.6 , 4286.8 , + 3347.54 , 4625.6 , 2621 , 4294.6 , + 3361.8 , 4665.7 , 2615.2 , 4298.9 , + 3361.2 , 4699.1 , 2547.6 , 4310.5 , + 3328.41 , 4740.1 , 2522.7 , 4328.7 , + 3348.9 , 4752.3 , 2514.7 , 4346.1 , + 3366.87 , 4781.1 , 2533.6 , 4387.7 , + 3396.49 , 4836.1 , 2539.8 , 4388.5 , + 3357.57 , 4772.3 , 2536.3 , 4369.7 , + 3372.96 , 4793.3 , 2550.3 , 4389.7 , + 3425.86 , 4855.1 , 2602.9 , 4433.2 , + 3438.09 , 4897.6 , 2639.5 , 4436 , + 3438.09 , 4897.6 , 2639.5 , 4445 , + 3491.08 , 4953.5 , 2655.3 , 4455.6 , + 3565.69 , 5029.6 , 2672.8 , 4455.6 , + 3548.52 , 4988.4 , 2651.9 , 4519.3 , + 3537.45 , 5016 , 2643.3 , 4537.5 , + 3537.45 , 5016 , 2643.3 , 4580.4 , + 3533.21 , 5004.7 , 2633.9 , 4630.9 , + 3593.14 , 5042.5 , 2693.1 , 4669.6 , + 3559.29 , 5084.2 , 2719.6 , 4691 , + 3588.57 , 5134.3 , 2774.6 , 4686.9 , + 3564.85 , 5141.7 , 2776 , 4681.2 , + 3569.26 , 5157.5 , 2784.3 , 4693.9 , + 3569.26 , 5157.5 , 2784.3 , 4645.2 , + 3516.2 , 5081 , 2751.1 , 4607.5 , + 3600.4 , 5178.6 , 2786.4 , 4642 , + 3575.44 , 5176.4 , 2741.7 , 4651.8 , + 3621.72 , 5181 , 2762.9 , 4661.8 , + 3669.31 , 5196.7 , 2654.7 , 4661.8 , + 3665.43 , 5190 , 2680.3 , 4681.6 , + 3626.6 , 5133.1 , 2583.2 , 4677.5 , + 3635.38 , 5132.1 , 2579.2 , 4672.3 , + 3562.73 , 5041.6 , 2583.9 , 4621.3 , + 3596.4 , 5150 , 2601.5 , 4562.8 , + 3655.59 , 5207.2 , 2624.5 , 4557.8 , + 3651.59 , 5238.5 , 2635.4 , 4557.1 , + 3684.6 , 5251.2 , 2690.9 , 4576.2 , + 3700.53 , 5320 , 2719.3 , 4645 , + 3668.61 , 5368.8 , 2686.2 , 4686.7 , + 3671.16 , 5361.9 , 2664.2 , 4739.6 , + 3671.87 , 5308.6 , 2696.2 , 4724.8 , + 3737.16 , 5364.2 , 2760.3 , 4757.4 , + 3752.37 , 5384.6 , 2808.5 , 4783.1 , + 3750.02 , 5362 , 2795.9 , 4745.1 , + 3721.18 , 5345.9 , 2762.6 , 4682.2 , + 3730.56 , 5405 , 2751.7 , 4657 , + 3777.56 , 5510.3 , 2739.7 , 4653.7 , + 3788.54 , 5561.8 , 2757.1 , 4593.9 , + 3748.79 , 5587.8 , 2762.2 , 4575.8 , + 3761.07 , 5576.1 , 2784.8 , 4596.3 , + 3819.52 , 5662.4 , 2867.4 , 4640 , + 3820.16 , 5669.9 , 2893.6 , 4657.9 , + 3809.92 , 5700.3 , 2891 , 4640.3 , + 3766.89 , 5620.6 , 2858.3 , 4604.6 , + 3834.84 , 5654.8 , 2944 , 4728.3 , + 3867.53 , 5674.3 , 2909.5 , 4751.4 , + 3939.73 , 5804.9 , 2937 , 4831.7 , + 3946.73 , 5846.5 , 2934.5 , 4812.8 , + 4003.35 , 5947 , 2947.7 , 4810.7 , + 4030.1 , 6012.6 , 2929.8 , 4758.5 , + 4026.97 , 5977.1 , 2950.6 , 4762.4 , + 4000.65 , 5885.4 , 2929.1 , 4767.8 , + 4074.3 , 5801.5 , 2941.6 , 4799.5 , + 4142.19 , 5845.8 , 2941.6 , 4857.4 , + 4139.68 , 5844.7 , 2950.7 , 4899.3 , + 4223.69 , 5927.5 , 2988 , 4964.2 , + 4203.91 , 5868.3 , 2958.6 , 4949 , + 4131.94 , 5737.1 , 2876.7 , 4877.2 , + 4139.96 , 5620.5 , 2874.1 , 4805.7 , + 4297.64 , 5677.1 , 2921.1 , 4846.7 , + 4384.82 , 5869.9 , 3003.5 , 4874.5 , + 4320.52 , 5849.2 , 2973.5 , 4862.9 , + 4368.54 , 5847 , 3025.9 , 4851.5 , + 4400.3 , 5888 , 3022.2 , 4862.6 , + 4377.7 , 5842.1 , 3023.6 , 4876.6 , + 4458.66 , 5929.5 , 3069.3 , 4927.3 , + 4405.52 , 5898.2 , 3075.7 , 4907.5 , + 4336.98 , 5898.2 , 3049.5 , 4899.3 , + 4302.5 , 5771 , 2992.4 , 4895.7 , + 4325.86 , 5765.2 , 2984.1 , 4960.6 , + 4364.25 , 5812.1 , 3037.1 , 5026.2 , + 4428.08 , 5922.1 , 3056.3 , 5086.8 , + 4342.31 , 5864.8 , 2996.3 , 5031.3 , + 4333.15 , 5825.6 , 2983.4 , 5031.9 , + 4377.51 , 5808.4 , 2998.6 , 5075.8 , + 4237.06 , 5682.1 , 2924 , 5003.6 , + 4195.53 , 5579.5 , 2921.8 , 4991.3 , + 4077.59 , 5498.5 , 2921.8 , 4865.8 , + 4080.55 , 5405.6 , 2870.1 , 4835 , + 4190.45 , 5580.1 , 2936.2 , 4914.2 , + 4251.93 , 5690.1 , 2979.3 , 4958.4 , + 4204.81 , 5668.8 , 2957.2 , 4978 , + 4090.14 , 5475.8 , 2904.2 , 4901.1 , + 4076.75 , 5473.9 , 2898.6 , 4901.1 , + 3993.7 , 5363.3 , 2869.3 , 4886.3 , + 3992.03 , 5409.6 , 2871.7 , 4906.9 , + 3897.43 , 5217.3 , 2828.4 , 4845.4 , + 3919.79 , 5216.7 , 2770.5 , 4817.5 , + 4001.81 , 5271.5 , 2805.8 , 4870.2 , + 4127.28 , 5447.5 , 2921.2 , 4952.2 , + 4062.13 , 5478.6 , 2918 , 4976.9 , + 4093.43 , 5478.1 , 2927 , 4991.3 , + 4073.71 , 5532.9 , 2924.5 , 4994.2 , + 4131.26 , 5505.3 , 2940.9 , 4985.2 , + 4104.57 , 5445.1 , 2919.7 , 4950.5 , + 4028 , 5356.7 , 2874.6 , 4905.2 , + 3890.24 , 5280.8 , 2843.6 , 4854.8 , + 3796.61 , 5281.9 , 2834.1 , 4848.2 , + 3869.53 , 5321.7 , 2898.6 , 4902.9 , + 3995.69 , 5417.8 , 2940.6 , 4976.4 , + 3970.44 , 5550.4 , 2944 , 5013.1 , + 4004.04 , 5629 , 2978.4 , 5046.2 , + 3983.06 , 5611 , 2977.2 , 5023.8 , + 4096.85 , 5705.1 , 3017.5 , 5075.7 , + 4091.77 , 5730.4 , 2997.2 , 5027.5 , + 4150.95 , 5732.5 , 3023.7 , 5077.2 , + 4104.93 , 5667.1 , 3005.4 , 5065.5 , + 4135.09 , 5716.6 , 2985.6 , 5226.3 , + 4116.52 , 5691.8 , 2989 , 5220.3 , + 4154.89 , 5673.6 , 3008.3 , 5244.2 , + 4262.98 , 5754.7 , 3054.9 , 5317.1 , + 4266.17 , 5825 , 3052.1 , 5296.1 , + 4266.17 , 5929 , 3094 , 5330.8 , + 4326.35 , 5897.4 , 3078 , 5300 , + 4311.13 , 5846.9 , 3064.4 , 5305.6 , + 4267.4 , 5822.3 , 3024.1 , 5262.1 , + 4179.92 , 5732.2 , 2960.7 , 5217.8 , + 4164.62 , 5699.5 , 2955.1 , 5227.3 , + 4225.27 , 5792.8 , 3002.9 , 5300.1 , + 4215.23 , 5836.3 , 3002.5 , 5298.9 , + 4168.62 , 5815.9 , 2992.2 , 5263.7 , + 4149.92 , 5806.8 , 2992.9 , 5287.9 , + 4049.16 , 5751.6 , 2958 , 5271.1 , + 4069.25 , 5777.2 , 2946.7 , 5211 , + 4172.47 , 5862.9 , 2989.9 , 5225.9 , + 4124.86 , 5803.2 , 2958.1 , 5148.8 , + 3976.38 , 5651.8 , 2856.9 , 4991.5 , + 3981.44 , 5689.5 , 2849 , 4970.2 , + 3871.39 , 5533.5 , 2769.6 , 4840.7 , + 3645.69 , 5279.7 , 2651.3 , 4755.4 , + 3806.66 , 5479 , 2818 , 4871.8 , + 3748.88 , 5370.9 , 2739.5 , 4801.9 , + 3753.66 , 5467.2 , 2739.3 , 4842.3 , + 3847.73 , 5581.6 , 2788 , 4906.4 , + 3784.8 , 5538.2 , 2774.9 , 4897.4 , + 3841.39 , 5601.6 , 2822.4 , 4908.3 , + 3813.88 , 5557.4 , 2781.8 , 4863.8 , + 3715.38 , 5438.6 , 2707.1 , 4764.3 , + 3728.37 , 5459.7 , 2707.1 , 4806.8 , + 3734.79 , 5483.9 , 2707.1 , 4793.7 , + 3697.48 , 5434 , 2694.5 , 4720.4 , + 3701.94 , 5418.2 , 2700.7 , 4711 , + 3676.65 , 5437 , 2698.9 , 4741.8 , + 3816.71 , 5565 , 2773 , 4867 , + 3844.14 , 5574.2 , 2782.6 , 4845.4 , + 3876.9 , 5571.7 , 2790.6 , 4830.1 , + 3931.81 , 5650.4 , 2821.2 , 4908.4 , + 3941.91 , 5725.5 , 2861.7 , 4985.8 , + 3832.1 , 5645.7 , 2802.5 , 4898.6 , + 3850.14 , 5666.3 , 2786.3 , 4863.5 , + 3926.93 , 5738.3 , 2811.7 , 4891.2 , + 3961.97 , 5772.4 , 2829 , 4889 , + 3972.08 , 5775.9 , 2854.4 , 4831.8 , + 4125.92 , 5875.1 , 2918.5 , 4921.8 , + 4096.4 , 5919.9 , 2913.1 , 4977.6 , + 4074.55 , 5922.7 , 2902.4 , 4970.7 , + 4159.72 , 5969.5 , 2914.5 , 5082.3 , + 4191.81 , 6009 , 2910.1 , 5142.9 , + 4208.14 , 6095.3 , 2932.5 , 5187.4 , + 4187.13 , 6103.2 , 2959.4 , 5177.1 , + 4116.7 , 6056.6 , 2932.2 , 5130.7 , + 4016.7 , 6021.8 , 2828.5 , 5035.9 , + 4061.91 , 6018.7 , 2830.3 , 5045.2 , + 4029.08 , 5986.6 , 2838.3 , 5121.8 , + 4150.31 , 6092.7 , 2912.2 , 5203.4 , + 4154.57 , 6122.1 , 2893.3 , 5190.8 , + 4162.92 , 6115.1 , 2894.5 , 5168.3 , + 4055.35 , 5989.9 , 2822.9 , 5020.2 , + 4125.54 , 6049.3 , 2869.7 , 5018.2 , + 4132.79 , 6044.7 , 2858.1 , 5049.8 , + 4132.79 , 6046.7 , 2874.1 , 5013.9 , + 4132.79 , 6046.7 , 2874.1 , 5013.9 , + 4132.79 , 6046.7 , 2875.1 , 5013.9 , + 4266.02 , 6190.4 , 2939.5 , 5112.4 , + 4224.3 , 6267.6 , 2975.5 , 5132.3 , + 4224.3 , 6265.5 , 2998.9 , 5135.5 , + 4224.3 , 6265.5 , 2998.9 , 5135.5 , + 4364.32 , 6265.5 , 3038.7 , 5193.5 , + 4416.95 , 6397 , 3072.8 , 5262.5 , + 4360.05 , 6375.7 , 3037.7 , 5264.4 , + 4339.98 , 6390 , 3006.7 , 5224.1 , + 4293.64 , 6330.2 , 2954.9 , 5237.1 , + 4237.75 , 6251.8 , 2919.8 , 5138.3 , + 4134.64 , 6062.1 , 2862.5 , 5068.8 , + 4150.01 , 6169.3 , 2902.9 , 5083.9 , + 4145.41 , 6149.8 , 2919.8 , 5106.9 , + 4140.22 , 6148.5 , 2932.8 , 5165.8 , + 4216.24 , 6274 , 2976.1 , 5263.1 , + 4290.05 , 6340.4 , 2987 , 5273.6 , + 4310.83 , 6397.5 , 3008.3 , 5278.2 , + 4250.47 , 6391.4 , 2998.1 , 5272.3 , + 4238.77 , 6356.1 , 2988.6 , 5253.1 , + 4222.16 , 6391 , 2966.2 , 5181.4 , + 4266.34 , 6411 , 3000.5 , 5237.2 , + 4316.05 , 6424 , 3052 , 5326.3 , + 4385.29 , 6508.7 , 3088.3 , 5372.6 , + 4444.53 , 6530.4 , 3133.8 , 5422.4 , + 4442.53 , 6582.6 , 3172.1 , 5458.5 , + 4529.88 , 6688 , 3187.5 , 5599 , + 4529.18 , 6720.7 , 3188.4 , 5612.8 , + 4509.25 , 6708.9 , 3166.3 , 5595.8 , + 4494.72 , 6772 , 3189.6 , 5606.4 , + 4536.91 , 6857.1 , 3216.7 , 5629.7 , + 4519.56 , 6828.4 , 3220.9 , 5600.9 , + 4558.62 , 6860.8 , 3235.8 , 5613.3 , + 4552.46 , 6931.6 , 3240 , 5607.9 , + 4509.37 , 6856 , 3178.7 , 5552.5 , + 4522.42 , 6898.9 , 3187.7 , 5582.3 , + 4535.56 , 6905.3 , 3225.1 , 5619.9 , + 4627.42 , 6990.5 , 3280.5 , 5709.5 , + 4611.66 , 6966.2 , 3281.7 , 5723.4 , + 4581.08 , 6953.2 , 3250.6 , 5718.5 , + 4583.03 , 6986.7 , 3262.5 , 5718.5 , + 4610.66 , 6986.1 , 3273.5 , 5702.8 , + 4604.55 , 6945 , 3262.3 , 5651 , + 4704.58 , 7065.4 , 3348.2 , 5745.1 , + 4695.78 , 7118.6 , 3397 , 5764.8 , + 4693.86 , 7153.1 , 3421.9 , 5767.3 , + 4781.62 , 7273 , 3446.7 , 5820.6 , + 4759.62 , 7259.5 , 3414.9 , 5807.7 , + 4690.52 , 7130.5 , 3381.3 , 5733.1 , + 4676.42 , 7077.3 , 3395.8 , 5695.6 , + 4762.71 , 7197.2 , 3483.2 , 5782.9 , + 4828.89 , 7187.5 , 3525.9 , 5818.9 , + 4852.22 , 7246.5 , 3521.5 , 5828.5 , + 4862.41 , 7276.7 , 3539.4 , 5829.8 , + 4838.67 , 7267.9 , 3526.6 , 5794.8 , + 4872.24 , 7328 , 3540.2 , 5782.3 , + 4905.59 , 7261.2 , 3598.3 , 5785.1 , + 4945.91 , 7236.5 , 3661.3 , 5834.9 , + 4908.55 , 7132.4 , 3652.5 , 5903.6 , + 4949.91 , 7143.8 , 3688.7 , 5997.9 , + 5045.16 , 7300.5 , 3688.9 , 5956.3 , + 5014.13 , 7341 , 3680.1 , 5947 , + 5064.35 , 7407.4 , 3738.5 , 5983.7 , + 5114.13 , 7472.1 , 3818.7 , 5967.8 , + 5029 , 7415.9 , 3783.8 , 5905.6 , + 5066.9 , 7530.3 , 3810.2 , 5939.3 , + 5069.89 , 7536.3 , 3800.2 , 5911.9 , + 5097.25 , 7585.5 , 3875.3 , 5932.2 , + 5135.35 , 7615.5 , 3883.3 , 6017.6 , + 5179.04 , 7638.8 , 3935.9 , 6052.8 , + 5254.32 , 7725.9 , 3932 , 6064.2 , + 5345.89 , 7827.7 , 3986.8 , 6105.8 , + 5309.67 , 7744.3 , 3903.3 , 6094 , + 5267.35 , 7588.1 , 3873.9 , 6055.2 , + 5312.25 , 7624.1 , 3894.5 , 6105.5 , + 5312.25 , 7624.1 , 3894.5 , 6105.5 , + 5312.25 , 7624.1 , 3894.5 , 6105.5 , + 5367.98 , 7662.9 , 3867.7 , 6104.1 , + 5359.24 , 7616.3 , 3884.6 , 6074.1 , + 5292.97 , 7500.1 , 3845.9 , 6002 , + 5326.63 , 7453.7 , 3861.6 , 5922.2 , + 5407.93 , 7500.1 , 3885.7 , 5954.1 , + 5373.8 , 7369.1 , 3860.4 , 5955 , + 5312.28 , 7308.9 , 3835.1 , 5931.1 , + 5262.57 , 7265.5 , 3822.1 , 5898.1 , + 5144.42 , 7232.3 , 3788.7 , 5863.9 , + 5002.71 , 7053.5 , 3689.4 , 5722.4 , + 5110.88 , 7180.1 , 3777.2 , 5806.6 , + 5083.8 , 7241.8 , 3726.2 , 5833.1 , + 5241.23 , 7401.4 , 3867.9 , 5928.3 , + 5241.23 , 7401.4 , 3867.9 , 6011.3 , + 5337.75 , 7640.8 , 3979.3 , 6011.3 , + 5226.2 , 7596.2 , 3945.5 , 5986.5 , + 5264.62 , 7610.8 , 3947.5 , 5992.4 , + 5164.89 , 7536 , 3912.8 , 5938 , + 5270.61 , 7587.1 , 3912.8 , 5969.8 , + 5348.75 , 7677.5 , 4007.3 , 6028.3 , + 5307.82 , 7627.3 , 3986.1 , 5956.7 , + 5371.99 , 7582.8 , 4018.5 , 5972.9 , + 5374.11 , 7550.6 , 4012 , 5948.5 , + 5414.31 , 7519.4 , 3990.2 , 5917.8 , + 5343.66 , 7371.4 , 3945.3 , 5826.2 , + 5441 , 7483.2 , 3980.8 , 5877.8 , + 5514.51 , 7495.8 , 4047.9 , 5907.4 , + 5514.51 , 7495.8 , 4047.9 , 5935.6 , + 5530.19 , 7542.7 , 4049.8 , 5955.6 , + 5592.46 , 7657.1 , 4108.7 , 5955.6 , + 5639.89 , 7731.9 , 4115.9 , 5970.7 , + 5466.88 , 7633.5 , 4017.4 , 5870.2 , + 5507.36 , 7605 , 4014.9 , 5862.3 , + 5556.99 , 7656.1 , 4041.2 , 5870.7 , + 5556.99 , 7656.1 , 4041.2 , 5837.9 , + 5583.83 , 7657.5 , 4087 , 5842.3 , + 5640.42 , 7676.3 , 4149.4 , 5898.4 , + 5605.38 , 7592.9 , 4119 , 5860.8 , + 5724.75 , 7699.5 , 4185.1 , 5947.3 , + 5787.05 , 7743.4 , 4204.6 , 6037.8 , + 5773.77 , 7716.8 , 4201.9 , 6019.8 , + 5799.22 , 7652.6 , 4208.6 , 5987.4 , + 5799.22 , 7498.4 , 4141.6 , 5852.5 , + 5631.34 , 7417.4 , 4050.8 , 5769.8 , + 5581.24 , 7342.7 , 4005.3 , 5715.7 , + 5621.71 , 7388.7 , 4013.3 , 5729.7 , + 5742.83 , 7562.7 , 4092.9 , 5832.7 , + 5689.89 , 7488 , 4052.3 , 5812.1 , + 5644.22 , 7518.6 , 4027.3 , 5748.1 , + 5648.11 , 7511.8 , 4018.6 , 5712.4 , + 5748.34 , 7624.8 , 4065 , 5772 , + 5784.4 , 7667.9 , 4126.3 , 5804.9 , + 5886.72 , 7794.7 , 4203.8 , 5858.9 , + 5870.49 , 7816.9 , 4215.7 , 5877.4 , + 5933.73 , 7881.9 , 4248.2 , 5884.5 , + 5841.83 , 7882 , 4203.5 , 5832.5 , + 5910.51 , 8038.2 , 4260.7 , 5919.9 , + 5905.15 , 8047.3 , 4252.1 , 5960.2 , + 5961.45 , 8099 , 4304.4 , 5988.4 , + 5942.06 , 8166 , 4311.1 , 5990.3 , + 5975.88 , 8160 , 4333.1 , 6003.4 , + 6018.89 , 8227.2 , 4339.9 , 6009.6 , + 6000.84 , 8205 , 4319.2 , 5969.7 , + 6001.24 , 8192.4 , 4256.4 , 5927.9 , + 6023.31 , 8141.9 , 4256.4 , 5958.2 , + 6101.9 , 8180.5 , 4256.4 , 6100.2 , + 6106.1 , 8158.1 , 4344.3 , 6151.5 , + 6108 , 8126.5 , 4358.1 , 6116.8 , + 6162.86 , 8288.2 , 4388.5 , 6174 , + 6186.09 , 8400.8 , 4368.9 , 6179 , + 6184.1 , 8412 , 4322.1 , 6132.7 , + 6081.11 , 8340.7 , 4220.1 , 5989.6 , + 6043.82 , 8229.2 , 4235.9 , 5976.2 , + 6040.58 , 8205.7 , 4205.4 , 5892.3 , + 5854.35 , 7998.7 , 4139.5 , 5836.1 , + 5867.52 , 8093 , 4122.4 , 5835.8 , + 5828.74 , 8102.7 , 4139.2 , 5844.1 , + 5906.33 , 8205.5 , 4197.6 , 5910.7 , + 5861.19 , 8239.5 , 4177.3 , 5837 , + 5774.38 , 8139.2 , 4095 , 5809.7 , + 5718.7 , 8170.2 , 4047.9 , 5736.1 , + 5614.77 , 7943.2 , 3976.4 , 5632.5 , + 5528.12 , 7846.2 , 3968.6 , 5594.1 , + 5598.32 , 7952.9 , 4041.9 , 5680.4 , + 5460.43 , 7721.3 , 3939.5 , 5587.6 , + 5285.78 , 7447.9 , 3846 , 5432.8 , + 5386.94 , 7607.5 , 3945.7 , 5462.2 , + 5355.03 , 7552.6 , 3951.7 , 5399.5 , 5473.72 , 7676.3 , 3995 , 5455 ]; - + out = array2table (index_values, "VariableNames", index_names); out = setvar (out, "day", [1:height(out)]'); endfunction endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@Formaldehyde/Formaldehyde.m b/inst/+tblish/+internal/+datasets/@Formaldehyde/Formaldehyde.m index 4ee61c1a..1872cd24 100644 --- a/inst/+tblish/+internal/+datasets/@Formaldehyde/Formaldehyde.m +++ b/inst/+tblish/+internal/+datasets/@Formaldehyde/Formaldehyde.m @@ -34,4 +34,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@HairEyeColor/HairEyeColor.m b/inst/+tblish/+internal/+datasets/@HairEyeColor/HairEyeColor.m index a5709c21..b6e7910a 100644 --- a/inst/+tblish/+internal/+datasets/@HairEyeColor/HairEyeColor.m +++ b/inst/+tblish/+internal/+datasets/@HairEyeColor/HairEyeColor.m @@ -42,4 +42,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@Harman23cor/Harman23cor.m b/inst/+tblish/+internal/+datasets/@Harman23cor/Harman23cor.m index a54c425b..493eba07 100644 --- a/inst/+tblish/+internal/+datasets/@Harman23cor/Harman23cor.m +++ b/inst/+tblish/+internal/+datasets/@Harman23cor/Harman23cor.m @@ -26,7 +26,7 @@ endfunction function out = load (this) - names = {"height", "arm.span", "forearm", "lower.leg", + names = {"height", "arm.span", "forearm", "lower.leg", "weight", "bitro.diameter", "chest.girth", "chest.width"}; data = [1, 0.846, 0.805, 0.859, 0.473, ... 0.398, 0.301, 0.382, 0.846, 1, 0.881, 0.826, 0.376, 0.326, 0.277, ... @@ -42,4 +42,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@Harman74cor/Harman74cor.m b/inst/+tblish/+internal/+datasets/@Harman74cor/Harman74cor.m index 1e054d74..740714b7 100644 --- a/inst/+tblish/+internal/+datasets/@Harman74cor/Harman74cor.m +++ b/inst/+tblish/+internal/+datasets/@Harman74cor/Harman74cor.m @@ -71,9 +71,9 @@ 0.255, 0.274, 0.289, 0.362, 0.278, 0.194, 0.341, 0.345, 0.324, ... 1, 0.448, 0.324, 0.262, 0.173, 0.273, 0.287, 0.326, 0.368, 0.255, ... 0.211, 0.251, 0.263, 0.167, 0.159, 0.25, 0.208, 0.317, 0.35, ... - 0.349, 0.323, 0.201, 0.334, 0.344, 0.448, 1, 0.358, 0.301, 0.357, ... + 0.349, 0.323, 0.201, 0.334, 0.344, 0.448, 1, 0.358, 0.301, 0.357, ... 0.317, 0.272, 0.405, 0.27, 0.112, 0.312, 0.137, 0.19, 0.251, ... - 0.226, 0.274, 0.274, 0.19, 0.29, 0.11, 0.263, 0.206, 0.192, 0.258, ... + 0.226, 0.274, 0.274, 0.19, 0.29, 0.11, 0.263, 0.206, 0.192, 0.258, ... 0.324, 0.358, 1, 0.167, 0.331, 0.342, 0.303, 0.374, 0.365, 0.292, ... 0.297, 0.339, 0.398, 0.435, 0.451, 0.427, 0.446, 0.173, 0.202, ... 0.246, 0.241, 0.302, 0.272, 0.388, 0.262, 0.301, 0.167, 1, 0.413, ... @@ -88,12 +88,12 @@ 0.211, 0.203, 0.248, 0.42, 0.433, 0.437, 0.388, 0.424, 0.531, ... 0.412, 0.414, 0.358, 0.304, 0.165, 0.262, 0.326, 0.405, 0.374, ... 0.366, 0.448, 0.375, 0.434, 1]; - vars = {"VisualPerception", "Cubes", "PaperFormBoard", "Flags", - "GeneralInformation", "PargraphComprehension", "SentenceCompletion", - "WordClassification", "WordMeaning", "Addition", "Code", - "CountingDots", "StraightCurvedCapitals", "WordRecognition", - "NumberRecognition", "FigureRecognition", "ObjectNumber", - "NumberFigure", "FigureWord", "Deduction", "NumericalPuzzles", + vars = {"VisualPerception", "Cubes", "PaperFormBoard", "Flags", + "GeneralInformation", "PargraphComprehension", "SentenceCompletion", + "WordClassification", "WordMeaning", "Addition", "Code", + "CountingDots", "StraightCurvedCapitals", "WordRecognition", + "NumberRecognition", "FigureRecognition", "ObjectNumber", + "NumberFigure", "FigureWord", "Deduction", "NumericalPuzzles", "ProblemReasoning", "SeriesCompletion", "ArithmeticProblems"}; n_vars = numel (vars); cov = reshape (cov, [n_vars n_vars]); @@ -103,4 +103,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@Indometh/Indometh.m b/inst/+tblish/+internal/+datasets/@Indometh/Indometh.m index d03c5133..99cc775e 100644 --- a/inst/+tblish/+internal/+datasets/@Indometh/Indometh.m +++ b/inst/+tblish/+internal/+datasets/@Indometh/Indometh.m @@ -52,4 +52,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@InsectSprays/InsectSprays.m b/inst/+tblish/+internal/+datasets/@InsectSprays/InsectSprays.m index 5c5e8065..71dedf43 100644 --- a/inst/+tblish/+internal/+datasets/@InsectSprays/InsectSprays.m +++ b/inst/+tblish/+internal/+datasets/@InsectSprays/InsectSprays.m @@ -39,4 +39,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@JohnsonJohnson/JohnsonJohnson.m b/inst/+tblish/+internal/+datasets/@JohnsonJohnson/JohnsonJohnson.m index 1ee1ac6f..1b4aa773 100644 --- a/inst/+tblish/+internal/+datasets/@JohnsonJohnson/JohnsonJohnson.m +++ b/inst/+tblish/+internal/+datasets/@JohnsonJohnson/JohnsonJohnson.m @@ -40,4 +40,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@LakeHuron/LakeHuron.m b/inst/+tblish/+internal/+datasets/@LakeHuron/LakeHuron.m index 61c9f779..ef017271 100644 --- a/inst/+tblish/+internal/+datasets/@LakeHuron/LakeHuron.m +++ b/inst/+tblish/+internal/+datasets/@LakeHuron/LakeHuron.m @@ -30,7 +30,7 @@ level = [580.38, 581.86, 580.97, 580.8, 579.79, 580.39, 580.42, ... 580.82, 581.4, 581.32, 581.44, 581.68, 581.17, 580.53, 580.01, ... 579.91, 579.14, 579.16, 579.55, 579.67, 578.44, 578.24, 579.1, ... - 579.09, 579.35, 578.82, 579.32, 579.01, 579, 579.8, 579.83, 579.72, ... + 579.09, 579.35, 578.82, 579.32, 579.01, 579, 579.8, 579.83, 579.72, ... 579.89, 580.01, 579.37, 578.69, 578.19, 578.67, 579.55, 578.92, ... 578.09, 579.37, 580.13, 580.14, 579.51, 579.24, 578.66, 578.86, ... 578.05, 577.79, 576.75, 576.75, 577.82, 578.64, 580.58, 579.48, ... @@ -45,4 +45,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@LifeCycleSavings/LifeCycleSavings.m b/inst/+tblish/+internal/+datasets/@LifeCycleSavings/LifeCycleSavings.m index ad0868eb..9bb6ca4f 100644 --- a/inst/+tblish/+internal/+datasets/@LifeCycleSavings/LifeCycleSavings.m +++ b/inst/+tblish/+internal/+datasets/@LifeCycleSavings/LifeCycleSavings.m @@ -69,4 +69,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@Loblolly/Loblolly.m b/inst/+tblish/+internal/+datasets/@Loblolly/Loblolly.m index 81604dc5..bff9d8d7 100644 --- a/inst/+tblish/+internal/+datasets/@Loblolly/Loblolly.m +++ b/inst/+tblish/+internal/+datasets/@Loblolly/Loblolly.m @@ -64,4 +64,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@Nile/Nile.m b/inst/+tblish/+internal/+datasets/@Nile/Nile.m index 8c7ea48c..b2496f0d 100644 --- a/inst/+tblish/+internal/+datasets/@Nile/Nile.m +++ b/inst/+tblish/+internal/+datasets/@Nile/Nile.m @@ -40,4 +40,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@Orange/Orange.m b/inst/+tblish/+internal/+datasets/@Orange/Orange.m index 377773c1..32520869 100644 --- a/inst/+tblish/+internal/+datasets/@Orange/Orange.m +++ b/inst/+tblish/+internal/+datasets/@Orange/Orange.m @@ -44,4 +44,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@OrchardSprays/OrchardSprays.m b/inst/+tblish/+internal/+datasets/@OrchardSprays/OrchardSprays.m index 8d68454c..6b35771c 100644 --- a/inst/+tblish/+internal/+datasets/@OrchardSprays/OrchardSprays.m +++ b/inst/+tblish/+internal/+datasets/@OrchardSprays/OrchardSprays.m @@ -48,4 +48,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@PlantGrowth/PlantGrowth.m b/inst/+tblish/+internal/+datasets/@PlantGrowth/PlantGrowth.m index d6707b7e..50a49866 100644 --- a/inst/+tblish/+internal/+datasets/@PlantGrowth/PlantGrowth.m +++ b/inst/+tblish/+internal/+datasets/@PlantGrowth/PlantGrowth.m @@ -37,4 +37,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@Puromycin/Puromycin.m b/inst/+tblish/+internal/+datasets/@Puromycin/Puromycin.m index 35ce5cad..8aaf800e 100644 --- a/inst/+tblish/+internal/+datasets/@Puromycin/Puromycin.m +++ b/inst/+tblish/+internal/+datasets/@Puromycin/Puromycin.m @@ -38,4 +38,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@Theoph/Theoph.m b/inst/+tblish/+internal/+datasets/@Theoph/Theoph.m index fda83b02..39d679aa 100644 --- a/inst/+tblish/+internal/+datasets/@Theoph/Theoph.m +++ b/inst/+tblish/+internal/+datasets/@Theoph/Theoph.m @@ -90,4 +90,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@Titanic/Titanic.m b/inst/+tblish/+internal/+datasets/@Titanic/Titanic.m index 7bcb65e0..d97e7a11 100644 --- a/inst/+tblish/+internal/+datasets/@Titanic/Titanic.m +++ b/inst/+tblish/+internal/+datasets/@Titanic/Titanic.m @@ -6,7 +6,7 @@ ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## -## This program is distributed in the hope that it will be useful, +## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. @@ -51,4 +51,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@ToothGrowth/ToothGrowth.m b/inst/+tblish/+internal/+datasets/@ToothGrowth/ToothGrowth.m index efd14276..1cf1f65b 100644 --- a/inst/+tblish/+internal/+datasets/@ToothGrowth/ToothGrowth.m +++ b/inst/+tblish/+internal/+datasets/@ToothGrowth/ToothGrowth.m @@ -45,4 +45,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@UCBAdmissions/UCBAdmissions.m b/inst/+tblish/+internal/+datasets/@UCBAdmissions/UCBAdmissions.m index 9424ebd8..90375ec0 100644 --- a/inst/+tblish/+internal/+datasets/@UCBAdmissions/UCBAdmissions.m +++ b/inst/+tblish/+internal/+datasets/@UCBAdmissions/UCBAdmissions.m @@ -48,4 +48,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@UKDriverDeaths/UKDriverDeaths.m b/inst/+tblish/+internal/+datasets/@UKDriverDeaths/UKDriverDeaths.m index 0472619d..e85ae387 100644 --- a/inst/+tblish/+internal/+datasets/@UKDriverDeaths/UKDriverDeaths.m +++ b/inst/+tblish/+internal/+datasets/@UKDriverDeaths/UKDriverDeaths.m @@ -216,4 +216,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@UKLungDeaths/UKLungDeaths.m b/inst/+tblish/+internal/+datasets/@UKLungDeaths/UKLungDeaths.m index 98e018a1..e18bed30 100644 --- a/inst/+tblish/+internal/+datasets/@UKLungDeaths/UKLungDeaths.m +++ b/inst/+tblish/+internal/+datasets/@UKLungDeaths/UKLungDeaths.m @@ -52,4 +52,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@UKgas/UKgas.m b/inst/+tblish/+internal/+datasets/@UKgas/UKgas.m index e69bb9c0..2b96076b 100644 --- a/inst/+tblish/+internal/+datasets/@UKgas/UKgas.m +++ b/inst/+tblish/+internal/+datasets/@UKgas/UKgas.m @@ -44,4 +44,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@USAccDeaths/USAccDeaths.m b/inst/+tblish/+internal/+datasets/@USAccDeaths/USAccDeaths.m index fe6ed90b..094521e4 100644 --- a/inst/+tblish/+internal/+datasets/@USAccDeaths/USAccDeaths.m +++ b/inst/+tblish/+internal/+datasets/@USAccDeaths/USAccDeaths.m @@ -27,17 +27,17 @@ function out = load (this) month = [datetime(1973, 1, 1):calmonths(1):datetime(1978, 12, 1)]'; - deaths = [9007, 8106, 8928, 9137, 10017, 10826, 11317, 10744, - 9713, 9938, 9161, 8927, 7750, 6981, 8038, 8422, 8714, 9512, 10120, - 9823, 8743, 9129, 8710, 8680, 8162, 7306, 8124, 7870, 9387, 9556, - 10093, 9620, 8285, 8466, 8160, 8034, 7717, 7461, 7767, 7925, - 8623, 8945, 10078, 9179, 8037, 8488, 7874, 8647, 7792, 6957, - 7726, 8106, 8890, 9299, 10625, 9302, 8314, 8850, 8265, 8796, - 7836, 6892, 7791, 8192, 9115, 9434, 10484, 9827, 9110, 9070, + deaths = [9007, 8106, 8928, 9137, 10017, 10826, 11317, 10744, + 9713, 9938, 9161, 8927, 7750, 6981, 8038, 8422, 8714, 9512, 10120, + 9823, 8743, 9129, 8710, 8680, 8162, 7306, 8124, 7870, 9387, 9556, + 10093, 9620, 8285, 8466, 8160, 8034, 7717, 7461, 7767, 7925, + 8623, 8945, 10078, 9179, 8037, 8488, 7874, 8647, 7792, 6957, + 7726, 8106, 8890, 9299, 10625, 9302, 8314, 8850, 8265, 8796, + 7836, 6892, 7791, 8192, 9115, 9434, 10484, 9827, 9110, 9070, 8633, 9240]'; out = table (month, deaths); endfunction endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@USArrests/USArrests.m b/inst/+tblish/+internal/+datasets/@USArrests/USArrests.m index cd4a76ea..9fe70f7b 100644 --- a/inst/+tblish/+internal/+datasets/@USArrests/USArrests.m +++ b/inst/+tblish/+internal/+datasets/@USArrests/USArrests.m @@ -35,4 +35,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@USJudgeRatings/USJudgeRatings.m b/inst/+tblish/+internal/+datasets/@USJudgeRatings/USJudgeRatings.m index f9a24247..baa8c562 100644 --- a/inst/+tblish/+internal/+datasets/@USJudgeRatings/USJudgeRatings.m +++ b/inst/+tblish/+internal/+datasets/@USJudgeRatings/USJudgeRatings.m @@ -90,4 +90,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@USPersonalExpenditure/USPersonalExpenditure.m b/inst/+tblish/+internal/+datasets/@USPersonalExpenditure/USPersonalExpenditure.m index 5dfcd66f..124d52c5 100644 --- a/inst/+tblish/+internal/+datasets/@USPersonalExpenditure/USPersonalExpenditure.m +++ b/inst/+tblish/+internal/+datasets/@USPersonalExpenditure/USPersonalExpenditure.m @@ -39,4 +39,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@VADeaths/VADeaths.m b/inst/+tblish/+internal/+datasets/@VADeaths/VADeaths.m index 8dc0f25d..7796249f 100644 --- a/inst/+tblish/+internal/+datasets/@VADeaths/VADeaths.m +++ b/inst/+tblish/+internal/+datasets/@VADeaths/VADeaths.m @@ -37,4 +37,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@WWWusage/WWWusage.m b/inst/+tblish/+internal/+datasets/@WWWusage/WWWusage.m index c2f96ec2..ed779d14 100644 --- a/inst/+tblish/+internal/+datasets/@WWWusage/WWWusage.m +++ b/inst/+tblish/+internal/+datasets/@WWWusage/WWWusage.m @@ -39,4 +39,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@WorldPhones/WorldPhones.m b/inst/+tblish/+internal/+datasets/@WorldPhones/WorldPhones.m index a14f232a..d70ad4af 100644 --- a/inst/+tblish/+internal/+datasets/@WorldPhones/WorldPhones.m +++ b/inst/+tblish/+internal/+datasets/@WorldPhones/WorldPhones.m @@ -26,7 +26,7 @@ endfunction function out = load (this) - out.phones = reshape ([45939, 60423, 64721, 68484, 71799, 76036, 79831, 21574, 29990, + out.phones = reshape ([45939, 60423, 64721, 68484, 71799, 76036, 79831, 21574, 29990, 32510, 35218, 37598, 40341, 43173, 2876, 4708, 5230, 6662, 6856, 8220, ... 9053, 1815, 2568, 2695, 2845, 3000, 3145, 3338, 1646, 2366, 2526, 2691, ... 2868, 3054, 3224, 89, 1411, 1546, 1663, 1769, 1905, 2005, 555, 733, 773, ... @@ -40,4 +40,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@airmiles/airmiles.m b/inst/+tblish/+internal/+datasets/@airmiles/airmiles.m index fa03ddbe..98cecdde 100644 --- a/inst/+tblish/+internal/+datasets/@airmiles/airmiles.m +++ b/inst/+tblish/+internal/+datasets/@airmiles/airmiles.m @@ -18,9 +18,9 @@ # https://rdrr.io/r/datasets/airmiles.html classdef airmiles < tblish.internal.dataset - % Passenger Miles on Commercial US Airlines, 1937-1960 - % - % Source: R example datasets + # Passenger Miles on Commercial US Airlines, 1937-1960 + # + # Source: R example datasets methods @@ -39,4 +39,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@airquality/airquality.m b/inst/+tblish/+internal/+datasets/@airquality/airquality.m index c2baa11b..69fb0cd1 100644 --- a/inst/+tblish/+internal/+datasets/@airquality/airquality.m +++ b/inst/+tblish/+internal/+datasets/@airquality/airquality.m @@ -38,7 +38,7 @@ Day = data(:,6); out = table(Ozone, SolarR, Wind, Temp, Month, Day); endfunction - + endmethods endclassdef diff --git a/inst/+tblish/+internal/+datasets/@anscombe/anscombe.m b/inst/+tblish/+internal/+datasets/@anscombe/anscombe.m index 7b92442c..5c6833ec 100644 --- a/inst/+tblish/+internal/+datasets/@anscombe/anscombe.m +++ b/inst/+tblish/+internal/+datasets/@anscombe/anscombe.m @@ -39,7 +39,7 @@ out(3) = struct("x", x3, "y", y3); out(4) = struct("x", x4, "y", y4); endfunction - + endmethods endclassdef diff --git a/inst/+tblish/+internal/+datasets/@attenu/attenu.m b/inst/+tblish/+internal/+datasets/@attenu/attenu.m index d5f07f97..832da692 100644 --- a/inst/+tblish/+internal/+datasets/@attenu/attenu.m +++ b/inst/+tblish/+internal/+datasets/@attenu/attenu.m @@ -110,7 +110,7 @@ out = table(event, mag, station, dist, accel); endfunction - + endmethods endclassdef diff --git a/inst/+tblish/+internal/+datasets/@attitude/attitude.m b/inst/+tblish/+internal/+datasets/@attitude/attitude.m index ee0e0520..322909f4 100644 --- a/inst/+tblish/+internal/+datasets/@attitude/attitude.m +++ b/inst/+tblish/+internal/+datasets/@attitude/attitude.m @@ -43,7 +43,7 @@ out = table(rating, complaints, privileges, learning, raises, ... critical, advance); endfunction - + endmethods endclassdef diff --git a/inst/+tblish/+internal/+datasets/@austres/austres.m b/inst/+tblish/+internal/+datasets/@austres/austres.m index 4fd70894..b93ebae1 100644 --- a/inst/+tblish/+internal/+datasets/@austres/austres.m +++ b/inst/+tblish/+internal/+datasets/@austres/austres.m @@ -48,7 +48,7 @@ out = table (date, residents); endfunction - + endmethods endclassdef diff --git a/inst/+tblish/+internal/+datasets/@beavers/beavers.m b/inst/+tblish/+internal/+datasets/@beavers/beavers.m index 4b1dd46d..1fafe584 100644 --- a/inst/+tblish/+internal/+datasets/@beavers/beavers.m +++ b/inst/+tblish/+internal/+datasets/@beavers/beavers.m @@ -17,7 +17,7 @@ # This is based on the beavers dataset from R’s datasets package classdef beavers < tblish.internal.dataset - % Body temperature of two beavers + # Body temperature of two beavers methods @@ -105,7 +105,7 @@ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]'; - % Munge + # Munge beaver1.activ = logical (beaver1.activ); beaver2.activ = logical (beaver2.activ); beaver1.time = convert_stupid_numeric_time_to_time_of_day (beaver1.time); @@ -119,7 +119,7 @@ out.beavers = tbl; endfunction - + endmethods endclassdef @@ -128,4 +128,4 @@ hour = floor (numtime / 100); minutes = rem (numtime, 100); out = datetime (0, 0, 0, hour, minutes, 0); -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+internal/+datasets/@cars/cars.m b/inst/+tblish/+internal/+datasets/@cars/cars.m index cffdbdb9..20259b6a 100644 --- a/inst/+tblish/+internal/+datasets/@cars/cars.m +++ b/inst/+tblish/+internal/+datasets/@cars/cars.m @@ -37,4 +37,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@chickwts/chickwts.m b/inst/+tblish/+internal/+datasets/@chickwts/chickwts.m index 026f0b74..12881192 100644 --- a/inst/+tblish/+internal/+datasets/@chickwts/chickwts.m +++ b/inst/+tblish/+internal/+datasets/@chickwts/chickwts.m @@ -43,4 +43,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@co2/co2.m b/inst/+tblish/+internal/+datasets/@co2/co2.m index ad386899..1a22de78 100644 --- a/inst/+tblish/+internal/+datasets/@co2/co2.m +++ b/inst/+tblish/+internal/+datasets/@co2/co2.m @@ -49,7 +49,7 @@ 329.56, 329.9, 328.92, 327.88, 326.16, 324.68, 325.04, 326.34, ... 327.39, 328.37, 329.4, 330.14, 331.33, 332.31, 331.9, 330.7, ... 329.15, 327.35, 327.02, 327.99, 328.48, 329.18, 330.55, 331.32, ... - 332.48, 332.92, 332.08, 331.01, 329.23, 327.27, 327.21, 328.29, ... + 332.48, 332.92, 332.08, 331.01, 329.23, 327.27, 327.21, 328.29, ... 329.41, 330.23, 331.25, 331.87, 333.14, 333.8, 333.43, 331.73, ... 329.9, 328.4, 328.17, 329.32, 330.59, 331.58, 332.39, 333.33, ... 334.41, 334.71, 334.17, 332.89, 330.77, 329.14, 328.78, 330.14, ... @@ -58,7 +58,7 @@ 337.59, 337.84, 337.72, 336.37, 334.51, 332.6, 332.38, 333.75, ... 334.78, 336.05, 336.59, 337.79, 338.71, 339.3, 339.12, 337.56, ... 335.92, 333.75, 333.7, 335.12, 336.56, 337.84, 338.19, 339.91, ... - 340.6, 341.29, 341, 339.39, 337.43, 335.72, 335.84, 336.93, 338.04, ... + 340.6, 341.29, 341, 339.39, 337.43, 335.72, 335.84, 336.93, 338.04, ... 339.06, 340.3, 341.21, 342.33, 342.74, 342.08, 340.32, 338.26, ... 336.52, 336.68, 338.19, 339.44, 340.57, 341.44, 342.53, 343.39, ... 343.96, 343.18, 341.88, 339.65, 337.81, 337.69, 339.09, 340.32, ... @@ -91,4 +91,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@crimtab/crimtab.m b/inst/+tblish/+internal/+datasets/@crimtab/crimtab.m index 2e50def3..178351fc 100644 --- a/inst/+tblish/+internal/+datasets/@crimtab/crimtab.m +++ b/inst/+tblish/+internal/+datasets/@crimtab/crimtab.m @@ -36,4 +36,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@cupcake/cupcake.m b/inst/+tblish/+internal/+datasets/@cupcake/cupcake.m index fc67c915..401ebcac 100644 --- a/inst/+tblish/+internal/+datasets/@cupcake/cupcake.m +++ b/inst/+tblish/+internal/+datasets/@cupcake/cupcake.m @@ -14,7 +14,7 @@ ## along with this program; If not, see . classdef cupcake < tblish.internal.dataset - % Monthly Airline Passenger Numbers 1949-1960 + # Monthly Airline Passenger Numbers 1949-1960 methods @@ -40,4 +40,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@discoveries/discoveries.m b/inst/+tblish/+internal/+datasets/@discoveries/discoveries.m index ceba6754..dd8f0dc0 100644 --- a/inst/+tblish/+internal/+datasets/@discoveries/discoveries.m +++ b/inst/+tblish/+internal/+datasets/@discoveries/discoveries.m @@ -37,4 +37,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@esoph/esoph.m b/inst/+tblish/+internal/+datasets/@esoph/esoph.m index 731827b0..d802c2f4 100644 --- a/inst/+tblish/+internal/+datasets/@esoph/esoph.m +++ b/inst/+tblish/+internal/+datasets/@esoph/esoph.m @@ -31,4 +31,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@euro/euro.m b/inst/+tblish/+internal/+datasets/@euro/euro.m index bdaf6641..2d0088d3 100644 --- a/inst/+tblish/+internal/+datasets/@euro/euro.m +++ b/inst/+tblish/+internal/+datasets/@euro/euro.m @@ -41,4 +41,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@eurodist/eurodist.m b/inst/+tblish/+internal/+datasets/@eurodist/eurodist.m index 1216105b..f6890412 100644 --- a/inst/+tblish/+internal/+datasets/@eurodist/eurodist.m +++ b/inst/+tblish/+internal/+datasets/@eurodist/eurodist.m @@ -43,7 +43,7 @@ 471, 1048, 2108, 1157, 1157, 1724, 2010, 1273, 2097, 3188, 2409, 618, 1109, ... 792, 1011, 2428, 1363, 331, 856, 586, 2187, 898, 821, 946, 1754, 428, 1476, ... 1827, 1249, 2707, 1209, 2105]'; - + # TODO: Figure out the right way to load the UScitiesD data set in here out = struct; out.eurodist = eurodist; @@ -51,4 +51,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@faithful/faithful.m b/inst/+tblish/+internal/+datasets/@faithful/faithful.m index 1fbb3064..5079e421 100644 --- a/inst/+tblish/+internal/+datasets/@faithful/faithful.m +++ b/inst/+tblish/+internal/+datasets/@faithful/faithful.m @@ -71,4 +71,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@freeny/freeny.m b/inst/+tblish/+internal/+datasets/@freeny/freeny.m index d1425bf0..a484782e 100644 --- a/inst/+tblish/+internal/+datasets/@freeny/freeny.m +++ b/inst/+tblish/+internal/+datasets/@freeny/freeny.m @@ -95,4 +95,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@infert/infert.m b/inst/+tblish/+internal/+datasets/@infert/infert.m index 1994cb97..934bc3b4 100644 --- a/inst/+tblish/+internal/+datasets/@infert/infert.m +++ b/inst/+tblish/+internal/+datasets/@infert/infert.m @@ -117,4 +117,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@iris/iris.m b/inst/+tblish/+internal/+datasets/@iris/iris.m index 09d60455..dadda257 100644 --- a/inst/+tblish/+internal/+datasets/@iris/iris.m +++ b/inst/+tblish/+internal/+datasets/@iris/iris.m @@ -17,21 +17,21 @@ # This is based on the iris dataset from R’s datasets package classdef iris < tblish.internal.dataset - % This is the classic Fisher Iris dataset. - % - % ## Source - % - % http://archive.ics.uci.edu/ml/datasets/Iris - % - % ## References - % - % https://en.wikipedia.org/wiki/Iris_flower_data_set - % - % [1] Fisher,R.A. "The use of multiple measurements in taxonomic problems" - % Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions - % to Mathematical Statistics" (John Wiley, NY, 1950). - % [2] Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis. - % (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218. + # This is the classic Fisher Iris dataset. + # + # ## Source + # + # http://archive.ics.uci.edu/ml/datasets/Iris + # + # ## References + # + # https://en.wikipedia.org/wiki/Iris_flower_data_set + # + # [1] Fisher,R.A. "The use of multiple measurements in taxonomic problems" + # Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions + # to Mathematical Statistics" (John Wiley, NY, 1950). + # [2] Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis. + # (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218. methods @@ -49,32 +49,32 @@ endfunction function regenerate_dataset - %REGENERATE_DATASET Regenerate this dataset - % - % Reconstructs the Fisher Iris dataset. - % - % Source: http://archive.ics.uci.edu/ml/datasets/Iris - % - % References: - % https://en.wikipedia.org/wiki/Iris_flower_data_set - + #REGENERATE_DATASET Regenerate this dataset + # + # Reconstructs the Fisher Iris dataset. + # + # Source: http://archive.ics.uci.edu/ml/datasets/Iris + # + # References: + # https://en.wikipedia.org/wiki/Iris_flower_data_set + csv_url = "http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"; urlwrite (csv_url, "iris.csv"); fid = fopen ("iris.csv"); RAII.fid = onCleanup (@() fclose (fid)); - + data = textscan (fid, "%f,%f,%f,%f,%s"); - + species = strrep (data{5}, 'Iris-', ''); - + s.Species = species; s.SepalLength = data{1}; s.SepalWidth = data{2}; s.PetalLength = data{3}; s.PetalWidth = data{4}; - + iris = s; - + my_dir = fileparts (mfilename ("fullpath")); mat_file = fullfile (my_dir, "iris.mat"); if exist (mat_file, "file") @@ -85,4 +85,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@islands/islands.m b/inst/+tblish/+internal/+datasets/@islands/islands.m index 69a30cf9..49c19a49 100644 --- a/inst/+tblish/+internal/+datasets/@islands/islands.m +++ b/inst/+tblish/+internal/+datasets/@islands/islands.m @@ -43,4 +43,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@lh/lh.m b/inst/+tblish/+internal/+datasets/@lh/lh.m index 901ffd70..dca866b4 100644 --- a/inst/+tblish/+internal/+datasets/@lh/lh.m +++ b/inst/+tblish/+internal/+datasets/@lh/lh.m @@ -36,4 +36,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@longley/longley.m b/inst/+tblish/+internal/+datasets/@longley/longley.m index b4a1670a..b2e57203 100644 --- a/inst/+tblish/+internal/+datasets/@longley/longley.m +++ b/inst/+tblish/+internal/+datasets/@longley/longley.m @@ -47,4 +47,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@lynx/lynx.m b/inst/+tblish/+internal/+datasets/@lynx/lynx.m index 42b90f25..b253e746 100644 --- a/inst/+tblish/+internal/+datasets/@lynx/lynx.m +++ b/inst/+tblish/+internal/+datasets/@lynx/lynx.m @@ -42,4 +42,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@morley/morley.m b/inst/+tblish/+internal/+datasets/@morley/morley.m index 596f665c..b4486081 100644 --- a/inst/+tblish/+internal/+datasets/@morley/morley.m +++ b/inst/+tblish/+internal/+datasets/@morley/morley.m @@ -37,4 +37,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@mtcars/mtcars.m b/inst/+tblish/+internal/+datasets/@mtcars/mtcars.m index 4980c22f..d309a236 100644 --- a/inst/+tblish/+internal/+datasets/@mtcars/mtcars.m +++ b/inst/+tblish/+internal/+datasets/@mtcars/mtcars.m @@ -65,10 +65,10 @@ "AMC Javelin", "Camaro Z28", "Pontiac Firebird", "Fiat X1-9", "Porsche 914-2", ... "Lotus Europa", "Ford Pantera L", "Ferrari Dino", "Maserati Bora", ... "Volvo 142E"})'; - + out = table(model, mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb); endfunction endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@nhtemp/nhtemp.m b/inst/+tblish/+internal/+datasets/@nhtemp/nhtemp.m index ad24dcfa..508d983d 100644 --- a/inst/+tblish/+internal/+datasets/@nhtemp/nhtemp.m +++ b/inst/+tblish/+internal/+datasets/@nhtemp/nhtemp.m @@ -37,4 +37,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@nottem/nottem.m b/inst/+tblish/+internal/+datasets/@nottem/nottem.m index d97321e9..132e66ae 100644 --- a/inst/+tblish/+internal/+datasets/@nottem/nottem.m +++ b/inst/+tblish/+internal/+datasets/@nottem/nottem.m @@ -54,4 +54,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@npk/npk.m b/inst/+tblish/+internal/+datasets/@npk/npk.m index 81f4a909..9c3f2f97 100644 --- a/inst/+tblish/+internal/+datasets/@npk/npk.m +++ b/inst/+tblish/+internal/+datasets/@npk/npk.m @@ -34,4 +34,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@occupationalStatus/occupationalStatus.m b/inst/+tblish/+internal/+datasets/@occupationalStatus/occupationalStatus.m index 76dfc14a..c47795b1 100644 --- a/inst/+tblish/+internal/+datasets/@occupationalStatus/occupationalStatus.m +++ b/inst/+tblish/+internal/+datasets/@occupationalStatus/occupationalStatus.m @@ -40,4 +40,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@precip/precip.m b/inst/+tblish/+internal/+datasets/@precip/precip.m index d1a5547d..afd990e1 100644 --- a/inst/+tblish/+internal/+datasets/@precip/precip.m +++ b/inst/+tblish/+internal/+datasets/@precip/precip.m @@ -51,4 +51,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@presidents/presidents.m b/inst/+tblish/+internal/+datasets/@presidents/presidents.m index 5a53f4d0..85e32e24 100644 --- a/inst/+tblish/+internal/+datasets/@presidents/presidents.m +++ b/inst/+tblish/+internal/+datasets/@presidents/presidents.m @@ -39,4 +39,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@pressure/pressure.m b/inst/+tblish/+internal/+datasets/@pressure/pressure.m index e82883cb..45f6e64a 100644 --- a/inst/+tblish/+internal/+datasets/@pressure/pressure.m +++ b/inst/+tblish/+internal/+datasets/@pressure/pressure.m @@ -36,4 +36,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@quakes/quakes.m b/inst/+tblish/+internal/+datasets/@quakes/quakes.m index c6670c6b..cab92c9f 100644 --- a/inst/+tblish/+internal/+datasets/@quakes/quakes.m +++ b/inst/+tblish/+internal/+datasets/@quakes/quakes.m @@ -39,4 +39,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@randu/randu.m b/inst/+tblish/+internal/+datasets/@randu/randu.m index 97fd7767..aec65d43 100644 --- a/inst/+tblish/+internal/+datasets/@randu/randu.m +++ b/inst/+tblish/+internal/+datasets/@randu/randu.m @@ -185,4 +185,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@rivers/rivers.m b/inst/+tblish/+internal/+datasets/@rivers/rivers.m index 70fa8d7c..d263a10b 100644 --- a/inst/+tblish/+internal/+datasets/@rivers/rivers.m +++ b/inst/+tblish/+internal/+datasets/@rivers/rivers.m @@ -26,19 +26,19 @@ endfunction function out = load (this) - rivers = [735, 320, 325, 392, 524, 450, 1459, 135, 465, 600, 330, 336, 280, 315, - 870, 906, 202, 329, 290, 1000, 600, 505, 1450, 840, 1243, 890, 350, 407, - 286, 280, 525, 720, 390, 250, 327, 230, 265, 850, 210, 630, 260, 230, 360, - 730, 600, 306, 390, 420, 291, 710, 340, 217, 281, 352, 259, 250, 470, 680, - 570, 350, 300, 560, 900, 625, 332, 2348, 1171, 3710, 2315, 2533, 780, 280, - 410, 460, 260, 255, 431, 350, 760, 618, 338, 981, 1306, 500, 696, 605, - 250, 411, 1054, 735, 233, 435, 490, 310, 460, 383, 375, 1270, 545, 445, - 1885, 380, 300, 380, 377, 425, 276, 210, 800, 420, 350, 360, 538, 1100, - 1205, 314, 237, 610, 360, 540, 1038, 424, 310, 300, 444, 301, 268, 620, + rivers = [735, 320, 325, 392, 524, 450, 1459, 135, 465, 600, 330, 336, 280, 315, + 870, 906, 202, 329, 290, 1000, 600, 505, 1450, 840, 1243, 890, 350, 407, + 286, 280, 525, 720, 390, 250, 327, 230, 265, 850, 210, 630, 260, 230, 360, + 730, 600, 306, 390, 420, 291, 710, 340, 217, 281, 352, 259, 250, 470, 680, + 570, 350, 300, 560, 900, 625, 332, 2348, 1171, 3710, 2315, 2533, 780, 280, + 410, 460, 260, 255, 431, 350, 760, 618, 338, 981, 1306, 500, 696, 605, + 250, 411, 1054, 735, 233, 435, 490, 310, 460, 383, 375, 1270, 545, 445, + 1885, 380, 300, 380, 377, 425, 276, 210, 800, 420, 350, 360, 538, 1100, + 1205, 314, 237, 610, 360, 540, 1038, 424, 310, 300, 444, 301, 268, 620, 215, 652, 900, 525, 246, 360, 529, 500, 720, 270, 430, 671, 1770]; out.rivers = rivers; endfunction endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@rock/rock.m b/inst/+tblish/+internal/+datasets/@rock/rock.m index 5fa34195..73360e5b 100644 --- a/inst/+tblish/+internal/+datasets/@rock/rock.m +++ b/inst/+tblish/+internal/+datasets/@rock/rock.m @@ -34,4 +34,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@sleep/sleep.m b/inst/+tblish/+internal/+datasets/@sleep/sleep.m index 4311ca90..d77885fd 100644 --- a/inst/+tblish/+internal/+datasets/@sleep/sleep.m +++ b/inst/+tblish/+internal/+datasets/@sleep/sleep.m @@ -35,4 +35,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@stackloss/stackloss.m b/inst/+tblish/+internal/+datasets/@stackloss/stackloss.m index 58daedea..ad972510 100644 --- a/inst/+tblish/+internal/+datasets/@stackloss/stackloss.m +++ b/inst/+tblish/+internal/+datasets/@stackloss/stackloss.m @@ -35,4 +35,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@state/state.m b/inst/+tblish/+internal/+datasets/@state/state.m index aa54c469..49d89e33 100644 --- a/inst/+tblish/+internal/+datasets/@state/state.m +++ b/inst/+tblish/+internal/+datasets/@state/state.m @@ -134,4 +134,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@sunspot_month/sunspot_month.m b/inst/+tblish/+internal/+datasets/@sunspot_month/sunspot_month.m index 693b69a2..d2b2ae33 100644 --- a/inst/+tblish/+internal/+datasets/@sunspot_month/sunspot_month.m +++ b/inst/+tblish/+internal/+datasets/@sunspot_month/sunspot_month.m @@ -33,4 +33,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@sunspot_year/sunspot_year.m b/inst/+tblish/+internal/+datasets/@sunspot_year/sunspot_year.m index 485b054d..fb459fdf 100644 --- a/inst/+tblish/+internal/+datasets/@sunspot_year/sunspot_year.m +++ b/inst/+tblish/+internal/+datasets/@sunspot_year/sunspot_year.m @@ -322,4 +322,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@sunspots/sunspots.m b/inst/+tblish/+internal/+datasets/@sunspots/sunspots.m index a808d573..8156f07e 100644 --- a/inst/+tblish/+internal/+datasets/@sunspots/sunspots.m +++ b/inst/+tblish/+internal/+datasets/@sunspots/sunspots.m @@ -280,4 +280,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@swiss/swiss.m b/inst/+tblish/+internal/+datasets/@swiss/swiss.m index 8f285054..33a5ae40 100644 --- a/inst/+tblish/+internal/+datasets/@swiss/swiss.m +++ b/inst/+tblish/+internal/+datasets/@swiss/swiss.m @@ -26,11 +26,11 @@ endfunction function out = load (this) - # TODO: Implement this using heterogeneous dlm reading; probably using + # TODO: Implement this using heterogeneous dlm reading; probably using # textscan() error("This function is not yet implemented. Sorry."); endfunction endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@treering/treering.m b/inst/+tblish/+internal/+datasets/@treering/treering.m index 0cfc912a..895253c5 100644 --- a/inst/+tblish/+internal/+datasets/@treering/treering.m +++ b/inst/+tblish/+internal/+datasets/@treering/treering.m @@ -33,4 +33,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@trees/trees.m b/inst/+tblish/+internal/+datasets/@trees/trees.m index 3e6dd66f..0559867f 100644 --- a/inst/+tblish/+internal/+datasets/@trees/trees.m +++ b/inst/+tblish/+internal/+datasets/@trees/trees.m @@ -41,4 +41,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@uspop/uspop.m b/inst/+tblish/+internal/+datasets/@uspop/uspop.m index 074e7001..ec76695d 100644 --- a/inst/+tblish/+internal/+datasets/@uspop/uspop.m +++ b/inst/+tblish/+internal/+datasets/@uspop/uspop.m @@ -34,4 +34,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@volcano/volcano.m b/inst/+tblish/+internal/+datasets/@volcano/volcano.m index 5e144575..22c1f09a 100644 --- a/inst/+tblish/+internal/+datasets/@volcano/volcano.m +++ b/inst/+tblish/+internal/+datasets/@volcano/volcano.m @@ -382,4 +382,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@warpbreaks/warpbreaks.m b/inst/+tblish/+internal/+datasets/@warpbreaks/warpbreaks.m index 208200f1..b4d56f3b 100644 --- a/inst/+tblish/+internal/+datasets/@warpbreaks/warpbreaks.m +++ b/inst/+tblish/+internal/+datasets/@warpbreaks/warpbreaks.m @@ -43,4 +43,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@women/women.m b/inst/+tblish/+internal/+datasets/@women/women.m index 0556b58b..b14fe8cd 100644 --- a/inst/+tblish/+internal/+datasets/@women/women.m +++ b/inst/+tblish/+internal/+datasets/@women/women.m @@ -35,4 +35,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/+datasets/@zCO2/zCO2.m b/inst/+tblish/+internal/+datasets/@zCO2/zCO2.m index 7c6ca1c0..d1fd76f6 100644 --- a/inst/+tblish/+internal/+datasets/@zCO2/zCO2.m +++ b/inst/+tblish/+internal/+datasets/@zCO2/zCO2.m @@ -32,4 +32,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/+tblish/+internal/dataset.m b/inst/+tblish/+internal/dataset.m index 25fb9f56..a1379150 100644 --- a/inst/+tblish/+internal/dataset.m +++ b/inst/+tblish/+internal/dataset.m @@ -14,27 +14,27 @@ ## along with this program; If not, see . classdef (Abstract) dataset - %DATASET An example dataset, managed by Tablicious’ datasets mechanism - % - % To use this, subclass it, and have your constructor populate - % the name and description fields, and implement load(), regenerate(), - % and possibly fetch(). - % - % There are three typical ways to define a dataset: - % - All in code, in which case your subclass will just implement load() - % - As a stored, checked-in mat-file, in which case your subclass will - % implement regenerate_dataset() and load() - % - As a cached post-installation mat-file, in which case your subclass - % will implement cache_dataset() and load(), and make use of - % cache_file_path() in both of them. + #DATASET An example dataset, managed by Tablicious’ datasets mechanism + # + # To use this, subclass it, and have your constructor populate + # the name and description fields, and implement load(), regenerate(), + # and possibly fetch(). + # + # There are three typical ways to define a dataset: + # - All in code, in which case your subclass will just implement load() + # - As a stored, checked-in mat-file, in which case your subclass will + # implement regenerate_dataset() and load() + # - As a cached post-installation mat-file, in which case your subclass + # will implement cache_dataset() and load(), and make use of + # cache_file_path() in both of them. properties (Constant) - % The list of datasets included with Tablicious itself, in the - % tablicious.internal.datasets namespace. The names here must match - % The class base name. - % - % Keep this list in alphabetical order, for tidiness. + # The list of datasets included with Tablicious itself, in the + # tablicious.internal.datasets namespace. The names here must match + # The class base name. + # + # Keep this list in alphabetical order, for tidiness. included_datasets = { "airmiles" "AirPassengers" @@ -152,32 +152,32 @@ function regenerate_all_datasets () endmethods methods - + function out = load (this) - %LOAD Load the dataset from its local files - % - % This is what gets called when a user does tablicious.datasets.load("foo"). - % - % This method must return a scalar struct whose fields are - % the variables defined in this dataset. + #LOAD Load the dataset from its local files + # + # This is what gets called when a user does tablicious.datasets.load("foo"). + # + # This method must return a scalar struct whose fields are + # the variables defined in this dataset. error("dataset.load is abstract. Subclass %s must implement it, but it does not.", ... class (this)); endfunction function out = description_texi (this) - %DESCRIPTION_TEXI Get the Texinfo description for this dataset + #DESCRIPTION_TEXI Get the Texinfo description for this dataset description_file = fullfile (this.class_dir, "description.texi"); if ! isfile (description_file) out = ""; return endif texi_in = fileread (description_file); - % Process our special directives + # Process our special directives texi = texi_in; octave_namespace_dir = fileparts (fileparts (mfilename ("fullpath"))); example_scripts_dir = fullfile (octave_namespace_dir, "+examples", ... "+internal", "+datasets"); - % Include example scripts + # Include example scripts while true [ix_start, ix_end, tok] = regexp (texi, '@INCLUDE_DATASET_EXAMPLE_SCRIPT\{(.*?)\}', ... "start", "end", "tokens"); @@ -197,44 +197,44 @@ function regenerate_all_datasets () endfunction function regenerate_dataset (this) - % Regenerate the dataset from its original source - % - % This is what goes out to a website or some other source, downloads - % the original source data, parses and munges it, and saves it as a - % .mat file (or something else) in the Tablicious source tree. This is - % called at development time by the dataset’s maintainer. It should not - % be called by the user. - % - % Since the dataset is never expected to change, and the generated files - % are checked into the source tree, this method only needs to be called - % if the file format for Octave mat-files changes, or something similar. - % So, basically never, and it"s included just as a reference for where - % the data came from. - % - % This is a do-nothing in the base class. Leave it as a do-nothing if - % your dataset does not require regeneration. + # Regenerate the dataset from its original source + # + # This is what goes out to a website or some other source, downloads + # the original source data, parses and munges it, and saves it as a + # .mat file (or something else) in the Tablicious source tree. This is + # called at development time by the dataset’s maintainer. It should not + # be called by the user. + # + # Since the dataset is never expected to change, and the generated files + # are checked into the source tree, this method only needs to be called + # if the file format for Octave mat-files changes, or something similar. + # So, basically never, and it"s included just as a reference for where + # the data came from. + # + # This is a do-nothing in the base class. Leave it as a do-nothing if + # your dataset does not require regeneration. endfunction function cache_dataset (this) - % Cache the dataset by downloading it and storing in user cache files - % - % This is what gets called by cache_all_datasets. The user will call - % that after installing Octave. This caching mechanism is for datasets - % that cannot be directly redistributed with Octave or Tablicious itself, - % for size or licensing reasons. - % - % Most datasets should not require caching, so this should be left as - % a do-nothing method for most datasets. + # Cache the dataset by downloading it and storing in user cache files + # + # This is what gets called by cache_all_datasets. The user will call + # that after installing Octave. This caching mechanism is for datasets + # that cannot be directly redistributed with Octave or Tablicious itself, + # for size or licensing reasons. + # + # Most datasets should not require caching, so this should be left as + # a do-nothing method for most datasets. endfunction function out = cache_file_path (this) - %CACHE_FILE_PATH Path to the local cache file, for classes that use caching + #CACHE_FILE_PATH Path to the local cache file, for classes that use caching if ispc error (["tblish.internal.dataset.cache_file_path: this is not " ... "implemented for Windows yet. Sorry."]); else - % Use the XDG standard cache location on Linux and Mac + # Use the XDG standard cache location on Linux and Mac xdg_cache_dir = fullfile (getenv ("HOME"), ".cache"); datasets_cache_dir = fullfile (xdg_cache_dir, "octave", "datasets"); endif @@ -245,12 +245,12 @@ function cache_dataset (this) methods (Protected) function out = class_dir (this) - %CLASS_DIR Directory of the class definition - % - % This only works for datasets implemented as part of Tablicious" example - % data sets, because it makes assumptions about where they live. We have - % to do this because Octave"s which() doesn"t work on classes in namespaces, - % as of Octave 4.4. + #CLASS_DIR Directory of the class definition + # + # This only works for datasets implemented as part of Tablicious" example + # data sets, because it makes assumptions about where they live. We have + # to do this because Octave"s which() doesn"t work on classes in namespaces, + # as of Octave 4.4. my_dir = fileparts (mfilename ("fullpath")); datasets_namespace_dir = fullfile (my_dir, "+datasets"); klass = class (this); diff --git a/inst/+tblish/+internal/fillValForVal.m b/inst/+tblish/+internal/fillValForVal.m index ac9f7b58..cd120bd0 100644 --- a/inst/+tblish/+internal/fillValForVal.m +++ b/inst/+tblish/+internal/fillValForVal.m @@ -32,12 +32,12 @@ ## It also has default logic that will determine the fill value for an arbitrary ## type by detecting the value used to fill elements during array expansion ## operations. This will be appropriate for most data types. -## +## ## Returns a 1-by-ncols value of the same type as x, which may be any type, where ## ncols is the number of columns in the input. ## ## @end deftypefn -function out = fillValForVal (x) +function out = fillValForVal (x) nCols = size (x, 2); if isnumeric (x) if isa (x, 'double') || isa (x, 'single') @@ -50,7 +50,7 @@ endif elseif iscell (x) if iscellstr (x) - % This is an exception to the "check the type, not its values" rule. + # This is an exception to the "check the type, not its values" rule. out = repmat ({''}, 1, nCols); else error ('table: outer fill values for non-cellstr cells are not supported'); @@ -73,14 +73,14 @@ varNames = x.Properties.VariableNames; out = table (varVals{:}, 'VariableNames', x.Properties.VariableNames); elseif isa (x, 'categorical') - % We may need to construct an value of the particular categories - % in a categorical variable. Currently a moot point since categorical is not - % defined in Octave yet. + # We may need to construct an value of the particular categories + # in a categorical variable. Currently a moot point since categorical is not + # defined in Octave yet. error ('table: outer fill values for categorical variables are not yet implemented'); else - % Fall back to using array-expansion fill value + # Fall back to using array-expansion fill value if isempty (x) - % Assume the 0-arg constructor works + # Assume the 0-arg constructor works x0 = feval (class (x)); else x0 = x(1,:); diff --git a/inst/+tblish/+internal/generate_datasets_list.m b/inst/+tblish/+internal/generate_datasets_list.m index 434b3f3a..7ed2711e 100644 --- a/inst/+tblish/+internal/generate_datasets_list.m +++ b/inst/+tblish/+internal/generate_datasets_list.m @@ -14,7 +14,7 @@ ## along with this program; If not, see . function generate_datasets_list () - % Generates the dataset.m file based on existing datasets + # Generates the dataset.m file based on existing datasets my_dir = fileparts (mfilename ("fullpath")); octave_namespace_dir = fileparts (my_dir); @@ -31,7 +31,7 @@ function p(fmt, varargin) for i_dataset = 1:numel(names) name = names{i_dataset}; dset = tblish.internal.dataset.lookup (name); - + descr_texi = dset.description_texi; texi_lines = regexp (descr_texi, '\r?\n', "split"); descr_comment_lines = strcat ({" ## "}, texi_lines); @@ -77,4 +77,4 @@ function p(fmt, varargin) fprintf(fid, "%s", out_txt); fclose (fid); fprintf ("Regenerated %s\n", dataset_m_file); -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+internal/load_tablicious.m b/inst/+tblish/+internal/load_tablicious.m index 3e6ca40c..812c4af4 100644 --- a/inst/+tblish/+internal/load_tablicious.m +++ b/inst/+tblish/+internal/load_tablicious.m @@ -1,13 +1,13 @@ function load_tablicious - % Load the Tablicious library - + # Load the Tablicious library + pkg_name = "Tablicious"; - + this_dir = fileparts (fullfile (mfilename ("fullpath"))); inst_dir = fileparts (fileparts (this_dir)); shims_dir = fullfile (inst_dir, "shims", "compat"); - - % Load compatibility shims + + # Load compatibility shims orig_warn = warning; warning off Octave:shadowed-function addpath (fullfile (shims_dir, 'all')); @@ -18,24 +18,24 @@ if compare_versions (version, compat_lvl, "<") addpath (fullfile (shims_dir, compat_dir)); endif - end + endfor warning (orig_warn); - - % Load doco - - % When a package is installed, the doc/ directory is added as a subdir - % of the main installation dir, which contains the inst/ files. But when - % running from the repo, doc/ is a sibling of inst/. - + + # Load doco + + # When a package is installed, the doc/ directory is added as a subdir + # of the main installation dir, which contains the inst/ files. But when + # running from the repo, doc/ is a sibling of inst/. + if exist (fullfile (inst_dir, "doc", [pkg_name ".qch"]), "file") qhelp_file = fullfile (inst_dir, "doc", [pkg_name ".qch"]); elseif exist (fullfile (fileparts (inst_dir), "doc", [pkg_name ".qch"]), "file") qhelp_file = fullfile (fileparts (inst_dir), "doc", [pkg_name ".qch"]); else - % Couldn't find doc file. Oh well. + # Couldn't find doc file. Oh well. qhelp_file = []; endif - + if ! isempty (qhelp_file) if compare_versions (version, "4.4.0", ">=") && compare_versions (version, "6.0.0", "<") __octave_link_register_doc__ (qhelp_file); @@ -45,5 +45,5 @@ __event_manager_register_documentation__ (qhelp_file); endif endif - + endfunction diff --git a/inst/+tblish/+internal/parse_ismissing_indicator.m b/inst/+tblish/+internal/parse_ismissing_indicator.m index f3409821..62cc4448 100644 --- a/inst/+tblish/+internal/parse_ismissing_indicator.m +++ b/inst/+tblish/+internal/parse_ismissing_indicator.m @@ -18,23 +18,23 @@ # and can probably be removed. function out = parse_ismissing_indicator (indicator) -%PARSE_ISMISSING_INDICATOR Parse indicator argument for ismissing() and friends -% -% Parses an "indicator" input value and converts it to a regular -% indicator value. A regular indicator value is a cell row vector whose -% elements are either: -% * a single string as a char row vector -% * a scalar value of any type -% -% Throws an error if the input could not be cleanly converted to a regular -% indicator value. +#PARSE_ISMISSING_INDICATOR Parse indicator argument for ismissing() and friends +# +# Parses an "indicator" input value and converts it to a regular +# indicator value. A regular indicator value is a cell row vector whose +# elements are either: +# * a single string as a char row vector +# * a scalar value of any type +# +# Throws an error if the input could not be cleanly converted to a regular +# indicator value. in = indicator; x = in; -% Convert non-cells by breaking out elements or converting strings -if ~iscell (x) +# Convert non-cells by breaking out elements or converting strings +if !iscell (x) if ischar (x) x = cellstr (x); else @@ -44,7 +44,7 @@ x = x(:)'; -% Validate +# Validate for i = 1:numel (x) el = x{i}; if ischar (el) @@ -53,7 +53,7 @@ i, size (el, 1)); endif else - if ~isscalar (el) + if !isscalar (el) error ('ismissing: non-char indicator elements must be scalar; element %d is a %s %s', ... size2str (size (el)), class (el)); endif @@ -62,4 +62,4 @@ out = x; -endfunction \ No newline at end of file +endfunction diff --git a/inst/+tblish/+internal/splitapply_impl.m b/inst/+tblish/+internal/splitapply_impl.m index 9a338244..551f3ba3 100644 --- a/inst/+tblish/+internal/splitapply_impl.m +++ b/inst/+tblish/+internal/splitapply_impl.m @@ -15,9 +15,9 @@ function varargout = splitapply_impl (func, varargin) - % The non-polymorphic actual implementation of splitapply. This is broken out - % as a separate function of a different name to prevent nested tables from causing - % the table.splitapply method to be called recursively, which we don't want. + # The non-polymorphic actual implementation of splitapply. This is broken out + # as a separate function of a different name to prevent nested tables from causing + # the table.splitapply method to be called recursively, which we don't want. mustBeA (func, 'function_handle'); narginchk (3, Inf); G = varargin{end}; @@ -31,9 +31,9 @@ u_g(isnan (u_g)) = []; n_g = max (u_g); n_outs = nargout; - + bufs = repmat ({cell (n_g, 1)}, [1 n_outs]); - + for i_group = 1:n_g tf = G == i_group; x_args = cell (n_x_vars, 1); diff --git a/inst/+tblish/+internal/unload_tablicious.m b/inst/+tblish/+internal/unload_tablicious.m index 9c029e4a..2fb27f14 100644 --- a/inst/+tblish/+internal/unload_tablicious.m +++ b/inst/+tblish/+internal/unload_tablicious.m @@ -1,23 +1,23 @@ function unload_tablicious - % Unload the Tablicious library - + # Unload the Tablicious library + pkg_name = "Tablicious"; - + this_dir = fileparts (fullfile (mfilename ("fullpath"))); inst_dir = fileparts (fileparts (this_dir)); shims_dir = fullfile (inst_dir, "shims", "compat"); - % Unregister doco - + # Unregister doco + if exist (fullfile (inst_dir, "doc", [pkg_name ".qch"]), "file") qhelp_file = fullfile (inst_dir, "doc", [pkg_name ".qch"]); elseif exist (fullfile (fileparts (inst_dir), "doc", [pkg_name ".qch"]), "file") qhelp_file = fullfile (fileparts (inst_dir), "doc", [pkg_name ".qch"]); else - % Couldn't find doc file. Oh well. + # Couldn't find doc file. Oh well. qhelp_file = []; endif - + if ! isempty (qhelp_file) if compare_versions (version, "4.4.0", ">=") && compare_versions (version, "6.0.0", "<") __octave_link_unregister_doc__ (qhelp_file); @@ -27,9 +27,9 @@ __event_manager_unregister_documentation__ (qhelp_file); endif endif - - % Unload compatibility shims - + + # Unload compatibility shims + rmpath (fullfile (shims_dir, 'all')); shim_compat_levels = {"5.0.0", "6.0.0", "7.0.0"}; for i_compat = 1:numel (shim_compat_levels) @@ -38,6 +38,6 @@ if compare_versions (version, compat_lvl, "<") rmpath (fullfile (shims_dir, compat_dir)); endif - end - + endfor + endfunction diff --git a/inst/+tblish/+table/+internal/gen_colvecfun.m b/inst/+tblish/+table/+internal/gen_colvecfun.m index d7709fca..f6c640a5 100644 --- a/inst/+tblish/+table/+internal/gen_colvecfun.m +++ b/inst/+tblish/+table/+internal/gen_colvecfun.m @@ -14,15 +14,15 @@ ## along with this program; If not, see . function gen_colvecfun (maxdepth) - %GEN_COLVECFUN Meta-function to generate the colvecfun implementation + #GEN_COLVECFUN Meta-function to generate the colvecfun implementation if nargin < 2 || isempty (maxdepth); maxdepth = 20; endif - + out_file = 'colvecfun_impl.txt'; fid = fopen (out_file, 'w'); function p(fmt, varargin) fprintf(fid, [fmt '\n'], varargin{:}); endfunction - + p(''); p('# The following code was generated by tblish.table.internal.gen_colvecfun'); p(''); @@ -39,12 +39,12 @@ function p(fmt, varargin) p(' endswitch'); p(''); p('endfunction'); - + p('') p('function out = colvecfun_for_1_dims (fcn, x)'); p(' out = fcn (x);'); p('endfunction'); - + for ndims = 2:maxdepth p('') p('function out = colvecfun_for_%d_dims (fcn, x)', ndims); @@ -77,9 +77,9 @@ function p(fmt, varargin) p('endfunction'); endfor p(''); - + fclose (fid); fprintf ('Generated function is at %s\n', out_file); fprintf ('Now copy that into colvecfun.m\n'); - + endfunction diff --git a/inst/+tblish/+table/+internal/matchrows.m b/inst/+tblish/+table/+internal/matchrows.m index eb62d371..59a0dab1 100644 --- a/inst/+tblish/+table/+internal/matchrows.m +++ b/inst/+tblish/+table/+internal/matchrows.m @@ -14,68 +14,68 @@ ## along with this program; If not, see . function [ixs, ixUnmatchedA, ixUnmatchedB] = matchrows (A, B) - %MATCHROWS Find all matching (equal) row value pairs in input matrixes - % - % [ixs, ixUnmatchedA, ixUnmatchedB] = matchrows (A, B) - % - % This function is for the internal use of table. It is intended that this will - % be made private or +internal before release 1.0 time; it is currently public - % to support convenient debugging. - % - % Returns: - % ixs - an n-by-2 double matrix where each row contains (iA, iB) which are the - % the indexes of rows from A and B which had equal values. - % ixUnmatchedA - a vector of indexes of rows from A which had no matches in B - % ixUnmatchedB - a vector of indexes of rows from B which had no matches in A - % - % This is an Octave extension. - % - % Developer notes: It is my intent that if this function turns out to be useful, - % the slow generic dumb-nested-loops implementation could be supplemented by - % optimized implementations of smarter matching algorithms for numerics. - % In particular: - % a) an oct-file using a modified merge sort could be implemented to get this down - % to O(n log n) time, with a per-operation cost of C-based numeric row - % comparisons with short-circuiting. - % b) for numerics, a "unique trick" similar to that used to generate proxy - % keys could be used to get this down to scalar numeric proxies for row - % values (as long as output ordering for partial-NaN rows is not significant), - % at which point a pair of ismember() calls might work. - - if ~ismatrix (A) + #MATCHROWS Find all matching (equal) row value pairs in input matrixes + # + # [ixs, ixUnmatchedA, ixUnmatchedB] = matchrows (A, B) + # + # This function is for the internal use of table. It is intended that this will + # be made private or +internal before release 1.0 time; it is currently public + # to support convenient debugging. + # + # Returns: + # ixs - an n-by-2 double matrix where each row contains (iA, iB) which are the + # the indexes of rows from A and B which had equal values. + # ixUnmatchedA - a vector of indexes of rows from A which had no matches in B + # ixUnmatchedB - a vector of indexes of rows from B which had no matches in A + # + # This is an Octave extension. + # + # Developer notes: It is my intent that if this function turns out to be useful, + # the slow generic dumb-nested-loops implementation could be supplemented by + # optimized implementations of smarter matching algorithms for numerics. + # In particular: + # a) an oct-file using a modified merge sort could be implemented to get this down + # to O(n log n) time, with a per-operation cost of C-based numeric row + # comparisons with short-circuiting. + # b) for numerics, a "unique trick" similar to that used to generate proxy + # keys could be used to get this down to scalar numeric proxies for row + # values (as long as output ordering for partial-NaN rows is not significant), + # at which point a pair of ismember() calls might work. + + if !ismatrix (A) error ('matchrows: input A must be a matrix; got a %s', size2str ( size (A))); endif - if ~ismatrix (B) + if !ismatrix (B) error ('matchrows: input B must be a matrix; got a %s', size2str ( size (B))); endif - + # Two-way ismember will often be faster, but it's not well tested yet #[ixs, ixUnmatchedA, ixUnmatchedB] = matchrows_dumb_nested_loops (A, B); [ixs, ixUnmatchedA, ixUnmatchedB] = matchrows_two_way_ismember (A, B); endfunction function [ixs, ixUnmatchedA, ixUnmatchedB] = matchrows_two_way_ismember (A, B) - % This is an attempt to do the actual matching using vectorized operations. - % This will work a lot better on highly selective joins (those with relatively - % few matching rows). - + # This is an attempt to do the actual matching using vectorized operations. + # This will work a lot better on highly selective joins (those with relatively + # few matching rows). + [uA, ixIA, ixJA] = unique (A, 'rows'); [uB, ixIB, ixJB] = unique (B, 'rows'); - % ixsK is a cell containing a list of all indexes in the input that mapped - % to that row in the unique output + # ixsK is a cell containing a list of all indexes in the input that mapped + # to that row in the unique output ixsKA = tblish.table.internal.jndx2kndxs (ixJA); ixsKB = tblish.table.internal.jndx2kndxs (ixJB); - + [tf, loc] = ismember (uA, uB, 'rows'); tfUnmatchedUA = !tf; ixUnmatchedUA = find (tfUnmatchedUA); ixUnmatchedUB = setdiff (1:size(uB,1), loc(tf)); ixUMatch = [(1:size(uA,1))' loc]; ixUMatch = ixUMatch(tf,:); - % These are unique values, so we know we have all the possible matches. - % Now expand them out to the original input row values - - % Avoid a Shlemiel by pre-allocating + # These are unique values, so we know we have all the possible matches. + # Now expand them out to the original input row values + + # Avoid a Shlemiel by pre-allocating ixs = NaN(size(A,1) * size(B,1), 2); n_matches = 0; for i_match = 1:size(ixUMatch, 1) @@ -90,34 +90,34 @@ endfor endfor ixs = ixs(1:n_matches,:); - + ixsUnmatchedA = ixsKA(ixUnmatchedUA); ixUnmatchedA = cat(1, ixsUnmatchedA{:}); ixsUnmatchedB = ixsKB(ixUnmatchedUB); ixUnmatchedB = cat(1, ixsUnmatchedB{:}); - + endfunction function [ixs, ixUnmatchedA, ixUnmatchedB] = matchrows_dumb_nested_loops (A, B) - % This is a dumb nested-loops M-code implementation of matchrows. - % Even without going to an oct-file, this could be improved with some smarter - % M-code logic. I'm just doing the easiest implementation I can for now, - % to establish the soundness of this approach before working hard on efficiency. - % - % If improving this code, avoid doing much to this function: instead, use it - % as a correctness reference, and provide separate optimized functions. + # This is a dumb nested-loops M-code implementation of matchrows. + # Even without going to an oct-file, this could be improved with some smarter + # M-code logic. I'm just doing the easiest implementation I can for now, + # to establish the soundness of this approach before working hard on efficiency. + # + # If improving this code, avoid doing much to this function: instead, use it + # as a correctness reference, and provide separate optimized functions. nRowsA = size (A, 1); nRowsB = size (B, 1); nCols = size (A, 2); tfMatchedA = false (nRowsA, 1); tfMatchedB = false (nRowsB, 1); - % Pessimistic allocation to avoid Shlemiel-the-painter behavior - % This could be improved with a Vector/ArrayList implementation + # Pessimistic allocation to avoid Shlemiel-the-painter behavior + # This could be improved with a Vector/ArrayList implementation ixs = NaN(nRowsA * nRowsB, 2); nMatches = 0; - + for iA = 1:nRowsA for iB = 1:nRowsB # all(... == ...) is much faster than isequal(). Use that. @@ -132,6 +132,6 @@ endfor ixs = ixs(1:nMatches,:); - ixUnmatchedA = find(~tfMatchedA); - ixUnmatchedB = find(~tfMatchedB); -endfunction \ No newline at end of file + ixUnmatchedA = find(!tfMatchedA); + ixUnmatchedB = find(!tfMatchedB); +endfunction diff --git a/inst/+tblish/+table/+internal/mx_summary.m b/inst/+tblish/+table/+internal/mx_summary.m index 74df5cc0..f8fdce9d 100644 --- a/inst/+tblish/+table/+internal/mx_summary.m +++ b/inst/+tblish/+table/+internal/mx_summary.m @@ -14,13 +14,13 @@ ## along with this program; If not, see . function out = mx_summary (x) - %MX_SUMMARY "Summary" data for an arbitrary array, with specific type support - % - % TODO: This needs to be expanded to support tables of arbitrary columns, to - % support things like summaries of distinct value frequencies in categorical - % values. - % - % Returns a scalar struct. + #MX_SUMMARY "Summary" data for an arbitrary array, with specific type support + # + # TODO: This needs to be expanded to support tables of arbitrary columns, to + # support things like summaries of distinct value frequencies in categorical + # values. + # + # Returns a scalar struct. out = struct; out.Size = size (x); @@ -53,12 +53,12 @@ out.Median = median (x); out.Max = max (x); out.NumMissing = numel (find (isnat (x))); % friggin' NaT; sigh... -end +endfunction function out = mx_summary_logical (x, out) out.True = numel (find (x)); - out.False = numel (find (~x)); -end + out.False = numel (find (!x)); +endfunction function out = mx_summary_categorical (x, out) out.NumCategories = numel (categories (x)); diff --git a/inst/+tblish/+table/+internal/vartype_filter.m b/inst/+tblish/+table/+internal/vartype_filter.m index ff28cbe2..08fbd24a 100644 --- a/inst/+tblish/+table/+internal/vartype_filter.m +++ b/inst/+tblish/+table/+internal/vartype_filter.m @@ -14,18 +14,18 @@ ## along with this program; If not, see . classdef vartype_filter - %VARTYPE_FILTER A thing that indicates filtering by variable type - + #VARTYPE_FILTER A thing that indicates filtering by variable type + properties type endproperties - + methods function this = vartype_filter(type) mustBeCharvec(type); this.type = type; endfunction - + function out = matches (this, variable_value) if isequal (this.type, 'cellstr') out = iscellstr (variable_value); @@ -34,5 +34,5 @@ endif endfunction endmethods - + endclassdef diff --git a/inst/+tblish/dataset.m b/inst/+tblish/dataset.m index 51367897..2da6825f 100644 --- a/inst/+tblish/dataset.m +++ b/inst/+tblish/dataset.m @@ -35,16 +35,16 @@ ## Passenger Miles on Commercial US Airlines, 1937-1960 ## ## @subsubheading Description - ## + ## ## The revenue passenger miles flown by commercial airlines in the ## United States for each year from 1937 to 1960. - ## + ## ## @subsubheading Source - ## + ## ## @cite{F.A.A. Statistical Handbook of Aviation}. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.airmiles; ## plot (t.year, t.miles); @@ -52,7 +52,7 @@ ## xlabel ("Passenger-miles flown by U.S. commercial airlines") ## ylabel ("airmiles"); ## @end example - ## + ## ## ## @end deftypefn function out = airmiles () @@ -83,22 +83,22 @@ ## Monthly Airline Passenger Numbers 1949-1960 ## ## @subsubheading Description - ## + ## ## The classic Box & Jenkins airline data. Monthly totals of international ## airline passengers, 1949 to 1960. - ## + ## ## @subsubheading Source - ## + ## ## Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). @cite{Time Series ## Analysis, Forecasting and Control}. Third Edition. San Francisco: Holden-Day. ## Series G. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## ## TODO: This example needs to be ported from R. ## @end example - ## + ## ## ## @end deftypefn function out = AirPassengers () @@ -129,11 +129,11 @@ ## New York Air Quality Measurements from 1973 ## ## @subsubheading Description - ## + ## ## Daily air quality measurements in New York, May to September 1973. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Ozone ## Ozone concentration (ppb) @@ -148,19 +148,19 @@ ## @item Day ## Day of month (1-31) ## @end table - ## + ## ## @subsubheading Source - ## + ## ## New York State Department of Conservation (ozone data) and the National ## Weather Service (meteorological data). - ## + ## ## @subsubheading References - ## + ## ## Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). ## @cite{Graphical Methods for Data Analysis}. Belmont, CA: Wadsworth. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.airquality ## # Plot a scatter-plot plus a fitted line, for each combination of measurements @@ -189,9 +189,9 @@ ## plot (hax, x_hat, p_y, "r"); ## endfor ## endfor - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = airquality () @@ -222,42 +222,42 @@ ## Anscombe’s Quartet of “Identical” Simple Linear Regressions ## ## @subsubheading Description - ## + ## ## Four sets of x/y pairs which have the same statistical properties, but are ## very different. - ## + ## ## @subsubheading Format - ## + ## ## The data comes in an array of 4 structs, each with fields as follows: - ## + ## ## @table @code ## @item x ## The X values for this pair. ## @item y ## The Y values for this pair. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Tufte, Edward R. (1989). @cite{The Visual Display of Quantitative Information}. ## 13–14. Cheshire, CT: Graphics Press. - ## + ## ## @subsubheading References - ## + ## ## Anscombe, Francis J. (1973). Graphs in statistical analysis. @cite{The ## American Statistician}, 27, 17–21. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## data = tblish.dataset.anscombe - ## + ## ## # Pick good limits for the plots ## all_x = [data.x]; ## all_y = [data.y]; ## x_limits = [min(0, min(all_x)) max(all_x)*1.2]; ## y_limits = [min(0, min(all_y)) max(all_y)*1.2]; - ## + ## ## # Do regression on each pair and plot the input and results ## figure; ## haxs = NaN (1, 4); @@ -272,13 +272,13 @@ ## ylabel (sprintf ("y%d", i_pair)); ## scatter (x, y, "r"); ## endfor - ## + ## ## # Fiddle with the plot axes parameters ## linkaxes (haxs); ## xlim(haxs(1), x_limits); ## ylim(haxs(1), y_limits); ## @end example - ## + ## ## ## @end deftypefn function out = anscombe () @@ -309,11 +309,11 @@ ## Joyner-Boore Earthquake Attenuation Data ## ## @subsubheading Description - ## + ## ## Event data for 23 earthquakes in California, showing peak accelerations. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item event ## Event number @@ -326,28 +326,28 @@ ## @item accel ## Peak acceleration (g) ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration ## and velocity from strong-motion records including records from the 1979 ## Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo ## Park, CA. - ## + ## ## @subsubheading References - ## + ## ## Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground ## motion. @cite{Bulletin of the Seismological Society of America}, 72, S269–S268. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Port the example code from R - ## # It does coplot() and pairs(), which are higher-level plotting tools + ## # It does coplot() and pairs(), which are higher-level plotting tools ## # than core Octave provides. This could turn into a long example if we ## # just use base Octave here. ## @end example - ## + ## ## ## @end deftypefn function out = attenu () @@ -378,12 +378,12 @@ ## The Chatterjee-Price Attitude Data ## ## @subsubheading Description - ## + ## ## Aggregated data from a survey of clerical employees at a large financial ## organization. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item rating ## Overall rating. @@ -400,24 +400,24 @@ ## @item advance ## Advancement. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Chatterjee, S. and Price, B. (1977). @cite{Regression Analysis by Example}. New York: ## Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).) - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.attitude - ## + ## ## tblish.examples.plot_pairs (t); - ## + ## ## # TODO: Display table summary - ## + ## ## # TODO: Whatever those statistical linear-model plots are that R is doing - ## - ## + ## + ## ## @end example ## ## @end deftypefn @@ -449,33 +449,33 @@ ## Australian Population ## ## @subsubheading Description - ## + ## ## Numbers of Australian residents measured quarterly from March 1971 to March 1994. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item date ## The month of the observation. ## @item residents ## The number of residents. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Brockwell, P. J. and Davis, R. A. (1996). @cite{Introduction to Time Series and ## Forecasting}. New York: Springer-Verlag. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.austres - ## + ## ## plot (datenum (t.date), t.residents); ## datetick x ## xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents"); ## @end example - ## + ## ## ## @end deftypefn function out = austres () @@ -506,14 +506,14 @@ ## Body Temperature Series of Two Beavers ## ## @subsubheading Description - ## + ## ## Body temperature readings for two beavers. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item day - ## Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) + ## Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) ## and November 3–4 (beaver2). ## @item time ## Time of observation, in the form 0330 for 3:30am @@ -522,20 +522,20 @@ ## @item activ ## Indicator of activity outside the retreat. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. ## Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, ## L. and Greenhouse, J. (Eds.) (1994) @cite{Case Studies in Biometry}. New York: John Wiley ## and Sons. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: This example needs to be ported from R. ## @end example - ## + ## ## ## @end deftypefn function out = beavers () @@ -566,11 +566,11 @@ ## Sales Data with Leading Indicator ## ## @subsubheading Description - ## + ## ## Sales Data with Leading Indicator - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item record ## Index of the record. @@ -579,26 +579,26 @@ ## @item sales ## Sales volume. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## The data are given in Box & Jenkins (1976). Obtained from the Time Series Data ## Library at @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}. - ## + ## ## @subsubheading References - ## + ## ## Box, G. E. P. and Jenkins, G. M. (1976). @cite{Time Series Analysis, Forecasting and ## Control}. San Francisco: Holden-Day. p. 537. - ## + ## ## Brockwell, P. J. and Davis, R. A. (1991). @cite{Time Series: Theory and Methods}, ## Second edition. New York: Springer-Verlag. p. 414. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Come up with example code here ## @end example - ## + ## ## ## @end deftypefn function out = BJsales () @@ -629,33 +629,33 @@ ## Biochemical Oxygen Demand ## ## @subsubheading Description - ## + ## ## Contains biochemical oxygen demand versus time in an evaluation of water quality. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Time ## Time of the measurement (in days). ## @item demand ## Biochemical oxygen demand (mg/l). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Bates, D.M. and Watts, D.G. (1988). @cite{Nonlinear Regression Analysis and Its ## Applications}. New York: John Wiley & Sons. Appendix A1.4. - ## + ## ## Originally from: Marske (1967). @cite{Biochemical Oxygen Demand Data ## Interpretation Using Sum of Squares Surface}, M.Sc. Thesis, University of ## Wisconsin – Madison. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Port this example from R ## @end example - ## + ## ## ## @end deftypefn function out = BOD () @@ -686,47 +686,47 @@ ## Speed and Stopping Distances of Cars ## ## @subsubheading Description - ## + ## ## Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item speed ## Speed (mph). ## @item dist ## Stopping distance (ft). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Ezekiel, M. (1930). @cite{Methods of Correlation Analysis}. New York: Wiley. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example - ## + ## ## t = tblish.dataset.cars; - ## - ## + ## + ## ## # TODO: Add Lowess smoothed lines to the plots - ## + ## ## figure; ## plot (t.speed, t.dist, "o"); ## xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)"); ## title ("cars data"); - ## + ## ## figure; ## loglog (t.speed, t.dist, "o"); ## xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)"); ## title ("cars data (logarithmic scales)"); - ## + ## ## # TODO: Do the linear model plot - ## + ## ## # Polynomial regression ## figure; ## plot (t.speed, t.dist, "o"); @@ -740,10 +740,10 @@ ## y2 = polyval(P, x2, [], mu); ## plot (x2, y2); ## endfor - ## - ## + ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = cars () @@ -774,7 +774,7 @@ ## Weight versus age of chicks on different diets ## ## @subsubheading Format - ## + ## ## @table @code ## @item weight ## a numeric vector giving the body weight of the chick (gm). @@ -790,27 +790,27 @@ ## a factor with levels 1, ..., 4 indicating which experimental diet ## the chick received. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Crowder, M. and Hand, D. (1990). @cite{Analysis of Repeated Measures}. London: Chapman and ## Hall. (example 5.3) - ## + ## ## Hand, D. and Crowder, M. (1996), @cite{Practical Longitudinal Data Analysis}. London: Chapman ## and Hall. (table A.2) - ## + ## ## Pinheiro, J. C. and Bates, D. M. (2000) @cite{Mixed-effects Models in S and S-PLUS}. ## New York: Springer. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.ChickWeight - ## + ## ## tblish.examples.coplot (t, "Time", "weight", "Chick"); - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = ChickWeight () @@ -841,38 +841,38 @@ ## Chicken Weights by Feed Type ## ## @subsubheading Description - ## + ## ## An experiment was conducted to measure and compare the effectiveness of various ## feed supplements on the growth rate of chickens. - ## + ## ## Newly hatched chicks were randomly allocated into six groups, and each group ## was given a different feed supplement. Their weights in grams after six weeks ## are given along with feed types. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item weight ## Chick weight at six weeks (gm). ## @item feed ## Feed type. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Anonymous (1948) @cite{Biometrika}, 35, 214. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @code{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # This example requires the statistics package from Octave Forge - ## + ## ## t = tblish.dataset.chickwts - ## + ## ## # Boxplot by group ## figure ## g = groupby (t, "feed", @{ @@ -881,12 +881,12 @@ ## boxplot (g.weight, 1); ## xlabel ("feed"); ylabel ("Weight at six weeks (gm)"); ## xticklabels ([@{""@} cellstr(g.feed')]); - ## + ## ## # Linear model ## # TODO: This linear model thing and anova - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = chickwts () @@ -917,49 +917,49 @@ ## Mauna Loa Atmospheric CO2 Concentration ## ## @subsubheading Description - ## + ## ## Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and ## reported in the preliminary 1997 SIO manometric mole fraction scale. Contains ## monthly observations from 1959 to 1997. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item date ## Date of the month of the observation, as datetime. ## @item co2 ## CO2 concentration (ppm). ## @end table - ## + ## ## @subsubheading Details - ## + ## ## The values for February, March and April of 1964 were missing and have ## been obtained by interpolating linearly between the values for January ## and May of 1964. - ## + ## ## @subsubheading Source - ## + ## ## Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography ## (SIO), University of California, La Jolla, California USA 92093-0220. - ## + ## ## @url{ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2}. - ## + ## ## @subsubheading References - ## + ## ## Cleveland, W. S. (1993). @code{Visualizing Data}. New Jersey: Summit Press. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.co2; - ## + ## ## plot (datenum (t.date), t.co2); ## datetick ("x"); ## xlabel ("Time"); ylabel ("Atmospheric concentration of CO2"); ## title ("co2 data set"); - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = co2 () @@ -990,16 +990,16 @@ ## Student’s 3000 Criminals Data ## ## @subsubheading Description - ## + ## ## Data of 3000 male criminals over 20 years old undergoing their sentences in the ## chief prisons of England and Wales. - ## + ## ## @subsubheading Format - ## + ## ## This dataset contains three separate variables. The @code{finger_length} and ## @code{body_height} variables correspond to the rows and columns of the ## @code{count} matrix. - ## + ## ## @table @code ## @item finger_length ## Midpoints of intervals of finger lengths (cm). @@ -1008,13 +1008,13 @@ ## @item count ## Number of prisoners in this bin. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote ## (on page 13) at the beginning of section VI entitled Practical Test of the ## forgoing Equations: - ## + ## ## “Before I had succeeded in solving my problem analytically, I had endeavoured ## to do so empirically. The material used was a correlation table containing ## the height and left middle finger measurements of 3000 criminals, from a @@ -1023,45 +1023,45 @@ ## shuffled and drawn at random. As each card was drawn its numbers were written ## down in a book, which thus contains the measurements of 3000 criminals in a ## random order. Finally, each consecutive set of 4 was taken as a sample—750 - ## in all—and the mean, standard deviation, and correlation of each sample + ## in all—and the mean, standard deviation, and correlation of each sample ## etermined. The difference between the mean of each sample and the mean of ## the population was then divided by the standard deviation of the sample, giving ## us the z of Section III.” - ## + ## ## The table is in fact page 216 and not page 219 in MacDonell(1902). In the ## MacDonell table, the middle finger lengths were given in mm and the heights ## in feet/inches intervals, they are both converted into cm here. The midpoints ## of intervals were used, e.g., where MacDonell has “4' 7"9/16 -- 8"9/16”, we ## have 142.24 which is 2.54*56 = 2.54*(4' 8"). - ## + ## ## MacDonell credited the source of data (page 178) as follows: “The data on which ## the memoir is based were obtained, through the kindness of Dr Garson, from the ## Central Metric Office, New Scotland Yard... He pointed out on page 179 that: ## “The forms were drawn at random from the mass on the office shelves; we are ## therefore dealing with a random sampling.” - ## + ## ## @subsubheading Source - ## + ## ## @url{http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt} thanks to Jean R. ## Lobry and Anne-Béatrice Dufour. - ## + ## ## @subsubheading References - ## + ## ## Garson, J.G. (1900). The metric system of identification of criminals, as used ## in in Great Britain and Ireland. @cite{The Journal of the Anthropological ## Institute of Great Britain and Ireland}, 30, 161–198. - ## + ## ## MacDonell, W.R. (1902). On criminal anthropometry and the identification of ## criminals. @cite{Biometrika}, 1(2), 177–227. - ## + ## ## Student (1908). The probable error of a mean. @code{Biometrika}, 6, 1–25. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Port this from R ## @end example - ## + ## ## ## @end deftypefn function out = crimtab () @@ -1092,32 +1092,32 @@ ## Google Search popularity for "cupcake", 2004-2019 ## ## @subsubheading Description - ## + ## ## Monthly popularity of worldwide Google search results for "cupcake", 2004-2019. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Month ## Month when searches took place ## @item Cupcake ## An indicator of search volume, in unknown units ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Google Trends, @url{https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all}, ## retrieved 2019-05-04 by Andrew Janke. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.cupcake ## plot(datenum(t.Month), t.Cupcake) ## title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric") - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = cupcake () @@ -1148,37 +1148,37 @@ ## Yearly Numbers of Important Discoveries ## ## @subsubheading Description - ## + ## ## The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item year ## Year. ## @item discoveries ## Number of “great” discoveries that year. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## @cite{The World Almanac and Book of Facts}, 1975 Edition, pages 315–318. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.discoveries; - ## + ## ## plot (t.year, t.discoveries); ## xlabel ("Time"); ylabel ("Number of important discoveries"); ## title ("discoveries data set"); - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = discoveries () @@ -1209,11 +1209,11 @@ ## Elisa assay of DNase ## ## @subsubheading Description - ## + ## ## Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Run ## Ordered @code{categorical} indicating the assay run. @@ -1222,28 +1222,28 @@ ## @item density ## Measured optical density in the assay (dimensionless). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Davidian, M. and Giltinan, D. M. (1995). @cite{Nonlinear Models for Repeated ## Measurement Data}. London: Chapman & Hall. (section 5.2.4, p. 134) - ## + ## ## Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in S and ## S-PLUS}. New York: Springer. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.DNase; - ## + ## ## # TODO: Port this from R - ## + ## ## tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @@scatter); ## tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @@loglog, ... ## "PlotArgs", @{"o"@}); - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = DNase () @@ -1274,11 +1274,11 @@ ## Smoking, Alcohol and Esophageal Cancer ## ## @subsubheading Description - ## + ## ## Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item item ## Age group (years). @@ -1291,25 +1291,25 @@ ## @item ncontrols ## Number of controls ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Breslow, N. E. and Day, N. E. (1980) @cite{Statistical Methods in Cancer Research. ## Volume 1: The Analysis of Case-Control Studies}. Oxford: IARC Lyon / Oxford University Press. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Port this from R - ## + ## ## # TODO: Port the anova output - ## + ## ## # TODO: Port the fancy plot ## # This involves a "mosaic plot", which is not supported by Octave, so this will ## # take some work. - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = esoph () @@ -1340,13 +1340,13 @@ ## Conversion Rates of Euro Currencies ## ## @subsubheading Description - ## + ## ## Conversion rates between the various Euro currencies. - ## + ## ## @subsubheading Format - ## + ## ## This data comes in two separate variables. - ## + ## ## @table @code ## @item euro ## An 11-long vector of the value of 1 Euro in all participating currencies. @@ -1355,9 +1355,9 @@ ## @item euro_date ## The date upon which these Euro conversion rates were fixed. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## The data set euro contains the value of 1 Euro in all currencies participating ## in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, ## German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, @@ -1365,25 +1365,25 @@ ## Portuguese Escudo PTE). These conversion rates were fixed by the European ## Union on December 31, 1998. To convert old prices to Euro prices, divide by the ## respective rate and round to 2 digits. - ## + ## ## @subsubheading Source - ## + ## ## Unknown. - ## + ## ## This example data set was derived from the R 3.6.0 example datasets, and they ## do not specify a source. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Port this from R - ## + ## ## # TODO: Example conversion - ## + ## ## # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = euro () @@ -1414,31 +1414,31 @@ ## Distances Between European Cities and Between US Cities ## ## @subsubheading Description - ## + ## ## @code{eurodist} gives road distances (in km) between 21 cities in Europe. The ## data are taken from a table in The Cambridge Encyclopaedia. - ## + ## ## @code{UScitiesD} gives “straight line” distances between 10 cities in the US. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item eurodist ## ????? ## @end table - ## + ## ## TODO: Finish this. - ## + ## ## @subsubheading Source - ## + ## ## Crystal, D. Ed. (1990). @cite{The Cambridge Encyclopaedia}. Cambridge: ## Cambridge University Press. - ## + ## ## The US cities distances were provided by Pierre Legendre. - ## + ## ## @subsubheading Examples - ## - ## + ## + ## ## ## @end deftypefn function out = eurodist () @@ -1469,50 +1469,50 @@ ## Daily Closing Prices of Major European Stock Indices ## ## @subsubheading Description - ## + ## ## Contains the daily closing prices of major European stock indices: Germany DAX ## (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in ## business time, i.e., weekends and holidays are omitted. - ## + ## ## @subsubheading Format - ## + ## ## A multivariate time series with 1860 observations on 4 variables. - ## + ## ## The starting date is the 130th day of 1991, with a frequency of 260 observations ## per year. - ## + ## ## @subsubheading Source - ## + ## ## The data were kindly provided by Erste Bank AG, Vienna, Austria. - ## + ## ## @subsubheading Examples - ## + ## ## @example - ## + ## ## t = tblish.dataset.EuStockMarkets; - ## + ## ## # The fact that we're doing this munging means that table might have ## # been the wrong structure for this data in the first place - ## + ## ## t2 = removevars (t, "day"); ## index_names = t2.Properties.VariableNames; ## day = 1:height (t2); ## price = table2array (t2); - ## + ## ## price0 = price(1,:); - ## + ## ## rel_price = price ./ repmat (price0, [size(price,1) 1]); - ## + ## ## figure; ## plot (day, rel_price); ## legend (index_names); ## xlabel ("Business day"); ## ylabel ("Relative price"); - ## - ## - ## + ## + ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = EuStockMarkets () @@ -1543,50 +1543,50 @@ ## Old Faithful Geyser Data ## ## @subsubheading Description - ## + ## ## Waiting time between eruptions and the duration of the eruption for the Old ## Faithful geyser in Yellowstone National Park, Wyoming, USA. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item eruptions ## Eruption time (mins). ## @item waiting ## Waiting time to next eruption (mins). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## W. Härdle. - ## + ## ## @subsubheading References - ## + ## ## Härdle, W. (1991). @cite{Smoothing Techniques with Implementation in S}. New York: ## Springer. - ## + ## ## Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old ## Faithful geyser. @cite{Applied Statistics}, 39, 357–365. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.faithful; - ## + ## ## % Munge the data, rounding eruption time to the second ## e60 = 60 * t.eruptions; ## ne60 = round (e60); ## # TODO: Port zapsmall to Octave ## eruptions = ne60 / 60; ## # TODO: Display mean relative difference and bins summary - ## + ## ## % Histogram of rounded eruption times ## figure ## hist (ne60, max (ne60)) ## xlabel ("Eruption time (sec)") ## ylabel ("n") ## title ("faithful data: Eruptions of Old Faithful") - ## + ## ## % Scatter plot of eruption time vs waiting time ## figure ## scatter (t.eruptions, t.waiting) @@ -1595,7 +1595,7 @@ ## title ("faithful data: Eruptions of Old Faithful") ## # TODO: Port Lowess smoothing to Octave ## @end example - ## + ## ## ## @end deftypefn function out = faithful () @@ -1626,14 +1626,14 @@ ## Determination of Formaldehyde ## ## @subsubheading Description - ## + ## ## These data are from a chemical experiment to prepare a standard curve for the ## determination of formaldehyde by the addition of chromatropic acid and ## concentrated sulphuric acid and the reading of the resulting purple color on ## a spectrophotometer. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item record ## Observation record number. @@ -1642,32 +1642,32 @@ ## @item optden ## Optical Density ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Bennett, N. A. and N. L. Franklin (1954). @cite{Statistical Analysis in ## Chemistry and the Chemical Industry}. New York: Wiley. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.Formaldehyde; - ## + ## ## figure ## scatter (t.carb, t.optden) ## % TODO: Add a linear model line ## xlabel ("Carbohydrate (ml)") ## ylabel ("Optical Density") ## title ("Formaldehyde data") - ## + ## ## % TODO: Add linear model summary output ## % TOD: Add linear model summary plot ## @end example - ## + ## ## ## @end deftypefn function out = Formaldehyde () @@ -1698,15 +1698,15 @@ ## Freeny's Revenue Data ## ## @subsubheading Description - ## + ## ## Freeny’s data on quarterly revenue and explanatory variables. - ## + ## ## @subsubheading Format - ## + ## ## Freeny’s dataset consists of one observed dependent variable ## (revenue) and four explanatory variables (lagged quartery ## revenue, price index, income level, and market potential). - ## + ## ## @table @code ## @item date ## Start date of the quarter for the observation. @@ -1722,32 +1722,32 @@ ## @item market_potential ## ??? TODO: Fill this in ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Freeny, A. E. (1977). @cite{A Portable Linear Regression Package with Test ## Programs}. Bell Laboratories memorandum. - ## + ## ## @subsubheading References - ## + ## ## Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S ## Language}. Monterey: Wadsworth & Brooks/Cole. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.freeny; - ## + ## ## summary(t) - ## + ## ## tblish.examples.plot_pairs (removevars (t, "date")) - ## + ## ## # TODO: Create linear model and print summary - ## + ## ## # TODO: Linear model plot - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = freeny () @@ -1778,13 +1778,13 @@ ## Hair and Eye Color of Statistics Students ## ## @subsubheading Description - ## + ## ## Distribution of hair and eye color and sex in 592 statistics students. - ## + ## ## @subsubheading Format - ## + ## ## This data set comes in multiple variables - ## + ## ## @table @code ## @item n ## A 3-dimensional array containing the counts of students in each bucket. It @@ -1796,53 +1796,53 @@ ## @item sex ## Sexes for the indexes along dimension 3. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## The Hair x Eye table comes rom a survey of students at the University of ## Delaware reported by Snee (1974). The split by Sex was added by Friendly ## (1992a) for didactic purposes. - ## + ## ## This data set is useful for illustrating various techniques for the analysis ## of contingency tables, such as the standard chi-squared test or, more ## generally, log-linear modelling, and graphical methods such as mosaic plots, ## sieve diagrams or association plots. - ## + ## ## @subsubheading Source - ## + ## ## @url{http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas} - ## - ## Snee (1974) gives the two-way table aggregated over Sex. The Sex split of + ## + ## Snee (1974) gives the two-way table aggregated over Sex. The Sex split of ## the ‘Brown hair, Brown eye’ cell was changed to agree with that used by ## Friendly (2000). - ## + ## ## @subsubheading References - ## + ## ## Snee, R. D. (1974). Graphical display of two-way contingency tables. ## @cite{The American Statistician}, 28, 9–12. - ## + ## ## Friendly, M. (1992a). Graphical methods for categorical data. @cite{SAS User ## Group International Conference Proceedings}, 17, 190–200. ## @url{http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html} - ## + ## ## Friendly, M. (1992b). Mosaic displays for loglinear models. @cite{Proceedings ## of the Statistical Graphics Section}, American Statistical Association, pp. ## 61–68. @url{http://www.math.yorku.ca/SCS/Papers/asa92.html} - ## + ## ## Friendly, M. (2000). @cite{Visualizing Categorical Data}. SAS Institute, ## ISBN 1-58025-660-0. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.HairEyeColor - ## + ## ## # TODO: Aggregate over sex and display a table of counts - ## + ## ## # TODO: Port mosaic plot to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = HairEyeColor () @@ -1873,12 +1873,12 @@ ## Harman Example 2.3 ## ## @subsubheading Description - ## + ## ## A correlation matrix of eight physical measurements on 305 girls between ## ages seven and seventeen. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item cov ## An 8-by-8 correlation matrix. @@ -1886,21 +1886,21 @@ ## Names of the variables corresponding to the indexes of the correlation matrix’s ## dimensions. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Harman, H. H. (1976). @cite{Modern Factor Analysis}, Third Edition Revised. ## Chicago: University of Chicago Press. Table 2.3. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.Harman23cor; - ## + ## ## # TODO: Port factanal to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = Harman23cor () @@ -1931,12 +1931,12 @@ ## Harman Example 7.4 ## ## @subsubheading Description - ## + ## ## A correlation matrix of 24 psychological tests given to 145 seventh and ## eighth-grade children in a Chicago suburb by Holzinger and Swineford. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item cov ## A 2-dimensional correlation matrix. @@ -1944,21 +1944,21 @@ ## Names of the variables corresponding to the indexes along the dimensions of ## @code{cov}. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Harman, H. H. (1976). @cite{Modern Factor Analysis}, Third Edition ## Revised. Chicago: University of Chicago Press. Table 7.4. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.Harman74cor; - ## + ## ## # TODO: Port factanal to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = Harman74cor () @@ -1989,12 +1989,12 @@ ## Pharmacokinetics of Indomethacin ## ## @subsubheading Description - ## + ## ## Data on the pharmacokinetics of indometacin (or, older spelling, ## ‘indomethacin’). - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Subject ## Subject identifier. @@ -2003,23 +2003,23 @@ ## @item conc ## Plasma concentration of indomethacin (mcg/ml). ## @end table - ## + ## ## @subsubheading Details - ## + ## ## Each of the six subjects were given an intravenous injection of indometacin. - ## + ## ## @subsubheading Source - ## + ## ## Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of ## Indomethacin absorption, elimination, and enterohepatic circulation in man. ## @cite{Journal of Pharmacokinetics and Biopharmaceutics} 4, 255–280. - ## + ## ## Davidian, M. and Giltinan, D. M. (1995). @cite{Nonlinear Models for Repeated ## Measurement Data}. London: Chapman & Hall. (section 5.2.4, p. 129) - ## + ## ## Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in S and ## S-PLUS}. New York: Springer. - ## + ## ## ## @end deftypefn function out = Indometh () @@ -2050,12 +2050,12 @@ ## Infertility after Spontaneous and Induced Abortion ## ## @subsubheading Description - ## + ## ## This is a matched case-control study dating from before the availability of ## conditional logistic regression. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item education ## Index of the record. @@ -2074,24 +2074,24 @@ ## @item pooled_stratum ## Stratum number. ## @end table - ## + ## ## @subsubheading Note - ## + ## ## One case with two prior spontaneous abortions and two prior induced abortions is omitted. - ## + ## ## @subsubheading Source - ## + ## ## Trichopoulos et al (1976). @cite{Br. J. of Obst. and Gynaec.} 83, 645–650. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.infert; - ## + ## ## # TODO: Port glm() (generalized linear model) stuff to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = infert () @@ -2122,39 +2122,39 @@ ## Effectiveness of Insect Sprays ## ## @subsubheading Description - ## + ## ## The counts of insects in agricultural experimental units treated with different ## insecticides. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item spray ## The type of spray. ## @item count ## Insect count. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Beall, G., (1942). The Transformation of data from entomological field ## experiments. @cite{Biometrika}, 29, 243–262. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.InsectSprays; - ## + ## ## # TODO: boxplot - ## + ## ## # TODO: AOV plots - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = InsectSprays () @@ -2185,11 +2185,11 @@ ## The Fisher Iris dataset: measurements of various flowers ## ## @subsubheading Description - ## + ## ## This is the classic Fisher Iris dataset. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Species ## The species of flower being measured. @@ -2202,27 +2202,27 @@ ## @item PetalWidth ## Width of petals, in centimeters. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## @url{http://archive.ics.uci.edu/ml/datasets/Iris} - ## + ## ## @subsubheading References - ## + ## ## @url{https://en.wikipedia.org/wiki/Iris_flower_data_set} - ## + ## ## Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. - ## Annals of Eugenics, 7, Part II, 179-188. also in @cite{Contributions + ## Annals of Eugenics, 7, Part II, 179-188. also in @cite{Contributions ## to Mathematical Statistics} (John Wiley, NY, 1950). - ## + ## ## Duda, R.O., & Hart, P.E. (1973). @cite{Pattern Classification and Scene Analysis}. ## (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218. - ## + ## ## The data were collected by Anderson, Edgar (1935). The irises of the Gaspe ## Peninsula. @cite{Bulletin of the American Iris Society}, 59, 2–5. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Port this example from R ## @end example @@ -2256,36 +2256,36 @@ ## Areas of the World's Major Landmasses ## ## @subsubheading Description - ## + ## ## The areas in thousands of square miles of the landmasses which exceed 10,000 ## square miles. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item name ## The name of the island. ## @item area ## The area, in thousands of square miles. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## @cite{The World Almanac and Book of Facts}, 1975, page 406. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.islands; - ## + ## ## # TODO: Port dot chart to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = islands () @@ -2316,32 +2316,32 @@ ## Quarterly Earnings per Johnson & Johnson Share ## ## @subsubheading Description - ## + ## ## Quarterly earnings (dollars) per Johnson & Johnson share 1960–80. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item date ## Start date of the quarter. ## @item earnings ## Earnings per share (USD). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Shumway, R. H. and Stoffer, D. S. (2000). @cite{Time Series Analysis and its ## Applications}. Second Edition. New York: Springer. Example 1.1. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.JohnsonJohnson - ## + ## ## # TODO: Yikes, look at all those plots. Port them to Octave. - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = JohnsonJohnson () @@ -2372,38 +2372,38 @@ ## Level of Lake Huron 1875-1972 ## ## @subsubheading Description - ## + ## ## Annual measurements of the level, in feet, of Lake Huron 1875–1972. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item year ## Year of the measurement ## @item level ## Lake level (ft). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Brockwell, P. J. and Davis, R. A. (1991). @cite{Time Series and Forecasting ## Methods}. Second edition. New York: Springer. Series A, page 555. - ## + ## ## Brockwell, P. J. and Davis, R. A. (1996). @cite{Introduction to Time Series ## and Forecasting}. New York: Springer. Sections 5.1 and 7.6. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.LakeHuron; - ## + ## ## plot (t.year, t.level) ## xlabel ("Year") ## ylabel ("Lake level (ft)") ## title ("Level of Lake Huron") - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = LakeHuron () @@ -2434,34 +2434,34 @@ ## Luteinizing Hormone in Blood Samples ## ## @subsubheading Description - ## + ## ## A regular time series giving the luteinizing hormone in blood samples at 10 ## minute intervals from a human female, 48 samples. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item sample ## The number of the observation. ## @item lh ## Level of luteinizing hormone. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## P.J. Diggle (1990). @cite{Time Series: A Biostatistical Introduction}. Oxford. ## Table A.1, series 3. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.lh; - ## + ## ## plot (t.sample, t.lh); ## xlabel ("Sample Number"); ## ylabel ("lh level"); ## @end example - ## + ## ## ## @end deftypefn function out = lh () @@ -2492,11 +2492,11 @@ ## Intercountry Life-Cycle Savings Data ## ## @subsubheading Description - ## + ## ## Data on the savings ratio 1960–1970. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item country ## Name of the country. @@ -2511,9 +2511,9 @@ ## @item ddpi ## Percent growth rate of dpi. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## Under the life-cycle savings hypothesis as developed by Franco Modigliani, the ## savings ratio (aggregate personal saving divided by disposable income) is ## explained by per-capita disposable income, the percentage rate of change in @@ -2521,31 +2521,31 @@ ## of population less than 15 years old and the percentage of the population over ## 75 years old. The data are averaged over the decade 1960–1970 to remove the ## business cycle or other short-term fluctuations. - ## + ## ## @subsubheading Source - ## + ## ## The data were obtained from Belsley, Kuh and Welsch (1980). They in turn ## obtained the data from Sterling (1977). - ## + ## ## @subsubheading References - ## + ## ## Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of ## Technology. - ## + ## ## Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). @cite{Regression Diagnostics}. ## New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.LifeCycleSavings; - ## + ## ## # TODO: linear model - ## + ## ## # TODO: pairs plot with Lowess smoothed line - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = LifeCycleSavings () @@ -2576,11 +2576,11 @@ ## Growth of Loblolly pine trees ## ## @subsubheading Description - ## + ## ## Records of the growth of Loblolly pine trees. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item height ## Tree height (ft). @@ -2589,31 +2589,31 @@ ## @item Seed ## Seed source for the tree. Ordering is according to increasing maximum height. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying ## capacity. @cite{Proceedings of the Statistical Computing Section}, American ## Statistical Association, 340–343. - ## + ## ## Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in S and ## S-PLUS}. New York: Springer. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.Loblolly; - ## + ## ## t2 = t(t.Seed == "329",:); ## scatter (t2.age, t2.height) ## xlabel ("Tree age (yr)"); ## ylabel ("Tree height (ft)"); ## title ("Loblolly data and fitted curve (Seed 329 only)") - ## + ## ## # TODO: Compute and plot fitted curve - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = Loblolly () @@ -2644,12 +2644,12 @@ ## Longley’s Economic Regression Data ## ## @subsubheading Description - ## + ## ## A macroeconomic data set which provides a well-known example for a highly ## collinear regression. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Year ## The year. @@ -2666,28 +2666,28 @@ ## @item Employed ## Number of people employed. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## J. W. Longley (1967). An appraisal of least-squares programs from the point of ## view of the user. @cite{Journal of the American Statistical Association}, 62, ## 819–841. - ## + ## ## @subsubheading References - ## + ## ## Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S ## Language}. Monterey: Wadsworth & Brooks/Cole. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.longley; - ## + ## ## # TODO: Linear model ## # TODO: opar plot - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = longley () @@ -2718,46 +2718,46 @@ ## Annual Canadian Lynx trappings 1821-1934 ## ## @subsubheading Description - ## + ## ## Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell ## & Davis (1991), this appears to be the series considered by Campbell & Walker ## (1977). - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item year ## Year of the record. ## @item lynx ## Number of lynx trapped. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Brockwell, P. J. and Davis, R. A. (1991). @cite{Time Series and Forecasting ## Methods}. Second edition. New York: Springer. Series G (page 557). - ## + ## ## @subsubheading References - ## + ## ## Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S ## Language}. Monterey: Wadsworth & Brooks/Cole. - ## + ## ## Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on ## the Mackenzie River series of annual Canadian lynx trappings for the years ## 1821–1934 and a new analysis. @cite{Journal of the Royal Statistical Society - ## series A}, 140, 411–431. - ## + ## series A}, 140, 411–431. + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.lynx; - ## + ## ## plot (t.year, t.lynx); ## xlabel ("Year"); ## ylabel ("Lynx Trapped"); - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = lynx () @@ -2788,14 +2788,14 @@ ## Michelson Speed of Light Data ## ## @subsubheading Description - ## + ## ## A classical data of Michelson (but not this one with Morley) on measurements ## done in 1879 on the speed of light. The data consists of five experiments, ## each consisting of 20 consecutive ‘runs’. The response is the speed of ## light measurement, suitably coded (km/sec, with 299000 subtracted). - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Expt ## The experiment number, from 1 to 5. @@ -2804,34 +2804,34 @@ ## @item Speed ## Speed-of-light measurement. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## The data is here viewed as a randomized block experiment with @code{experiment} ## and @code{run} as the factors. @code{run} may also be considered a quantitative ## variate to account for linear (or polynomial) changes in the measurement over ## the course of a single experiment. - ## + ## ## @subsubheading Source - ## + ## ## A. J. Weekes (1986). @cite{A Genstat Primer}. London: Edward Arnold. - ## + ## ## S. M. Stigler (1977). Do robust estimators work with real data? @cite{Annals ## of Statistics} 5, 1055–1098. (See Table 6.) - ## + ## ## A. A. Michelson (1882). Experimental determination of the velocity of ## light made at the United States Naval Academy, Annapolis. @cite{Astronomic ## Papers}, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.). - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.morley; - ## + ## ## # TODO: Port to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = morley () @@ -2862,13 +2862,13 @@ ## Motor Trend 1974 Car Road Tests ## ## @subsubheading Description - ## + ## ## The data was extracted from the 1974 Motor Trend US magazine, and ## comprises fuel consumption and 10 aspects of automobile design and ## performance for 32 automobiles (1973–74 models). - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item mpg ## Fuel efficiency in miles/gallon @@ -2893,22 +2893,22 @@ ## @item carb ## Number of carburetors ## @end table - ## + ## ## @subsubheading Note - ## + ## ## Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking ## [original transcriber]’s noncrucial coding of the Mazda’s rotary engine ## as a straight six-cylinder engine and the Porsche’s flat engine as a V ## engine, as well as the inclusion of the diesel Mercedes 240D, have been ## retained to enable direct comparisons to be made with previous analyses.” - ## + ## ## @subsubheading Source - ## + ## ## Henderson and Velleman (1981). Building multiple regression models ## interactively. @cite{Biometrics}, 37, 391–411. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Port this example from R ## @end example @@ -2942,38 +2942,38 @@ ## Average Yearly Temperatures in New Haven ## ## @subsubheading Description - ## + ## ## The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, ## from 1912 to 1971. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item year ## Year of the observation. ## @item temp ## Mean annual temperature (degrees F). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Vaux, J. E. and Brinker, N. B. (1972) @cite{Cycles}, 1972, 117–121. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.nhtemp; - ## + ## ## plot (t.year, t.temp); ## title ("nhtemp data"); ## xlabel ("Mean annual temperature in New Haven, CT (deg. F)"); - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = nhtemp () @@ -3004,44 +3004,44 @@ ## Flow of the River Nile ## ## @subsubheading Description - ## + ## ## Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), ## 1871–1970, in m^3, “with apparent changepoint near 1898” ## (Cobb(1978), Table 1, p.249). - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item year ## Year of the record. ## @item flow ## Annual flow (cubic meters). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Durbin, J. and Koopman, S. J. (2001). @cite{Time Series Analysis by State ## Space Methods}. Oxford: Oxford University Press. @url{http://www.ssfpack.com/DKbook.html} - ## + ## ## @subsubheading References - ## + ## ## Balke, N. S. (1993). Detecting level shifts in time series. @cite{Journal of ## Business and Economic Statistics}, 11, 81–92. - ## + ## ## Cobb, G. W. (1978). The problem of the Nile: conditional solution to a ## change-point problem. @cite{Biometrika} 65, 243–51. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.Nile; - ## + ## ## figure ## plot (t.year, t.flow); - ## + ## ## # TODO: Port the rest of the example to Octave ## @end example - ## + ## ## ## @end deftypefn function out = Nile () @@ -3072,12 +3072,12 @@ ## Average Monthly Temperatures at Nottingham, 1920-1939 ## ## @subsubheading Description - ## + ## ## A time series object containing average air temperatures at ## Nottingham Castle in degrees Fahrenheit for 20 years. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item record ## Index of the record. @@ -3086,18 +3086,18 @@ ## @item sales ## Sales volume. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Anderson, O. D. (1976). @cite{Time Series Analysis and Forecasting: ## The Box-Jenkins approach}. London: Butterworths. Series R. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Come up with example code here ## @end example - ## + ## ## ## @end deftypefn function out = nottem () @@ -3128,13 +3128,13 @@ ## Classical N, P, K Factorial Experiment ## ## @subsubheading Description - ## + ## ## A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment ## on the growth of peas conducted on 6 blocks. Each half of a fractional ## factorial design confounding the NPK interaction was used on 3 of the plots. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item block ## Which block (1 to 6). @@ -3147,25 +3147,25 @@ ## @item yield ## Yield of peas, in pounds/plot. Plots were 1/70 acre. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Imperial College, London, M.Sc. exercise sheet. - ## + ## ## @subsubheading References - ## + ## ## Venables, W. N. and Ripley, B. D. (2002). @cite{Modern Applied Statistics ## with S}. Fourth edition. New York: Springer. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.npk; - ## + ## ## # TODO: Port aov() and LM to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = npk () @@ -3196,28 +3196,28 @@ ## Occupational Status of Fathers and their Sons ## ## @subsubheading Description - ## + ## ## Cross-classification of a sample of British males according to each subject’s ## occupational status and his father’s occupational status. - ## + ## ## @subsubheading Format - ## + ## ## An 8-by-8 matrix of counts, with classifying fators @code{origin} (father’s ## occupational status, levels 1:8) and @code{destination} (son’s ## occupational status, levels 1:8). - ## + ## ## @subsubheading Source - ## + ## ## Goodman, L. A. (1979). Simple Models for the Analysis of Association in ## Cross-Classifications having Ordered Categories. @cite{J. Am. Stat. ## Assoc.}, 74 (367), 537–552. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Come up with example code here ## @end example - ## + ## ## ## @end deftypefn function out = occupationalStatus () @@ -3248,11 +3248,11 @@ ## Growth of Orange Trees ## ## @subsubheading Description - ## + ## ## Records of the growth of orange trees. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Tree ## A categorical indicating on which tree the measurement is made. @@ -3263,31 +3263,31 @@ ## Trunk circumference (mm). ## This is probably “circumference at breast height”, a standard measurement in forestry. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## The data are given in Box & Jenkins (1976). Obtained from the Time Series Data ## Library at @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}. - ## + ## ## @subsubheading References - ## + ## ## Draper, N. R. and Smith, H. (1998). @cite{Applied Regression Analysis (3rd ed)}. ## New York: Wiley. (exercise 24.N). - ## + ## ## Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in S and ## S-PLUS}. New York: Springer. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.Orange; - ## + ## ## # TODO: Port coplot to Octave - ## + ## ## # TODO: Linear model - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = Orange () @@ -3318,12 +3318,12 @@ ## Potency of Orchard Sprays ## ## @subsubheading Description - ## + ## ## An experiment was conducted to assess the potency of various constituents ## of orchard sprays in repelling honeybees, using a Latin square design. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item rowpos ## Row of the design. @@ -3334,43 +3334,43 @@ ## @item decrease ## Response. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## Individual cells of dry comb were filled with measured amounts of lime ## sulphur emulsion in sucrose solution. Seven different concentrations of lime ## sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive ## factors of 1/5 were used as well as a solution containing no lime sulphur. - ## + ## ## The responses for the different solutions were obtained by releasing 100 ## bees into the chamber for two hours, and then measuring the decrease in volume ## of the solutions in the various cells. - ## + ## ## An 8 x 8 Latin square design was used and the treatments were coded as follows: - ## + ## ## A – highest level of lime sulphur ## B – next highest level of lime sulphur ## @dots{} ## G – lowest level of lime sulphur ## H – no lime sulphur - ## + ## ## @subsubheading Source - ## + ## ## Finney, D. J. (1947). @cite{Probit Analysis}. Cambridge. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.OrchardSprays; - ## + ## ## tblish.examples.plot_pairs (t); - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = OrchardSprays () @@ -3401,33 +3401,33 @@ ## Results from an Experiment on Plant Growth ## ## @subsubheading Description - ## + ## ## Results from an experiment to compare yields (as measured by dried weight of ## plants) obtained under a control and two different treatment conditions. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item group ## Treatment condition group. ## @item weight ## Weight of plants. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Dobson, A. J. (1983). @cite{An Introduction to Statistical Modelling}. ## London: Chapman and Hall. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.PlantGrowth; - ## + ## ## # TODO: Port anova to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = PlantGrowth () @@ -3458,36 +3458,36 @@ ## Annual Precipitation in US Cities ## ## @subsubheading Description - ## + ## ## The average amount of precipitation (rainfall) in inches for each of 70 United ## States (and Puerto Rico) cities. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item city ## City observed. ## @item precip ## Annual precipitation (in). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## @cite{Statistical Abstracts of the United States}, 1975. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.precip; - ## + ## ## # TODO: Port dot plot to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = precip () @@ -3518,46 +3518,46 @@ ## Quarterly Approval Ratings of US Presidents ## ## @subsubheading Description - ## + ## ## The (approximately) quarterly approval rating for the President of the United ## States from the first quarter of 1945 to the last quarter of 1974. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item date ## Approximate date of the observation. ## @item approval ## Approval rating (%). ## @end table - ## + ## ## @subsubheading Details - ## + ## ## The data are actually a fudged version of the approval ratings. See McNeil’s book ## for details. - ## + ## ## @subsubheading Source - ## + ## ## The Gallup Organisation. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.presidents; - ## + ## ## figure ## plot (datenum (t.date), t.approval) ## datetick ("x") ## xlabel ("Date") ## ylabel ("Approval rating (%)") ## title ("presidents data") - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = presidents () @@ -3588,47 +3588,47 @@ ## Vapor Pressure of Mercury as a Function of Temperature ## ## @subsubheading Description - ## + ## ## Data on the relation between temperature in degrees Celsius and vapor pressure ## of mercury in millimeters (of mercury). - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item temperature ## Temperature (deg C). ## @item pressure ## Pressure (mm Hg). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Weast, R. C., ed. (1973). @cite{Handbook of Chemistry and Physics}. Cleveland: CRC Press. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.pressure; - ## + ## ## figure ## plot (t.temperature, t.pressure) ## xlabel ("Temperature (deg C)") ## ylabel ("Pressure (mm of Hg)") ## title ("pressure data: Vapor Pressure of Mercury") - ## + ## ## figure ## semilogy (t.temperature, t.pressure) ## xlabel ("Temperature (deg C)") ## ylabel ("Pressure (mm of Hg)") ## title ("pressure data: Vapor Pressure of Mercury") - ## - ## + ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = pressure () @@ -3659,12 +3659,12 @@ ## Reaction Velocity of an Enzymatic Reaction ## ## @subsubheading Description - ## + ## ## Reaction velocity versus substrate concentration in an enzymatic reaction ## involving untreated cells or cells treated with Puromycin. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item state ## Whether the cell was treated. @@ -3673,38 +3673,38 @@ ## @item rate ## Instantaneous reaction rates (counts/min/min). ## @end table - ## + ## ## @subsubheading Details - ## + ## ## Data on the velocity of an enzymatic reaction were obtained by Treloar ## (1974). The number of counts per minute of radioactive product from the ## reaction was measured as a function of substrate concentration in parts per ## million (ppm) and from these counts the initial rate (or velocity) of the ## reaction was calculated (counts/min/min). The experiment was conducted once ## with the enzyme treated with Puromycin, and once with the enzyme untreated. - ## + ## ## @subsubheading Source - ## + ## ## The data are given in Box & Jenkins (1976). Obtained from the Time Series Data ## Library at @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}. - ## + ## ## @subsubheading References - ## + ## ## Bates, D.M. and Watts, D.G. (1988). @cite{Nonlinear Regression Analysis and ## Its Applications}. New York: Wiley. Appendix A1.3. - ## + ## ## Treloar, M. A. (1974). @cite{Effects of Puromycin on Galactosyltransferase ## in Golgi Membranes}. M.Sc. Thesis, U. of Toronto. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.Puromycin; - ## + ## ## # TODO: Port example to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = Puromycin () @@ -3735,12 +3735,12 @@ ## Locations of Earthquakes off Fiji ## ## @subsubheading Description - ## + ## ## The data set give the locations of 1000 seismic events of MB > 4.0. The events ## occurred in a cube near Fiji since 1964. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item lat ## Latitude of event. @@ -3753,32 +3753,32 @@ ## @item stations ## Number of stations reporting. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## There are two clear planes of seismic activity. One is a major plate junction; ## the other is the Tonga trench off New Zealand. These data constitute a subsample ## from a larger dataset of containing 5000 observations. - ## + ## ## @subsubheading Source - ## + ## ## This is one of the Harvard PRIM-H project data sets. They in turn obtained it ## from Dr. John Woodhouse, Dept. of Geophysics, Harvard University. - ## + ## ## @subsubheading References - ## + ## ## G. E. P. Box and G. M. Jenkins (1976). @cite{Time Series Analysis, Forecasting and ## Control}. San Francisco: Holden-Day. p. 537. - ## + ## ## P. J. Brockwell and R. A. Davis (1991). @cite{Time Series: Theory and Methods}. ## Second edition. New York: Springer-Verlag. p. 414. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Come up with example code here ## @end example - ## + ## ## ## @end deftypefn function out = quakes () @@ -3809,12 +3809,12 @@ ## Random Numbers from Congruential Generator RANDU ## ## @subsubheading Description - ## + ## ## 400 triples of successive random numbers were taken from the VAX FORTRAN ## function RANDU running under VMS 1.5. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item record ## Index of the record. @@ -3825,31 +3825,31 @@ ## @item z ## Z value of the triple. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## In three dimensional displays it is evident that the triples fall on 15 ## parallel planes in 3-space. This can be shown theoretically to be true ## for all triples from the RANDU generator. - ## + ## ## These particular 400 triples start 5 apart in the sequence, that is they ## are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded ## to 6 decimal places. - ## + ## ## Under VMS versions 2.0 and higher, this problem has been fixed. - ## + ## ## @subsubheading Source - ## + ## ## David Donoho - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.randu; - ## - ## + ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = randu () @@ -3880,35 +3880,35 @@ ## Lengths of Major North American Rivers ## ## @subsubheading Description - ## + ## ## This data set gives the lengths (in miles) of 141 “major” rivers in North ## America, as compiled by the US Geological Survey. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item rivers ## A vector containing 141 observations. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## @cite{World Almanac and Book of Facts}, 1975, page 406. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.rivers; - ## + ## ## longest_river = max (rivers) ## shortest_river = min (rivers) - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = rivers () @@ -3939,11 +3939,11 @@ ## Measurements on Petroleum Rock Samples ## ## @subsubheading Description - ## + ## ## Measurements on 48 rock samples from a petroleum reservoir. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item area ## Area of pores space, in pixels out of 256 by 256. @@ -3954,29 +3954,29 @@ ## @item perm ## Permeability in milli-Darcies. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## Twelve core samples from petroleum reservoirs were sampled by 4 ## cross-sections. Each core sample was measured for permeability, and each ## cross-section has total area of pores, total perimeter of pores, and shape. - ## + ## ## @subsubheading Source - ## + ## ## Data from BP Research, image analysis by Ronit Katz, U. Oxford. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.rock; - ## + ## ## figure ## scatter (t.area, t.perm) ## xlabel ("Area of pores space (pixels out of 256x256)") ## ylabel ("Permeability (milli-Darcies)") - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = rock () @@ -4007,12 +4007,12 @@ ## Student’s Sleep Data ## ## @subsubheading Description - ## + ## ## Data which show the effect of two soporific drugs (increase in hours of sleep ## compared to control) on 10 patients. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item id ## Patient ID. @@ -4021,32 +4021,32 @@ ## @item extra ## Increase in hours of sleep. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## The @code{group} variable name may be misleading about the data: They ## represent measurements on 10 persons, not in groups. - ## + ## ## @subsubheading Source - ## + ## ## Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: ## II hyoscines. @cite{The Journal of Physiology}, 32, 501–510. - ## + ## ## Student (1908). The probable error of the mean. @cite{Biometrika}, 6, 20. - ## + ## ## @subsubheading References - ## + ## ## Scheffé, Henry (1959). @cite{The Analysis of Variance}. New York, NY: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.sleep; - ## + ## ## # TODO: Port to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = sleep () @@ -4077,11 +4077,11 @@ ## Brownlee's Stack Loss Plant Data ## ## @subsubheading Description - ## + ## ## Operational data of a plant for the oxidation of ammonia to nitric acid. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item AirFlow ## Flow of cooling air. @@ -4092,13 +4092,13 @@ ## @item StackLoss ## Stack loss ## @end table - ## + ## ## @subsubheading Details - ## + ## ## “Obtained from 21 days of operation of a plant for the oxidation of ammonia ## (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a ## countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.) - ## + ## ## @code{AirFlow} represents the rate of operation of the plant. @code{WaterTemp} is the ## temperature of cooling water circulated through coils in the absorption tower. ## @code{AcidConc} is the concentration of the acid circulating, minus 50, times 10: @@ -4106,31 +4106,31 @@ ## is 10 times the percentage of the ingoing ammonia to the plant that escapes from ## the absorption column unabsorbed; that is, an (inverse) measure of the over-all ## efficiency of the plant. - ## + ## ## @subsubheading Source - ## + ## ## Brownlee, K. A. (1960, 2nd ed. 1965). @cite{Statistical Theory and Methodology ## in Science and Engineering}. New York: Wiley. pp. 491–500. - ## + ## ## @subsubheading References - ## + ## ## Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S ## Language}. Monterey: Wadsworth & Brooks/Cole. - ## + ## ## Dodge, Y. (1996). The guinea pig of multiple regression. In: @cite{Robust ## Statistics, Data Analysis, and Computer Intensive Methods; In Honor of ## Peter Huber’s 60th Birthday}, 1996, @cite{Lecture Notes in Statistics} ## 109, Springer-Verlag, New York. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.stackloss; - ## + ## ## # TODO: Create linear model and print summary - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = stackloss () @@ -4161,11 +4161,11 @@ ## US State Facts and Figures ## ## @subsubheading Description - ## + ## ## Data related to the 50 states of the United States of America. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item abb ## State abbreviation. @@ -4197,26 +4197,26 @@ ## Mean number of days with minimum temperature below freezing (1931-1960) ## in capital or large city. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## U.S. Department of Commerce, Bureau of the Census (1977) @cite{Statistical ## Abstract of the United States}. - ## + ## ## U.S. Department of Commerce, Bureau of the Census (1977) @cite{County ## and City Data Book}. - ## + ## ## @subsubheading References - ## + ## ## Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S ## Language}. Monterey: Wadsworth & Brooks/Cole. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.state; ## @end example - ## + ## ## ## @end deftypefn function out = state () @@ -4247,34 +4247,34 @@ ## Monthly Sunspot Data, from 1749 to “Present” ## ## @subsubheading Description - ## + ## ## Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This ## is the version of the data that may occasionally be updated when new counts ## become available. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item month ## Month of the observation. ## @item sunspots ## Number of sunspots. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory ## of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. ## Currently at @url{http://www.sidc.be/silso/datafiles}. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.sunspot_month; - ## - ## + ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = sunspot_month () @@ -4305,33 +4305,33 @@ ## Yearly Sunspot Data, 1700-1988 ## ## @subsubheading Description - ## + ## ## Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit). - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item year ## Year of the observation. ## @item sunspots ## Number of sunspots. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## H. Tong (1996) @cite{Non-Linear Time Series}. Clarendon Press, Oxford, p. 471. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.sunspot_year; - ## + ## ## figure ## plot (t.year, t.sunspots) ## xlabel ("Year") ## ylabel ("Sunspots") ## @end example - ## + ## ## ## @end deftypefn function out = sunspot_year () @@ -4362,40 +4362,40 @@ ## Monthly Sunspot Numbers, 1749-1983 ## ## @subsubheading Description - ## + ## ## Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss ## Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item month ## Month of the observation. ## @item sunspots ## Number of observed sunspots. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Andrews, D. F. and Herzberg, A. M. (1985) @cite{Data: A Collection - ## of Problems from Many Fields for the Student and Research Worker}. + ## of Problems from Many Fields for the Student and Research Worker}. ## New York: Springer-Verlag. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.sunspots; - ## + ## ## figure ## plot (datenum (t.month), t.sunspots) ## datetick ("x") ## xlabel ("Date") ## ylabel ("Monthly sunspot numbers") ## title ("sunspots data") - ## - ## + ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = sunspots () @@ -4426,12 +4426,12 @@ ## Swiss Fertility and Socioeconomic Indicators (1888) Data ## ## @subsubheading Description - ## + ## ## Standardized fertility measure and socio-economic indicators for each of 47 ## French-speaking provinces of Switzerland at about 1888. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Fertility ## Ig, ‘common standardized fertility measure’. @@ -4446,44 +4446,44 @@ ## @item InfantMortality ## Live births who live less than 1 year. ## @end table - ## + ## ## All variables but ‘Fertility’ give proportions of the population. - ## + ## ## @subsubheading Source - ## + ## ## (paraphrasing Mosteller and Tukey): - ## + ## ## Switzerland, in 1888, was entering a period known as the demographic transition; ## i.e., its fertility was beginning to fall from the high level typical of ## underdeveloped countries. - ## + ## ## The data collected are for 47 French-speaking “provinces” at about 1888. - ## + ## ## Here, all variables are scaled to [0, 100], where in the original, all but ## @code{Catholic} were scaled to [0, 1]. - ## + ## ## @subsubheading Note - ## - ## Files for all 182 districts in 1888 and other years have been available at + ## + ## Files for all 182 districts in 1888 and other years have been available at ## @url{https://opr.princeton.edu/archive/pefp/switz.aspx}. - ## + ## ## They state that variables @code{Examination} and @code{Education} are averages ## for 1887, 1888 and 1889. - ## + ## ## @subsubheading References - ## + ## ## Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S ## Language}. Monterey: Wadsworth & Brooks/Cole. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.swiss; - ## + ## ## # TODO: Port linear model to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = swiss () @@ -4514,11 +4514,11 @@ ## Pharmacokinetics of Theophylline ## ## @subsubheading Description - ## + ## ## An experiment on the pharmacokinetics of theophylline. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Subject ## Categorical identifying the subject on whom the observation was made. The @@ -4532,44 +4532,44 @@ ## @item conc ## Theophylline concentration in the sample (mg/L). ## @end table - ## + ## ## @subsubheading Details - ## + ## ## Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert ## Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects ## were given oral doses of theophylline then serum concentrations were measured ## at 11 time points over the next 25 hours. - ## + ## ## These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates ## (2000) using a two-compartment open pharmacokinetic model, for which a ## self-starting model function, SSfol, is available. - ## + ## ## @subsubheading Source - ## + ## ## The data are given in Box & Jenkins (1976). Obtained from the Time Series Data ## Library at @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}. - ## + ## ## @subsubheading References - ## + ## ## Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). @cite{NONMEM Users ## Guide: Part V}. NONMEM Project Group, University of California, San Francisco. - ## + ## ## Davidian, M. and Giltinan, D. M. (1995). @cite{Nonlinear Models for Repeated ## Measurement Data}. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176) - ## + ## ## Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in ## S and S-PLUS}. New York: Springer. (Appendix A.29) - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.Theoph; - ## + ## ## # TODO: Coplot ## # TODO: Yet another linear model to port to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = Theoph () @@ -4600,16 +4600,16 @@ ## Survival of passengers on the Titanic ## ## @subsubheading Description - ## + ## ## This data set provides information on the fate of passengers on the fatal ## maiden voyage of the ocean liner ‘Titanic’, summarized according to ## economic status (class), sex, age and survival. - ## + ## ## @subsubheading Format - ## + ## ## @code{n} is a 4-dimensional array resulting from cross-tabulating 2201 observations ## on 4 variables. The dimensions of the array correspond to the following variables: - ## + ## ## @table @code ## @item Class ## 1st, 2nd, 3rd, Cre. @@ -4620,49 +4620,49 @@ ## @item Survived ## No, Yes. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## The sinking of the Titanic is a famous event, and new books are still being ## published about it. Many well-known facts—from the proportions of first-class ## passengers to the ‘women and children first’ policy, and the fact that that ## policy was not entirely successful in saving the women and children in the ## third class—are reflected in the survival rates for various classes of ## passenger. - ## + ## ## These data were originally collected by the British Board of Trade in their ## investigation of the sinking. Note that there is not complete agreement among ## primary sources as to the exact numbers on board, rescued, or lost. - ## + ## ## Due in particular to the very successful film ‘Titanic’, the last years saw a ## rise in public interest in the Titanic. Very detailed data about the passengers ## is now available on the Internet, at sites such as Encyclopedia Titanica ## (@url{https://www.encyclopedia-titanica.org/}). - ## + ## ## @subsubheading Source - ## + ## ## Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. ## @cite{Journal of Statistics Education}, 3. - ## + ## ## The source provides a data set recording class, sex, age, and survival status ## for each person on board of the Titanic, and is based on data originally ## collected by the British Board of Trade and reprinted in: - ## + ## ## British Board of Trade (1990). @cite{Report on the Loss of the ‘Titanic’ ## (S.S.)}. British Board of Trade Inquiry Report (reprint). Gloucester, ## UK: Allan Sutton Publishing. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.Titanic; - ## + ## ## # TODO: Port mosaic plot to Octave - ## + ## ## # TODO: Check for higher survival rates in children and females - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = Titanic () @@ -4693,14 +4693,14 @@ ## The Effect of Vitamin C on Tooth Growth in Guinea Pigs ## ## @subsubheading Description - ## + ## ## The response is the length of odontoblasts (cells responsible for tooth growth) ## in 60 guinea pigs. Each animal received one of three dose levels of vitamin C ## (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ## ascorbic acid (a form of vitamin C and coded as @code{VC}). - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item supp ## Supplement type. @@ -4709,30 +4709,30 @@ ## @item len ## Tooth length. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## C. I. Bliss (1952). @cite{The Statistics of Bioassay}. Academic Press. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## Crampton, E. W. (1947). The growth of the odontoblast of the incisor ## teeth as a criterion of vitamin C intake of the guinea pig. @cite{The ## Journal of Nutrition}, 33(5), 491–504. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.ToothGrowth; - ## + ## ## tblish.examples.coplot (t, "dose", "len", "supp"); - ## + ## ## # TODO: Port Lowess smoothing to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = ToothGrowth () @@ -4763,37 +4763,37 @@ ## Yearly Treering Data, -6000-1979 ## ## @subsubheading Description - ## + ## ## Contains normalized tree-ring widths in dimensionless units. - ## + ## ## @subsubheading Format - ## + ## ## A univariate time series with 7981 observations. - ## + ## ## Each tree ring corresponds to one year. - ## + ## ## @subsubheading Details - ## + ## ## The data were recorded by Donald A. Graybill, 1980, from Gt Basin ## Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California. - ## + ## ## @subsubheading Source - ## + ## ## Time Series Data Library: @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}, ## series ‘CA535.DAT’. - ## + ## ## @subsubheading References - ## + ## ## For some photos of Methuselah Walk see ## @url{https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html}. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.treering; - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = treering () @@ -4824,14 +4824,14 @@ ## Diameter, Height and Volume for Black Cherry Trees ## ## @subsubheading Description - ## + ## ## This data set provides measurements of the diameter, height and volume of ## timber in 31 felled black cherry trees. Note that the diameter (in inches) ## is erroneously labelled Girth in the data. It is measured at 4 ft 6 in ## above the ground. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item Girth ## Tree diameter (rather than girth, actually) in inches. @@ -4840,36 +4840,36 @@ ## @item Volume ## Volume of timber in cubic feet. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). @cite{The Minitab ## Student Handbook}. Duxbury Press. - ## + ## ## @subsubheading References - ## + ## ## Atkinson, A. C. (1985). @cite{Plots, Transformations and Regression}. ## Oxford: Oxford University Press. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.trees; - ## + ## ## figure ## tblish.examples.plot_pairs (t); - ## + ## ## figure ## loglog (t.Girth, t.Volume) ## xlabel ("Girth") ## ylabel ("Volume") - ## + ## ## # TODO: Transform to log space for the coplot - ## + ## ## # TODO: Linear model - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = trees () @@ -4900,15 +4900,15 @@ ## Student Admissions at UC Berkeley ## ## @subsubheading Description - ## + ## ## Aggregate data on applicants to graduate school at Berkeley for the six ## largest departments in 1973 classified by admission and sex. - ## + ## ## @subsubheading Format - ## + ## ## A 3-dimensional array resulting from cross-tabulating 4526 observations on ## 3 variables. The variables and their levels are as follows: - ## + ## ## @table @code ## @item Admit ## Admitted, Rejected. @@ -4917,9 +4917,9 @@ ## @item Dept ## A, B, C, D, E, F. ## @end table - ## + ## ## @subsubheading Details - ## + ## ## This data set is frequently used for illustrating Simpson's paradox, see ## Bickel et al (1975). At issue is whether the data show evidence of sex bias ## in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) @@ -4930,27 +4930,27 @@ ## between admission and sex stems from differences in the tendency of males ## and females to apply to the individual departments (females used to apply ## more to departments with higher rejection rates). - ## + ## ## @subsubheading Source - ## + ## ## The data are given in Box & Jenkins (1976). Obtained from the Time Series Data ## Library at @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}. - ## + ## ## @subsubheading References - ## + ## ## Bickel, P. J., Hammel, E. A., and O'Connell, J. W. (1975). Sex bias in - ## graduate admissions: Data from Berkeley. @cite{Science}, 187, 398–403. + ## graduate admissions: Data from Berkeley. @cite{Science}, 187, 398–403. ## @url{http://www.jstor.org/stable/1739581}. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.UCBAdmissions; - ## + ## ## # TODO: Port mosaic plot to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = UCBAdmissions () @@ -4981,26 +4981,26 @@ ## Road Casualties in Great Britain 1969-84 ## ## @subsubheading Description - ## + ## ## @code{UKDriverDeaths} is a time series giving the monthly totals of car drivers in Great Britain killed ## or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts ## was introduced on 31 Jan 1983. - ## + ## ## @code{Seatbelts} is more information on the same problem. - ## + ## ## @subsubheading Format - ## + ## ## @code{UKDriverDeaths} is a table with the following variables: - ## + ## ## @table @code ## @item month ## Month of the observation. ## @item deaths ## Number of deaths. ## @end table - ## + ## ## @code{Seatbelts} is a table with the following variables: - ## + ## ## @table @code ## @item month ## Month of the observation. @@ -5021,32 +5021,32 @@ ## @item law ## 0/1: was the seatbelt law in effect that month? ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Harvey, A.C. (1989). @cite{Forecasting, Structural Time Series Models and ## the Kalman Filter}. Cambridge: Cambridge University Press. pp. 519–523. - ## + ## ## Durbin, J. and Koopman, S. J. (2001). @cite{Time Series Analysis by State ## Space Methods}. Oxford: Oxford University Press. @url{http://www.ssfpack.com/dkbook/} - ## + ## ## @subsubheading References - ## + ## ## Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation ## on British road casualties: A case study in structural time series ## modelling. @cite{Journal of the Royal Statistical Society} series A, 149, 187–227. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.UKDriverDeaths; ## d = UKDriverDeaths; ## s = Seatbelts; - ## + ## ## # TODO: Port the model and plots to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = UKDriverDeaths () @@ -5077,35 +5077,35 @@ ## UK Quarterly Gas Consumption ## ## @subsubheading Description - ## + ## ## Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item date ## Quarter of the observation ## @item gas ## Gas consumption (MM therms). ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Durbin, J. and Koopman, S. J. (2001). @cite{Time Series Analysis by State ## Space Methods}. Oxford: Oxford University Press. @url{http://www.ssfpack.com/dkbook/}. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.UKgas; - ## + ## ## plot (datenum (t.date), t.gas); ## datetick ("x") ## xlabel ("Month") ## ylabel ("Gas consumption (MM therms)") - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = UKgas () @@ -5136,12 +5136,12 @@ ## Monthly Deaths from Lung Diseases in the UK ## ## @subsubheading Description - ## + ## ## Three time series giving the monthly deaths from bronchitis, emphysema and ## asthma in the UK, 1974–1979. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item date ## Month of the observation. @@ -5152,31 +5152,31 @@ ## @item mdeaths ## Lung deaths among males. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## P. J. Diggle (1990). @cite{Time Series: A Biostatistical Introduction}. Oxford. table A.3 - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.UKLungDeaths; - ## + ## ## figure ## plot (datenum (t.date), t.ldeaths); ## title ("Total UK Lung Deaths") ## xlabel ("Month") ## ylabel ("Deaths") - ## + ## ## figure ## plot (datenum (t.date), [t.fdeaths t.mdeaths]); ## title ("UK Lung Deaths buy sex") ## legend (@{"Female", "Male"@}) ## xlabel ("Month") ## ylabel ("Deaths") - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = UKLungDeaths () @@ -5207,29 +5207,29 @@ ## Accidental Deaths in the US 1973-1978 ## ## @subsubheading Description - ## + ## ## A time series giving the monthly totals of accidental deaths in the USA. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item month ## Month of the observation. ## @item deaths ## Accidental deaths. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## Brockwell, P. J. and Davis, R. A. (1991). @cite{Time Series: Theory and Methods}. ## New York: Springer. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.USAccDeaths; ## @end example - ## + ## ## ## @end deftypefn function out = USAccDeaths () @@ -5260,13 +5260,13 @@ ## Violent Crime Rates by US State ## ## @subsubheading Description - ## + ## ## This data set contains statistics, in arrests per 100,000 residents for ## assault, murder, and rape in each of the 50 US states in 1973. Also given ## is the percent of the population living in urban areas. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item State ## State name. @@ -5279,44 +5279,44 @@ ## @item Rape ## Rape arrests (per 100,000). ## @end table - ## + ## ## @subsubheading Note - ## + ## ## @code{USArrests} contains the data as in McNeil's monograph. For the ## @code{UrbanPop} percentages, a review of the table (No. 21) in the ## Statistical Abstracts 1975 reveals a transcription error for Maryland ## (and that McNeil used the same “round to even” rule), as found by ## Daniel S Coven (Arizona). - ## + ## ## See the example below on how to correct the error and improve accuracy ## for the ‘.5’ percentages. - ## + ## ## @subsubheading Source - ## + ## ## @cite{World Almanac and Book of Facts 1975}. (Crime rates). - ## + ## ## @cite{Statistical Abstracts of the United States 1975}, p.20, (Urban rates), ## possibly available as @url{https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20}. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.USArrests; - ## + ## ## summary (t); - ## + ## ## tblish.examples.plot_pairs (t(:,2:end)); - ## + ## ## # TODO: Difference between USArrests and its correction - ## + ## ## # TODO: +/- 0.5 to restore the original .5 percentages - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = USArrests () @@ -5347,11 +5347,11 @@ ## Lawyers’ Ratings of State Judges in the US Superior Court ## ## @subsubheading Description - ## + ## ## Lawyers’ ratings of state judges in the US Superior Court. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item CONT ## Number of contacts of lawyer with judge. @@ -5378,21 +5378,21 @@ ## @item RTEN ## Worthy of retention. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## New Haven Register, 14 January, 1977 (from John Hartigan). - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.USJudgeRatings; - ## + ## ## figure ## tblish.examples.plot_pairs (t(:,2:end)); ## title ("USJudgeRatings data") ## @end example - ## + ## ## ## @end deftypefn function out = USJudgeRatings () @@ -5423,35 +5423,35 @@ ## Personal Expenditure Data ## ## @subsubheading Description - ## + ## ## This data set consists of United States personal expenditures (in billions ## of dollars) in the categories: food and tobacco, household operation, ## medical and health, personal care, and private education for the years 1940, ## 1945, 1950, 1955 and 1960. - ## + ## ## @subsubheading Format - ## + ## ## A 2-dimensional matrix @code{x} with Category along dimension 1 and Year along dimension 2. - ## + ## ## @subsubheading Source - ## + ## ## @cite{The World Almanac and Book of Facts}, 1962, page 756. - ## + ## ## @subsubheading References - ## + ## ## Tukey, J. W. (1977). @cite{Exploratory Data Analysis}. Reading, Mass: Addison-Wesley. - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.USPersonalExpenditure; - ## + ## ## # TODO: Port medpolish() from R, whatever that is. - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = USPersonalExpenditure () @@ -5482,35 +5482,35 @@ ## Populations Recorded by the US Census ## ## @subsubheading Description - ## + ## ## This data set gives the population of the United States ## (in millions) as recorded by the decennial census for the period 1790–1970. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item year ## Year of the census. ## @item population ## Population, in millions. ## @end table - ## + ## ## @subsubheading Source - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.uspop; - ## + ## ## figure ## semilogy (t.year, t.population) ## xlabel ("Year") ## ylabel ("U.S. Population (millions)") - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = uspop () @@ -5541,42 +5541,42 @@ ## Death Rates in Virginia (1940) ## ## @subsubheading Description - ## + ## ## Death rates per 1000 in Virginia in 1940. - ## + ## ## @subsubheading Format - ## + ## ## A 2-dimensional matrix @code{deaths}, with age group along dimension 1 and ## demographic group along dimension 2. - ## + ## ## @subsubheading Details - ## + ## ## The death rates are measured per 1000 population per year. They are ## cross-classified by age group (rows) and population group (columns). The ## age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups ## are Rural/Male, Rural/Female, Urban/Male and Urban/Female. - ## + ## ## This provides a rather nice 3-way analysis of variance example. - ## + ## ## @subsubheading Source - ## + ## ## Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences ## in Virginia death rates by color, sex, age, and rural or urban ## residence. @cite{American Sociological Review}, 12, 525–535. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.VADeaths; - ## + ## ## # TODO: Port to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = VADeaths () @@ -5607,39 +5607,39 @@ ## Topographic Information on Auckland’s Maunga Whau Volcano ## ## @subsubheading Description - ## + ## ## Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic ## field. This data set gives topographic information for Maunga Whau on a ## 10m by 10m grid. - ## + ## ## @subsubheading Format - ## + ## ## A matrix @code{volcano} with 87 rows and 61 columns, rows corresponding ## to grid lines running east to west and columns to grid lines running south ## to north. - ## + ## ## @subsubheading Source - ## + ## ## Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate. - ## + ## ## @subsubheading References - ## + ## ## Box, G. E. P. and Jenkins, G. M. (1976). @cite{Time Series Analysis, Forecasting and ## Control}. San Francisco: Holden-Day. p. 537. - ## + ## ## Brockwell, P. J. and Davis, R. A. (1991). @cite{Time Series: Theory and Methods}. ## Second edition. New York: Springer-Verlag. p. 414. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.volcano; - ## + ## ## # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot ## # should be fine. And then maybe do a 3-d mesh plot. - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = volcano () @@ -5670,12 +5670,12 @@ ## The Number of Breaks in Yarn during Weaving ## ## @subsubheading Description - ## + ## ## This data set gives the number of warp breaks per loom, where a loom ## corresponds to a fixed length of yarn. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item wool ## Type of wool (A or B). @@ -5684,31 +5684,31 @@ ## @item breaks ## Number of breaks. ## @end table - ## + ## ## There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH). - ## + ## ## @subsubheading Source - ## + ## ## Tippett, L. H. C. (1950). @cite{Technological Applications of Statistics}. ## New York: Wiley. Page 106. - ## + ## ## @subsubheading References - ## + ## ## Tukey, J. W. (1977). @cite{Exploratory Data Analysis}. Reading, Mass: Addison-Wesley. - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.warpbreaks; - ## + ## ## summary (t) - ## + ## ## # TODO: Port the plotting code and OPAR to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = warpbreaks () @@ -5739,47 +5739,47 @@ ## Average Heights and Weights for American Women ## ## @subsubheading Description - ## + ## ## This data set gives the average heights and weights for American women aged 30–39. - ## + ## ## @subsubheading Format - ## + ## ## @table @code ## @item height ## Height (in). ## @item weight ## Weight (lbs). ## @end table - ## + ## ## @subsubheading Details - ## + ## ## The data set appears to have been taken from the American Society of Actuaries ## Build and Blood Pressure Study for some (unknown to us) earlier year. - ## + ## ## The World Almanac notes: “The figures represent weights in ordinary indoor ## clothing and shoes, and heights with shoes”. - ## + ## ## @subsubheading Source - ## + ## ## @cite{The World Almanac and Book of Facts}, 1975. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.women; - ## + ## ## figure ## scatter (t.height, t.weight) ## xlabel ("Height (in)") ## ylabel ("Weight (lb") ## title ("women data: American women aged 30-39") - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = women () @@ -5810,36 +5810,36 @@ ## The World’s Telephones ## ## @subsubheading Description - ## + ## ## The number of telephones in various regions of the world (in thousands). - ## + ## ## @subsubheading Format - ## + ## ## A matrix with 7 rows and 8 columns. The columns of the matrix give the ## figures for a given region, and the rows the figures for a year. - ## + ## ## The regions are: North America, Europe, Asia, South America, Oceania, ## Africa, Central America. - ## + ## ## The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961. - ## + ## ## @subsubheading Source - ## + ## ## AT&T (1961) @cite{The World’s Telephones}. - ## + ## ## @subsubheading References - ## + ## ## McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## tblish.dataset.WorldPhones; - ## + ## ## # TODO: Port matplot() to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = WorldPhones () @@ -5870,30 +5870,30 @@ ## WWWusage ## ## @subsubheading Description - ## + ## ## A time series of the numbers of users connected to the Internet through ## a server every minute. - ## + ## ## @subsubheading Format - ## + ## ## A time series of length 100. - ## + ## ## @subsubheading Source - ## + ## ## Durbin, J. and Koopman, S. J. (2001). @cite{Time Series Analysis by State ## Space Methods}. Oxford: Oxford University Press. @url{http://www.ssfpack.com/dkbook/} - ## + ## ## @subsubheading References - ## + ## ## Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). @cite{Forecasting: ## Methods and Applications}. New York: Wiley. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## # TODO: Come up with example code here ## @end example - ## + ## ## ## @end deftypefn function out = WWWusage () @@ -5924,37 +5924,37 @@ ## Carbon Dioxide Uptake in Grass Plants ## ## @subsubheading Description - ## + ## ## The @code{CO2} data set has 84 rows and 5 columns of data from an experiment ## on the cold tolerance of the grass species Echinochloa crus-galli. - ## + ## ## @subsubheading Format - ## + ## ## @subsubheading Details - ## + ## ## The CO2 uptake of six plants from Quebec and six plants from Mississippi was ## measured at several levels of ambient CO2 concentration. Half the plants of ## each type were chilled overnight before the experiment was conducted. - ## + ## ## @subsubheading Source - ## + ## ## Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical ## analysis of ecophysiological response curves obtained from experiments ## involving repeated measures. @cite{Ecology}, 71, 1389–1400. - ## + ## ## Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models ## in S and S-PLUS}. New York: Springer. - ## + ## ## @subsubheading Examples - ## + ## ## @example ## t = tblish.dataset.zCO2; - ## + ## ## # TODO: Coplot ## # TODO: Port the linear model to Octave - ## + ## ## @end example - ## + ## ## ## @end deftypefn function out = zCO2 () diff --git a/inst/+tblish/datasets.m b/inst/+tblish/datasets.m index bcbed58f..9f716ea0 100644 --- a/inst/+tblish/datasets.m +++ b/inst/+tblish/datasets.m @@ -18,7 +18,7 @@ ## ## Example dataset collection. ## -## @code{datasets} is a collection of example datasets to go with the +## @code{datasets} is a collection of example datasets to go with the ## Tablicious package. ## ## The @code{datasets} class provides methods for listing and loading @@ -103,8 +103,8 @@ ## ## @end deftypefn function out = description (name) - % TODO: Convert the texinfo input to plain text. Or maybe just remove - % this method and let it be replaced by "help tblish.dataset.". + # TODO: Convert the texinfo input to plain text. Or maybe just remove + # this method and let it be replaced by "help tblish.dataset.". dset = tblish.internal.dataset.lookup (name); out = dset.description_texi; if nargout == 0 @@ -120,4 +120,4 @@ endmethods -endclassdef \ No newline at end of file +endclassdef diff --git a/inst/NaC.m b/inst/NaC.m index 851fb5f0..a084fe23 100644 --- a/inst/NaC.m +++ b/inst/NaC.m @@ -21,7 +21,7 @@ ## @deftypefnx {Function} {@var{out} =} NaC (@var{sz}) ## ## “Not-a-Categorical". Creates missing-valued categorical arrays. -## +## ## Returns a new @code{categorical} array of all missing values of ## the given size. If no input @var{sz} is given, the result is a scalar missing ## categorical. @@ -38,12 +38,12 @@ ## ## @end deftypefn function out = NaC (sz) - %NaS Not-a-Categorical (missing-valued categorical array) - % - % Creates a categorical array with all-missing values. + #NaS Not-a-Categorical (missing-valued categorical array) + # + # Creates a categorical array with all-missing values. if nargin == 0 out = categorical.undefined; else out = categorical.undefined (sz); - end -end + endif +endfunction diff --git a/inst/NaS.m b/inst/NaS.m index 8fcf885d..9265dd27 100644 --- a/inst/NaS.m +++ b/inst/NaS.m @@ -21,7 +21,7 @@ ## @deftypefnx {Function} {@var{out} =} NaS (@var{sz}) ## ## “Not-a-String". Creates missing-valued string arrays. -## +## ## Returns a new @code{string} array of all missing values of ## the given size. If no input @var{sz} is given, the result is a scalar missing ## string. @@ -38,12 +38,12 @@ ## ## @end deftypefn function out = NaS (sz) - %NaS Not-a-String (missing-valued string array) - % - % Creates a string array with all-missing values. + #NaS Not-a-String (missing-valued string array) + # + # Creates a string array with all-missing values. if nargin == 0 out = string.missing; else out = string.missing (sz); - end -end + endif +endfunction diff --git a/inst/NaT.m b/inst/NaT.m index f82b563e..77d21846 100644 --- a/inst/NaT.m +++ b/inst/NaT.m @@ -21,7 +21,7 @@ ## @deftypefnx {Function} {@var{out} =} NaT (@var{sz}) ## ## “Not-a-Time”. Creates missing-valued datetime arrays. -## +## ## Constructs a new @code{datetime} array of all @code{NaT} values of ## the given size. If no input @var{sz} is given, the result is a scalar @code{NaT}. ## @@ -35,12 +35,12 @@ ## ## @end deftypefn function out = NaT (sz) - %NaT Not-a-Time - % - % Creates an array of datetimes with the value NaT. + #NaT Not-a-Time + # + # Creates an array of datetimes with the value NaT. if nargin == 0 out = datetime.NaT; else out = repmat (datetime.NaT, sz); - end -end + endif +endfunction diff --git a/inst/array2table.m b/inst/array2table.m index 0a63e9eb..a9eb2711 100644 --- a/inst/array2table.m +++ b/inst/array2table.m @@ -26,7 +26,7 @@ ## ## You may not want to use this on cell arrays, though, because you will ## end up with a table that has all its variables of type cell. If you use -## @code{cell2table} instead, columns of the cell array which can be +## @code{cell2table} instead, columns of the cell array which can be ## condensed into primitive arrays will be. With @code{array2table}, they ## won't be. ## @@ -34,15 +34,15 @@ ## ## @end deftypefn function out = array2table(c, varargin) - %ARRAY2TABLE Convert an array to a table + #ARRAY2TABLE Convert an array to a table if ndims (c) > 2 error ('array2table: Input must be 2-D; got %d-D', ndims (c)); endif - - % Peel off trailing options + + # Peel off trailing options [opts, args] = peelOffNameValueOptions (varargin, {'VariableNames', 'RowNames'}); - if ~isempty (args) + if !isempty (args) error ('array2table: Unrecognized options'); endif @@ -51,7 +51,7 @@ for iCol = 1:nCols colVals{iCol} = c(:,iCol); endfor - + if isfield (opts, 'VariableNames') varNames = opts.VariableNames; else @@ -60,10 +60,10 @@ varNames{iCol} = sprintf('Var%d', iCol); endfor endif - + optArgs = {'VariableNames', varNames}; if isfield (opts, 'RowNames') optArgs = [optArgs {'RowNames', opts.RowNames}]; endif - out = table (colVals{:}, optArgs{:}); + out = table (colVals{:}, optArgs{:}); endfunction diff --git a/inst/calendarDuration.m b/inst/calendarDuration.m index b8458dd6..8fc2ed6b 100644 --- a/inst/calendarDuration.m +++ b/inst/calendarDuration.m @@ -77,26 +77,26 @@ ## ## @end deftypeivar - % planar precedence: (IsNaN,Sign,Years,Months,Days,Time) - + # planar precedence: (IsNaN,Sign,Years,Months,Days,Time) + properties (SetAccess = private) Sign = 1 % planar - % Whole calendar years + # Whole calendar years Years = 0 % planar - % Whole calendar months + # Whole calendar months Months = 0 % planar - % Whole calendar days + # Whole calendar days Days = 0 % planar - % Time as datenum-style double; will typically be a fractional value (<1.0) + # Time as datenum-style double; will typically be a fractional value (<1.0) Time = 0 % planar - % Flag for whether each element is NaN/NaT; logical + # Flag for whether each element is NaN/NaT; logical IsNaN = false % planar endproperties properties - % Display format + # Display format Format endproperties - + methods ## -*- texinfo -*- @@ -115,17 +115,17 @@ ## ## @end deftypefn function this = calendarDuration (varargin) - %CALENDARDURATION Construct a new calendar duration. - % - % this = calendarDuration (Y, M, D) - % this = calendarDuration (Y, M, D, H, MI, S) - % this = calendarDuration (Y, M, D, T) - % this = calendarDuration (X) - % - % this = calendarDuration (..., 'Format',displayFormat) - + #CALENDARDURATION Construct a new calendar duration. + # + # this = calendarDuration (Y, M, D) + # this = calendarDuration (Y, M, D, H, MI, S) + # this = calendarDuration (Y, M, D, T) + # this = calendarDuration (X) + # + # this = calendarDuration (..., 'Format',displayFormat) + args = varargin; - % Peel off options + # Peel off options knownOptions = {'Format'}; opts = struct; while numel (args) >= 3 && isa (args{end-1}, 'char') ... @@ -133,7 +133,7 @@ opts.(args{end-1}) = args{end}; args(end-1:end) = []; endwhile - % Parse inputs + # Parse inputs switch numel (args) case 0 return @@ -158,13 +158,13 @@ otherwise error('Invalid number of inputs'); endswitch - % Input validation + # Input validation Y = double (Y); M = double (M); D = double (D); T = double (T); [Y, M, D, T] = tblish.chrono.internal.scalarexpand (Y, M, D, T); - % Construction + # Construction this.Years = Y; this.Months = M; this.Days = D; @@ -175,9 +175,9 @@ endif this = normalizeNaNs(this); endfunction - - % Structure - + + # Structure + ## -*- texinfo -*- ## @node calendarDuration.sizeof ## @deftypefn {Method} {@var{out} =} sizeof (@var{obj}) @@ -194,23 +194,23 @@ out += sizeof (this.Time); out += sizeof (this.isNaN); endfunction - + function [keysA, keysB] = proxyKeys (a, b) - %PROXYKEYS Proxy key values for sorting and set operations + #PROXYKEYS Proxy key values for sorting and set operations keysA = [a.Sign(:) a.Years(:) a.Months(:) a.Days(:) a.Time(:) double (a.IsNaN(:))]; keysB = [b.Sign(:) b.Years(:) b.Months(:) b.Days(:) b.Time(:) double (b.IsNaN(:))]; endfunction - + function out = calyears (this) out = this.Years; endfunction - + function out = calmonths (this) out = this.Months; endfunction - - % Arithmetic - + + # Arithmetic + ## -*- texinfo -*- ## @node calendarDuration.isnat ## @deftypefn {Method} {@var{out} =} isnat (@var{obj}) @@ -221,7 +221,7 @@ ## ## @end deftypefn function out = isnat (this) - %ISNAT True for Not-a-Time. + #ISNAT True for Not-a-Time. out = isnan (this); endfunction @@ -233,11 +233,11 @@ ## ## @end deftypefn function out = uminus (this) - %UMINUS Unary minus. + #UMINUS Unary minus. out = this; out.Sign = -out.Sign; endfunction - + ## -*- texinfo -*- ## @node calendarDuration.plus ## @deftypefn {Method} {@var{out} =} plus (@var{A}, @var{B}) @@ -255,8 +255,8 @@ ## ## @end deftypefn function out = plus (this, B) - %PLUS Addition. - if ~isa (this, 'calendarDuration') + #PLUS Addition. + if !isa (this, 'calendarDuration') error ('Left-hand side of + must be a calendarDuration'); endif if isnumeric (B) @@ -275,7 +275,7 @@ class (B)); endif endfunction - + ## -*- texinfo -*- ## @node calendarDuration.times ## @deftypefn {Method} {@var{out} =} times (@var{obj}, @var{B}) @@ -286,14 +286,14 @@ ## ## @end deftypefn function out = times (this, B) - %TIMES Array multiplication. + #TIMES Array multiplication. if isnumeric (this) && isa (B, 'calendarDuration') out = times (B, this); endif - if ~isa (this, 'calendarDuration') + if !isa (this, 'calendarDuration') error ('Left-hand side of * must be numeric or calendarDuration'); endif - if ~isnumeric (B) + if !isnumeric (B) error ('B must be numeric; got a %s', class (B)); endif out = this; @@ -309,7 +309,7 @@ out.IsNaN = this.IsNaN | isnan (B); out = normalizeNaNs (out); endfunction - + ## -*- texinfo -*- ## @node calendarDuration.minus ## @deftypefn {Method} {@var{out} =} times (@var{A}, @var{B}) @@ -320,30 +320,30 @@ ## ## @end deftypefn function out = minus (A, B) - %MINUS Subtraction. + #MINUS Subtraction. out = A + -B; endfunction - - % Display - + + # Display + function display (this) - %DISPLAY Custom display. + #DISPLAY Custom display. in_name = inputname (1); - if ~isempty (in_name) + if !isempty (in_name) fprintf ('%s =\n', in_name); endif disp (this); endfunction function disp (this) - %DISP Custom display. + #DISP Custom display. if isempty (this) fprintf ('Empty %s %s\n', size2str (size (this)), class (this)); return endif fprintf ('%s\n', tblish.chrono.internal.format_dispstr_array (dispstrs (this))); endfunction - + ## -*- texinfo -*- ## @node calendarDuration.dispstrs ## @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) @@ -354,14 +354,14 @@ function disp (this) ## ## @end deftypefn function out = dispstrs (this) - %DISPSTRS Custom display strings. + #DISPSTRS Custom display strings. out = cell (size (this)); for i = 1:numel (this) out{i} = dispstrScalar (subset (this, i)); endfor endfunction endmethods - + methods (Access = private) function out = dispstrScalar (this) tblish.chrono.internal.mustBeScalar (this); @@ -402,7 +402,7 @@ function disp (this) endfor out = sprintf (fmt, args{:}); endfunction - + function out = fprintf(varargin) args = varargin; if isnumeric (args{1}) @@ -441,59 +441,59 @@ function disp (this) endfunction endmethods - % Planar boilerplate stuff - + # Planar boilerplate stuff + methods - + function out = numel (this) - %NUMEL Number of elements in array. + #NUMEL Number of elements in array. out = numel (this.Sign); endfunction - + function out = ndims (this) - %NDIMS Number of dimensions. + #NDIMS Number of dimensions. out = ndims (this.Sign); endfunction - + function out = size (this, dim) - %SIZE Size of array. + #SIZE Size of array. if nargin == 1 out = size (this.Sign); else out = size (this, dim); endif endfunction - + function out = isempty (this) - %ISEMPTY True for empty array. + #ISEMPTY True for empty array. out = isempty (this.Sign); endfunction - + function out = isscalar (this) - %ISSCALAR True if input is scalar. + #ISSCALAR True if input is scalar. out = isscalar (this.Sign); endfunction - + function out = isvector (this) - %ISVECTOR True if input is a vector. + #ISVECTOR True if input is a vector. out = isvector (this.Sign); endfunction - + function out = iscolumn (this) - %ISCOLUMN True if input is a column vector. + #ISCOLUMN True if input is a column vector. out = iscolumn (this.Sign); endfunction - + function out = isrow (this) - %ISROW True if input is a row vector. + #ISROW True if input is a row vector. out = isrow (this.Sign); endfunction - + function out = ismatrix (this) - %ISMATRIX True if input is a matrix. + #ISMATRIX True if input is a matrix. out = ismatrix (this.Sign); endfunction - + ## -*- texinfo -*- ## @node calendarDuration.isnan ## @deftypefn {Method} {@var{out} =} isnan (@var{obj}) @@ -505,7 +505,7 @@ function disp (this) ## ## @end deftypefn function out = isnan (this) - %ISNAN True for Not-a-Number. + #ISNAN True for Not-a-Number. out = isnan (this.Days) ... | isnan (this.Months) ... | isnan (this.Sign) ... @@ -513,9 +513,9 @@ function disp (this) | isnan (this.Years); out (this.IsNaN) = true; endfunction - + function this = reshape (this, varargin) - %RESHAPE Reshape array. + #RESHAPE Reshape array. this.Sign = reshape (this.Sign, varargin{:}); this.Years = reshape (this.Years, varargin{:}); this.Months = reshape (this.Months, varargin{:}); @@ -523,9 +523,9 @@ function disp (this) this.Time = reshape (this.Time, varargin{:}); this.IsNaN = reshape (this.IsNaN, varargin{:}); endfunction - + function this = squeeze (this, varargin) - %SQUEEZE Remove singleton dimensions. + #SQUEEZE Remove singleton dimensions. this.Sign = squeeze (this.Sign, varargin{:}); this.Years = squeeze (this.Years, varargin{:}); this.Months = squeeze (this.Months, varargin{:}); @@ -533,9 +533,9 @@ function disp (this) this.Time = squeeze (this.Time, varargin{:}); this.IsNaN = squeeze (this.IsNaN, varargin{:}); endfunction - + function this = circshift (this, varargin) - %CIRCSHIFT Shift positions of elements circularly. + #CIRCSHIFT Shift positions of elements circularly. this.Sign = circshift (this.Sign, varargin{:}); this.Years = circshift (this.Years, varargin{:}); this.Months = circshift (this.Months, varargin{:}); @@ -543,9 +543,9 @@ function disp (this) this.Time = circshift (this.Time, varargin{:}); this.IsNaN = circshift (this.IsNaN, varargin{:}); endfunction - + function this = permute (this, varargin) - %PERMUTE Permute array dimensions. + #PERMUTE Permute array dimensions. this.Sign = permute (this.Sign, varargin{:}); this.Years = permute (this.Years, varargin{:}); this.Months = permute (this.Months, varargin{:}); @@ -553,9 +553,9 @@ function disp (this) this.Time = permute (this.Time, varargin{:}); this.IsNaN = permute (this.IsNaN, varargin{:}); endfunction - + function this = ipermute (this, varargin) - %IPERMUTE Inverse permute array dimensions. + #IPERMUTE Inverse permute array dimensions. this.Sign = ipermute (this.Sign, varargin{:}); this.Years = ipermute (this.Years, varargin{:}); this.Months = ipermute (this.Months, varargin{:}); @@ -563,9 +563,9 @@ function disp (this) this.Time = ipermute (this.Time, varargin{:}); this.IsNaN = ipermute (this.IsNaN, varargin{:}); endfunction - + function this = repmat (this, varargin) - %REPMAT Replicate and tile array. + #REPMAT Replicate and tile array. this.Sign = repmat (this.Sign, varargin{:}); this.Years = repmat (this.Years, varargin{:}); this.Months = repmat (this.Months, varargin{:}); @@ -573,9 +573,9 @@ function disp (this) this.Time = repmat (this.Time, varargin{:}); this.IsNaN = repmat (this.IsNaN, varargin{:}); endfunction - + function this = ctranspose (this, varargin) - %CTRANSPOSE Complex conjugate transpose. + #CTRANSPOSE Complex conjugate transpose. this.Sign = ctranspose (this.Sign, varargin{:}); this.Years = ctranspose (this.Years, varargin{:}); this.Months = ctranspose (this.Months, varargin{:}); @@ -583,9 +583,9 @@ function disp (this) this.Time = ctranspose (this.Time, varargin{:}); this.IsNaN = ctranspose (this.IsNaN, varargin{:}); endfunction - + function this = transpose (this, varargin) - %TRANSPOSE Transpose vector or matrix. + #TRANSPOSE Transpose vector or matrix. this.Sign = transpose (this.Sign, varargin{:}); this.Years = transpose (this.Years, varargin{:}); this.Months = transpose (this.Months, varargin{:}); @@ -593,9 +593,9 @@ function disp (this) this.Time = transpose (this.Time, varargin{:}); this.IsNaN = transpose (this.IsNaN, varargin{:}); endfunction - + function [this, nshifts] = shiftdim (this, n) - %SHIFTDIM Shift dimensions. + #SHIFTDIM Shift dimensions. if nargin > 1 this.Sign = shiftdim (this.Sign, n); this.Years = shiftdim (this.Years, n); @@ -612,12 +612,12 @@ function disp (this) [this.IsNaN,nshifts] = shiftdim (this.IsNaN); endif endfunction - + function out = cat (dim, varargin) - %CAT Concatenate arrays. + #CAT Concatenate arrays. args = varargin; for i = 1:numel (args) - if ~isa (args{i}, 'calendarDuration') + if !isa (args{i}, 'calendarDuration') args{i} = calendarDuration (args{i}); endif endfor @@ -635,29 +635,29 @@ function disp (this) fieldArgs = cellfun (@(obj) obj.IsNaN, args, 'UniformOutput', false); out.IsNaN = cat (dim, fieldArgs{:}); endfunction - + function out = horzcat (varargin) - %HORZCAT Horizontal concatenation. + #HORZCAT Horizontal concatenation. out = cat (2, varargin{:}); endfunction - + function out = vertcat (varargin) - %VERTCAT Vertical concatenation. + #VERTCAT Vertical concatenation. out = cat (1, varargin{:}); endfunction - + function this = subsasgn (this, s, b) - %SUBSASGN Subscripted assignment. - - % Chained subscripts + #SUBSASGN Subscripted assignment. + + # Chained subscripts if numel (s) > 1 rhs_in = subsref (this, s(1)); rhs = subsasgn (rhs_in, s(2:end), b); else rhs = b; endif - - % Base case + + # Base case switch s(1).type case '()' this = subsasgnParensPlanar (this, s(1), rhs); @@ -667,11 +667,11 @@ function disp (this) this.(s(1).subs) = rhs; endswitch endfunction - + function out = subsref (this, s) - %SUBSREF Subscripted reference. - - % Base case + #SUBSREF Subscripted reference. + + # Base case switch s(1).type case '()' out = subsrefParensPlanar (this, s(1)); @@ -680,26 +680,26 @@ function disp (this) case '.' out = this.(s(1).subs); endswitch - - % Chained reference + + # Chained reference if numel (s) > 1 out = subsref (out, s(2:end)); endif endfunction - + function [out,Indx] = sort (this) - %SORT Sort array elements. + #SORT Sort array elements. if isvector (this) isRow = isrow (this); this = subset (this, ':'); - % NaNs sort stably to end, so handle them separately + # NaNs sort stably to end, so handle them separately tfNan = isnan (this); nans = subset (this, tfNan); - nonnans = subset (this, ~tfNan); - ixNonNan = find (~tfNan); + nonnans = subset (this, !tfNan); + ixNonNan = find (!tfNan); proxy = proxyKeys (nonnans); [~,ix] = sortrows (proxy); - % Can't have a space after "subset" or you get a syntax error + # Can't have a space after "subset" or you get a syntax error out = [subset(nonnans, ix); nans]; Indx = [ixNonNan(ix); find (tfNan)]; if isRow @@ -713,13 +713,13 @@ function disp (this) out = asgn (out, {':', iCol}, sortedCol); endfor else - % I believe this multi-dimensional implementation is correct, - % but have not tested it yet. Use with caution. + # I believe this multi-dimensional implementation is correct, + # but have not tested it yet. Use with caution. out = this; Indx = NaN (size (out)); sz = size (this); nDims = ndims (this); - % Can't have a space after "repmat" or you get a syntax error + # Can't have a space after "repmat" or you get a syntax error ixs = [{':'} repmat({1}, [1 nDims-1])]; while true col = subset (this, ixs{:}); @@ -739,9 +739,9 @@ function disp (this) endwhile endif endfunction - + function [out,Indx] = unique (this, varargin) - %UNIQUE Set unique. + #UNIQUE Set unique. flags = setdiff (varargin, {'rows'}); if ismember ('rows', varargin) [~,proxyIx] = unique (this); @@ -753,8 +753,8 @@ function disp (this) this = subset (this, ':'); tfNaN = isnan (this); nans = subset (this, tfNaN); - nonnans = subset (this, ~tfNaN); - ixNonnan = find (~tfNaN); + nonnans = subset (this, !tfNaN); + ixNonnan = find (!tfNaN); keys = proxyKeys (nonnans); if isa (keys, 'table') [~,ix] = unique (keys, flags{:}); @@ -768,16 +768,16 @@ function disp (this) endif endif endfunction - + function [out,Indx] = ismember (a, b, varargin) - %ISMEMBER True for set member. + #ISMEMBER True for set member. if ismember ('rows', varargin) error ('ismember(..., ''rows'') is unsupported'); endif - if ~isa (a, 'calendarDuration') + if !isa (a, 'calendarDuration') a = calendarDuration (a); endif - if ~isa (b, 'calendarDuration') + if !isa (b, 'calendarDuration') b = calendarDuration (b); endif [proxyA, proxyB] = proxyKeys (a, b); @@ -785,21 +785,21 @@ function disp (this) out = reshape (out, size (a)); Indx = reshape (Indx, size (a)); endfunction - + function [out,Indx] = setdiff (a, b, varargin) - %SETDIFF Set difference. + #SETDIFF Set difference. if ismember ('rows', varargin) error ('setdiff(..., ''rows'') is unsupported'); endif [tf,~] = ismember (a, b); - out = parensRef (a, ~tf); - Indx = find (~tf); + out = parensRef (a, !tf); + Indx = find (!tf); [out,ix] = unique (out); Indx = Indx(ix); endfunction - + function [out,ia,ib] = intersect (a, b, varargin) - %INTERSECT Set intersection. + #INTERSECT Set intersection. if ismember ('rows', varargin) error ('intersect(..., ''rows'') is unsupported'); endif @@ -807,9 +807,9 @@ function disp (this) [~,ia,ib] = intersect (proxyA, proxyB, 'rows'); out = parensRef (a, ia); endfunction - + function [out,ia,ib] = union (a, b, varargin) - %UNION Set union. + #UNION Set union. if ismember ('rows', varargin) error ('union(..., ''rows'') is unsupported'); endif @@ -817,17 +817,17 @@ function disp (this) [~,ia,ib] = union (proxyA, proxyB, 'rows'); aOut = parensRef (a, ia); bOut = parensRef (b, ib); - % Can't have a space after "parensRef" or you get a syntax error + # Can't have a space after "parensRef" or you get a syntax error out = [parensRef(aOut, ':'); parensRef(bOut, ':')]; endfunction - + endmethods - + methods (Access=private) function this = subsasgnParensPlanar (this, s, rhs) - %SUBSASGNPARENSPLANAR ()-assignment for planar object - if ~isa (rhs, 'calendarDuration') + #SUBSASGNPARENSPLANAR ()-assignment for planar object + if !isa (rhs, 'calendarDuration') rhs = calendarDuration (rhs); endif this.Sign(s.subs{:}) = rhs.Sign; @@ -837,9 +837,9 @@ function disp (this) this.Time(s.subs{:}) = rhs.Time; this.IsNaN(s.subs{:}) = rhs.IsNaN; endfunction - + function out = subsrefParensPlanar (this, s) - %SUBSREFPARENSPLANAR ()-indexing for planar object + #SUBSREFPARENSPLANAR ()-indexing for planar object out = this; out.Sign = this.Sign(s.subs{:}); out.Years = this.Years(s.subs{:}); @@ -848,34 +848,34 @@ function disp (this) out.Time = this.Time(s.subs{:}); out.IsNaN = this.IsNaN(s.subs{:}); endfunction - + function out = parensRef (this, varargin) - %PARENSREF ()-indexing, for this class's internal use + #PARENSREF ()-indexing, for this class's internal use out = subsrefParensPlanar (this, struct ('subs', {varargin})); endfunction - + function out = subset (this, varargin) - %SUBSET Subset array by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the RHS, which don't work properly inside the class - % because they don't respect the subsref() override. + #SUBSET Subset array by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the RHS, which don't work properly inside the class + # because they don't respect the subsref() override. out = parensRef (this, varargin{:}); endfunction - + function out = asgn (this, ix, value) - %ASGN Assign array elements by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the LHS, which don't work properly inside - % the class because they don't respect the subsasgn() override. - if ~iscell (ix) + #ASGN Assign array elements by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the LHS, which don't work properly inside + # the class because they don't respect the subsasgn() override. + if !iscell (ix) ix = { ix }; endif s.type = '()'; s.subs = ix; out = subsasgnParensPlanar (this, s, value); endfunction - + endmethods - + endclassdef diff --git a/inst/calmonths.m b/inst/calmonths.m index c226a9cb..75228a1b 100644 --- a/inst/calmonths.m +++ b/inst/calmonths.m @@ -24,7 +24,7 @@ ## ## Input @var{x} is a numeric array specifying the number of calendar months. ## -## This is a shorthand alternative to calling the @code{calendarDuration} +## This is a shorthand alternative to calling the @code{calendarDuration} ## constructor with @code{calendarDuration(0, x, 0)}. ## ## Returns a new @code{calendarDuration} object of the same size as @var{x}. @@ -34,9 +34,9 @@ ## @end deftypefn function out = calmonths (x) - %CALMONTHS Calendar duration in months - if ~isnumeric (x) + #CALMONTHS Calendar duration in months + if !isnumeric (x) error ('Input must be numeric'); endif - out = calendarDuration (0, x, 0); + out = calendarDuration (0, x, 0); endfunction diff --git a/inst/calyears.m b/inst/calyears.m index 90c9f88b..295ee5f4 100644 --- a/inst/calyears.m +++ b/inst/calyears.m @@ -28,8 +28,8 @@ ## @end deftypefn function out = calyears (x) - %CALYEARS Calendar duration in years - if ~isnumeric (x) + #CALYEARS Calendar duration in years + if !isnumeric (x) error ('Input must be numeric'); endif out = calendarDuration (x, 0, 0); diff --git a/inst/categorical.m b/inst/categorical.m index 3ac5df53..c32cab8f 100644 --- a/inst/categorical.m +++ b/inst/categorical.m @@ -13,8 +13,8 @@ ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . -# TODO: Consider combining .code and .tfMissing into one @single .code array, -# where NaNs are used to indicate undefineds, instead of a separate tfMissing +# TODO: Consider combining .code and .tfMissing into one @single .code array, +# where NaNs are used to indicate undefineds, instead of a separate tfMissing # mask. Or even keep .code as uint16, and just use 0 to indicate undefined. # Would require creating more temporaries, but some of the code would be simpler. # Would be about the same storage at rest (uint16 + logical = 3 bytes; @@ -90,19 +90,19 @@ ## @end deftypeivar properties (SetAccess = private) - % Code for each element. Codes are an index into cats. + # Code for each element. Codes are an index into cats. code = uint16 (0) % planar - % Whether each element is missing/undefined + # Whether each element is missing/undefined tfMissing = true % planar - % The list of category names for this array, indexed by code + # The list of category names for this array, indexed by code cats = {} % not planar - % Whether this array is ordinal + # Whether this array is ordinal isOrdinal = false % not planar - % Whether this array's categories are "protected", which disallows implicit - % expansion of the category list + # Whether this array's categories are "protected", which disallows implicit + # expansion of the category list isProtected = false % not planar endproperties - + methods (Static = true, Hidden = true) function out = from_codes (codes, cats, varargin) [opts, args] = peelOffNameValueOptions (varargin, {'Ordinal', 'Protected'}); @@ -118,12 +118,12 @@ endif cats = cellstr(cats); cats = cats(:)'; - + code = uint16 (codes); if ! isa (codes, 'uint16') - % TODO: Check for clean conversion + # TODO: Check for clean conversion endif - + out = categorical; out.code = code; out.tfMissing = isnan (codes); @@ -132,9 +132,9 @@ out.isProtected = isProtected; endfunction endmethods - + methods (Static) - + ## -*- texinfo -*- ## @node categorical.undefined ## @deftypefn {Static Method} {@var{out} =} categorical.undefined () @@ -187,11 +187,11 @@ out = categorical.undefined (sz); endif endfunction - + endmethods - + methods - + ## -*- texinfo -*- ## @node categorical.categorical ## @deftypefn {Constructor} {@var{obj} =} categorical () @@ -226,19 +226,19 @@ ## ## @end deftypefn function this = categorical (x, varargin) - % TODO: Empty strings and cellstrs should convert to - % TODO: Handle datetime and duration inputs - % TODO: Handle logical inputs - % TODO: Handle @missing inputs - % TODO: Numeric conversion is probably wrong. It's trying to convert - % numeric inputs directly to codes. It should probably convert them to the - % num2str representation of numbers instead, and make those all categories. - % TODO: Support objects. - + # TODO: Empty strings and cellstrs should convert to + # TODO: Handle datetime and duration inputs + # TODO: Handle logical inputs + # TODO: Handle @missing inputs + # TODO: Numeric conversion is probably wrong. It's trying to convert + # numeric inputs directly to codes. It should probably convert them to the + # num2str representation of numbers instead, and make those all categories. + # TODO: Support objects. + if nargin == 0 return endif - + validOptions = {'Ordinal', 'Protected'}; [opts, args] = peelOffNameValueOptions (varargin, validOptions); if ischar (x) @@ -281,7 +281,7 @@ if doOrdinal doProtected = true; endif - + [tf, loc] = ismember (x, valueset); if any(loc > intmax ('uint16')) error (['Category count out of range: categorical supports a max of %d ' ... @@ -290,7 +290,7 @@ code = uint16 (loc); code(!tf) = 0; tfMissing = !tf; - + this.code = code; this.tfMissing = tfMissing; this.cats = category_names; @@ -313,7 +313,7 @@ out += sizeof (this.isOrdinal); out += sizeof (this.isProtected); endfunction - + function this = set.code (this, x) if ! isnumeric (x) error ('categorical.code: values must be numeric'); @@ -326,14 +326,14 @@ endif this.code = code; endfunction - + ## -*- texinfo -*- ## @node categorical.categories ## @deftypefn {Method} {@var{out} =} categories (@var{obj}) ## ## Get a list of the categories in @var{obj}. ## - ## Gets a list of the categories in @var{obj}, identified by their + ## Gets a list of the categories in @var{obj}, identified by their ## category names. ## ## Returns a cellstr column vector. @@ -342,7 +342,7 @@ function out = categories (this) out = this.cats(:); endfunction - + ## -*- texinfo -*- ## @node categorical.iscategory ## @deftypefn {Method} {@var{out} =} iscategory (@var{obj}, @var{catnames}) @@ -356,14 +356,14 @@ ## ## @end deftypefn function out = iscategory (this, catnames) - %ISCATEGORY Test for category name existence - % - % out = iscategory (this, catnames) + #ISCATEGORY Test for category name existence + # + # out = iscategory (this, catnames) mustBeA (this, 'categorical'); catnames = cellstr (catnames); out = ismember (catnames, this.cats); endfunction - + ## -*- texinfo -*- ## @node categorical.isordinal ## @deftypefn {Method} {@var{out} =} isordinal (@var{obj}) @@ -377,7 +377,7 @@ function out = isordinal (this) out = this.isOrdinal; endfunction - + ## -*- texinfo -*- ## @node categorical.string ## @deftypefn {Method} {@var{out} =} string (@var{obj}) @@ -397,7 +397,7 @@ out = string (out); out(this.tfMissing) = NaS; endfunction - + ## -*- texinfo -*- ## @node categorical.cellstr ## @deftypefn {Method} {@var{out} =} cellstr (@var{obj}) @@ -414,29 +414,29 @@ function out = cellstr (this) out = cell (size (this)); out(!this.tfMissing) = this.cats(this.code(!this.tfMissing)); - out(this.tfMissing) = {""}; + out(this.tfMissing) = {""}; endfunction - + function display (this) - %DISPLAY Custom display + #DISPLAY Custom display in_name = inputname(1); - if ~isempty(in_name) + if !isempty(in_name) fprintf('%s =\n', in_name); - end + endif disp(this); - end + endfunction function disp (this) - %DISP Custom display + #DISP Custom display if isempty (this) fprintf ('Empty %s categorical\n', size2str (size (this))); - return; - end + return + endif my_dispstrs = this.dispstrs; out = format_dispstr_array (my_dispstrs); fprintf("%s", out); - end - + endfunction + ## -*- texinfo -*- ## @node categorical.dispstrs ## @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) @@ -455,7 +455,7 @@ function disp (this) out(!this.tfMissing) = this.cats(ix); out(this.tfMissing) = {''}; endfunction - + function out = dispstr (this) if isscalar (this) d = dispstrs (this); @@ -474,7 +474,7 @@ function disp (this) endfor out = sprintf (fmt, args{:}); endfunction - + function out = fprintf(varargin) args = varargin; if isnumeric (args{1}) @@ -496,7 +496,7 @@ function disp (this) fprintf (fid, fmt, args{:}); endif endfunction - + ## -*- texinfo -*- ## @node categorical.summary ## @deftypefn {Method} {} summary (@var{obj}) @@ -509,20 +509,20 @@ function disp (this) ## ## @end deftypefn function summary (this) - %SUMMARY Print a summary of the values in this categorical array - + #SUMMARY Print a summary of the values in this categorical array + Code = [1:numel(this.cats)]'; Category = this.cats'; category_table = table (Code, Category); - + fprintf ('Categorical array\n'); fprintf (' %d categories, %d elements\n', numel (Category), numel (this)); fprintf (' %d undefined values\n', numel (find (this.tfMissing(:)))); prettyprint (category_table); - % TODO: Frequencies of each code value. Probably just roll that up into the - % above table as an additional column. + # TODO: Frequencies of each code value. Probably just roll that up into the + # above table as an additional column. endfunction - + ## -*- texinfo -*- ## @node categorical.addcats ## @deftypefn {Method} {@var{out} =} addcats (@var{obj}, @var{newcats}) @@ -552,7 +552,7 @@ function summary (this) out = this; out.cats = [out.cats newcats]; endfunction - + ## -*- texinfo -*- ## @node categorical.removecats ## @deftypefn {Method} {@var{out} =} removecats (@var{obj}) @@ -577,8 +577,8 @@ function summary (this) if nargin == 1 out = squeezecats (this); return - end - + endif + oldcats = cellstr (oldcats); [tf, codes_to_remove] = ismember (oldcats, this.cats); [tf_undef] = ismember (this.code, codes_to_remove) @@ -587,7 +587,7 @@ function summary (this) out.tfMissing = out.tfMissing | tf_undef; out = remove_unused_cats (out, oldcats); endfunction - + ## -*- texinfo -*- ## @node categorical.mergecats ## @deftypefn {Method} {@var{out} =} mergecats (@var{obj}, @var{oldcats}) @@ -611,28 +611,28 @@ function summary (this) newcat = oldcats{1}; endif oldcats = cellstr (oldcats); - + if this.isOrdinal error ('categorical: Merging of ordinal categories is not yet implemented. Sorry.'); endif - + [tf, old_cat_codes] = ismember (oldcats, this.cats); if ! all (tf) - % TODO: I don't know if this should be an error, or just silently ignored -apj + # TODO: I don't know if this should be an error, or just silently ignored -apj error ('categorical.mergecats: Specified categories not present in input: %s', ... strjoin(oldcats(!tf), ', ')); endif [is_current_cat, new_cat_code] = ismember (newcat, this.cats) - + out = this; if is_current_cat - % Merge into existing category + # Merge into existing category cats_to_delete = setdiff (oldcats, newcat); [tf, loc] = ismember (this.code, old_cat_codes); out.code(tf) = new_cat_code; out = remove_unused_cats (out, cats_to_delete); else - % Merge into new category + # Merge into new category cats_to_delete = oldcats; [tf, loc] = ismember (this.code, old_cat_codes); out = addcats (out, newcat); @@ -641,7 +641,7 @@ function summary (this) out = remove_unused_cats (out, cats_to_delete); endif endfunction - + ## -*- texinfo -*- ## @node categorical.renamecats ## @deftypefn {Method} {@var{out} =} renamecats (@var{obj}, @var{newcats}) @@ -670,7 +670,7 @@ function summary (this) error (['categorical.renamecats: Inconsistent dimensions for oldnames ' ... 'and newnames: %s vs %s'], size2str (size (oldnames)), size2str (size (newnames))); endif - + out = this; [tf, loc] = ismember (oldnames, this.cats); if ! all (tf) @@ -703,7 +703,7 @@ function summary (this) if ! isequal (sort (newcats), sort (this.cats)) error ('categorical.reordercats: newcats and oldcats must be the same sets, just reordered'); endif - + [tf, loc] = ismember (this.cats, newcats); new_codes = NaN (size (this.code)); new_codes(!this.tfMissing) = loc(this.code(!this.tfMissing)); @@ -711,7 +711,7 @@ function summary (this) out.code = new_codes; out.cats = newcats; endfunction - + ## -*- texinfo -*- ## @node categorical.setcats ## @deftypefn {Method} {@var{out} =} setcats (@var{obj}, @var{newcats}) @@ -726,13 +726,13 @@ function summary (this) function out = setcats (this, newcats) newcats = cellstr (newcats); newcats = newcats(:)'; - + if this.isOrdinal error ('categorical.setcats: Cannot set categories on Ordinal categorical arrays'); endif - + [tf, loc] = ismember (this.cats, newcats); - loc(~tf) = 0; + loc(!tf) = 0; codes = codes_with_nans (this); new_codes = NaN(size(codes)); new_codes(!isnan(codes)) = loc(codes(!isnan(codes))); @@ -740,7 +740,7 @@ function summary (this) out.code = uint16 (new_codes); out.tfMissing = out.tfMissing | isnan (new_codes) | new_codes == 0; endfunction - + ## -*- texinfo -*- ## @node categorical.isundefined ## @deftypefn {Method} {@var{out} =} isundefined (@var{obj}) @@ -757,7 +757,7 @@ function summary (this) function out = isundefined (this) out = this.tfMissing; endfunction - + ## -*- texinfo -*- ## @node categorical.ismissing ## @deftypefn {Method} {@var{out} =} ismissing (@var{obj}) @@ -773,7 +773,7 @@ function summary (this) function out = ismissing (this) out = this.tfMissing; endfunction - + ## -*- texinfo -*- ## @node categorical.isnanny ## @deftypefn {Method} {@var{out} =} isnanny (@var{obj}) @@ -781,7 +781,7 @@ function summary (this) ## Test whethere elements are NaN-ish. ## ## Checks where each element in @var{obj} is NaN-ish. For categorical - ## arrays, undefined values are considered NaN-ish; any other + ## arrays, undefined values are considered NaN-ish; any other ## value is not. ## ## Returns a logical array the same size as @var{obj}. @@ -790,7 +790,7 @@ function summary (this) function out = isnanny (this) out = ismissing (this); endfunction - + ## -*- texinfo -*- ## @node categorical.squeezecats ## @deftypefn {Method} {@var{out} =} squeezecats (@var{obj}) @@ -806,30 +806,30 @@ function summary (this) function out = squeezecats (this) error('categorical.squeezecategories: This is unimplemented. Sorry.'); endfunction - + function [A, B] = promote2 (A, B) - %PROMOTE2 Promote exactly 2 inputs to be comparable categoricals. - % - % This is an internal implementation method that will become private before - % release 1.0. - % - % TODO: Promotion of plain values should pick up the Ordinality of its - % categorical counterpart, to support stuff like `x < 'foo'`. - + #PROMOTE2 Promote exactly 2 inputs to be comparable categoricals. + # + # This is an internal implementation method that will become private before + # release 1.0. + # + # TODO: Promotion of plain values should pick up the Ordinality of its + # categorical counterpart, to support stuff like `x < 'foo'`. + inA = A; inB = B; - - % Make them both categoricals - % TODO: This implementation is wrong. It requires inputs to map to existing - % categories on the categorical input. Whether that is required should be - % determined by the Protected property; non-Protected categoricals may expand - % their set of categories automatically. + + # Make them both categoricals + # TODO: This implementation is wrong. It requires inputs to map to existing + # categories on the categorical input. Whether that is required should be + # determined by the Protected property; non-Protected categoricals may expand + # their set of categories automatically. if ! isa (A, 'categorical') if isordinal (B) B = promote_to_existing_categories (A, B); else A = categorical (A); - end + endif endif if ! isa (B, 'categorical') if isordinal (A) @@ -838,8 +838,8 @@ function summary (this) B = categorical (B); endif endif - - % Unify their category definitions + + # Unify their category definitions if isequal (A.cats, B.cats) return endif @@ -848,12 +848,12 @@ function summary (this) endif [A, B] = unify_nonordinal_categories (A, B); endfunction - + function [outA, outB] = unify_nonordinal_categories (A, B) mustBeA (A, 'categorical'); mustBeA (B, 'categorical'); - % TODO: In the protected case, eliminate categories that have no values on - % the non-protected side, to avoid possibly-spurious errors. + # TODO: In the protected case, eliminate categories that have no values on + # the non-protected side, to avoid possibly-spurious errors. if A.isProtected cats_only_in_B = setdiff (B.cats, A.cats); if ! isempty (cats_only_in_B) @@ -866,10 +866,10 @@ function summary (this) if ! isempty (cats_only_in_A) error ('categorical: input B is Protected, but input A has categories not in B: %s', ... strjoin (cats_only_in_A, ', ')); - endif + endif endif - % Okay, at this point, it's safe to expand categories on both sides, either - % because they're not protected, or they will gain no new categories + # Okay, at this point, it's safe to expand categories on both sides, either + # because they're not protected, or they will gain no new categories unified_categories = unique ([A.cats B.cats]); [tf, code_map_a] = ismember (A.cats, unified_categories); new_code_a = A.code; @@ -884,249 +884,249 @@ function summary (this) outB.code = new_code_b; outB.cats = unified_categories; endfunction - - % Relational operations - + + # Relational operations + function out = eq (A, B) - %EQ Equals + #EQ Equals [A, B] = promote2 (A, B); out = A.code == B.code; out(A.tfMissing | B.tfMissing) = false; endfunction - + function out = ne (A, B) - %NE Not equal + #NE Not equal [A, B] = promote2 (A, B); out = A.code != B.code; - out(A.tfMissing | B.tfMissing) = false; + out(A.tfMissing | B.tfMissing) = false; endfunction - - % TODO: lt, le, gt, ge - depends on more refined conversion semantics - + + # TODO: lt, le, gt, ge - depends on more refined conversion semantics + function [out, idx] = ismember (A, B, varargin) - %ISMEMBER Set membership - % - % [out, idx] = ismember (A, B) - % [out, idx] = ismember (A, B, "rows") - % - % Returns a logical array the same size as A. Also returns idx, an index - % into B of a matching item for each matched element or row in A. + #ISMEMBER Set membership + # + # [out, idx] = ismember (A, B) + # [out, idx] = ismember (A, B, "rows") + # + # Returns a logical array the same size as A. Also returns idx, an index + # into B of a matching item for each matched element or row in A. [A, B] = promote2 (A, B); - % Hack: use NaN indexes to handle missings + # Hack: use NaN indexes to handle missings code_A = codes_with_nans (A); code_B = codes_with_nans (B); [out, idx] = ismember (code_A, code_B, varargin{:}); endfunction - + function [out, indx, jndx] = unique (X, varargin) - %UNIQUE Unique values - % - % [out, indx, jndx] = unique (X) - % [out, indx, jndx] = unique (X, "rows") - % [out, indx, jndx] = unique (..., "first") - % [out, indx, jndx] = unique (..., "last") - % - % Returns a categorical array with the unique values from X, but the - % same category list and ordinality. - - % Hack: use NaN indexes to handle missings + #UNIQUE Unique values + # + # [out, indx, jndx] = unique (X) + # [out, indx, jndx] = unique (X, "rows") + # [out, indx, jndx] = unique (..., "first") + # [out, indx, jndx] = unique (..., "last") + # + # Returns a categorical array with the unique values from X, but the + # same category list and ordinality. + + # Hack: use NaN indexes to handle missings code = codes_with_nans (X); [u_code, indx, jndx] = unique (code, varargin{:}); out = X; out.code = uint16 (u_code); out.tfMissing = isnan (u_code); endfunction - + function [out, indx] = sort (this, varargin) - %SORT Sort values - % - % [out, indx] = sort (X) - % [out, indx] = sort (X, dim) - % [out, indx] = sort (X, mode) - % [out, indx] = sort (X, dim, mode) + #SORT Sort values + # + # [out, indx] = sort (X) + # [out, indx] = sort (X, dim) + # [out, indx] = sort (X, mode) + # [out, indx] = sort (X, dim, mode) code = codes_with_nans (this); [out_code, indx] = sort (code, varargin{:}); out = this; out.code = uint16(out_code); out.tfMissing = isnan (out_code); endfunction - + function [out, ixa, ixb] = union (A, B, varargin) - %UNION Set union - % - % [out, ixa, ixb] = union (A, B) - % [out, ixa, ixb] = union (A, B, "rows") - + #UNION Set union + # + # [out, ixa, ixb] = union (A, B) + # [out, ixa, ixb] = union (A, B, "rows") + [A, B] = promote2 (A, B); - % Hack: use NaN indexes to handle missings + # Hack: use NaN indexes to handle missings code_A = codes_with_nans (A); code_B = codes_with_nans (B); code_out = union (code_A, code_B, varargin{:}); - + out = A; out.code = uint16 (code_out); out.tfMissing = isnan (code_out); endfunction - + function [out, ixa, ixb] = intersect (A, B, varargin) - %INTERSECT Set intersection - % - % [out, ixa, ixb] = intersect (A, B) - % [out, ixa, ixb] = intersect (A, B, "rows") - + #INTERSECT Set intersection + # + # [out, ixa, ixb] = intersect (A, B) + # [out, ixa, ixb] = intersect (A, B, "rows") + [A, B] = promote2 (A, B); - % Hack: use NaN indexes to handle missings + # Hack: use NaN indexes to handle missings code_A = codes_with_nans (A); code_B = codes_with_nans (B); code_out = intersect (code_A, code_B, varargin{:}); - + out = A; out.code = uint16 (code_out); out.tfMissing = isnan (code_out); endfunction - + function [out, ixa, ixb] = setdiff (A, B, varargin) - %SETDIFF Set difference - % - % [out, ixa, ixb] = setdiff (A, B) - % [out, ixa, ixb] = setdiff (A, B, "rows") - + #SETDIFF Set difference + # + # [out, ixa, ixb] = setdiff (A, B) + # [out, ixa, ixb] = setdiff (A, B, "rows") + [A, B] = promote2 (A, B); - % Hack: use NaN indexes to handle missings + # Hack: use NaN indexes to handle missings code_A = codes_with_nans (A); code_B = codes_with_nans (B); code_out = setdiff (code_A, code_B, varargin{:}); - + out = A; out.code = uint16 (code_out); out.tfMissing = isnan (code_out); endfunction - + function [out, ixa, ixb] = setxor (A, B, varargin) - %SETXOR Set exclusive or - % - % [out, ixa, ixb] = setxor (A, B) - % [out, ixa, ixb] = setxor (A, B, "rows") - + #SETXOR Set exclusive or + # + # [out, ixa, ixb] = setxor (A, B) + # [out, ixa, ixb] = setxor (A, B, "rows") + [A, B] = promote2 (A, B); - % Hack: use NaN indexes to handle missings + # Hack: use NaN indexes to handle missings code_A = codes_with_nans (A); code_B = codes_with_nans (B); - + code_out = setxor (code_A, code_B, varargin{:}); - + out = A; out.code = uint16 (code_out); out.tfMissing = isnan (code_out); endfunction - + endmethods - - % Planar structural stuff + + # Planar structural stuff methods - + function out = size (this, dim) - %SIZE Size of array. + #SIZE Size of array. if nargin == 1 out = size (this.code); else out = size (this.code, dim); endif endfunction - + function out = numel (this) - %NUMEL Number of elements in array. + #NUMEL Number of elements in array. out = numel (this.code); endfunction - + function out = ndims (this) - %NDIMS Number of dimensions. + #NDIMS Number of dimensions. out = ndims(this.code); endfunction - + function out = isempty(this) - %ISEMPTY True for empty array. + #ISEMPTY True for empty array. out = isempty (this.code); endfunction - + function out = isscalar (this) - %ISSCALAR True if input is scalar. + #ISSCALAR True if input is scalar. out = isscalar (this.code); endfunction - + function out = isvector (this) - %ISVECTOR True if input is a vector. + #ISVECTOR True if input is a vector. out = isvector (this.code); endfunction - + function out = iscolumn (this) - %ISCOLUMN True if input is a column vector. + #ISCOLUMN True if input is a column vector. out = iscolumn (this.code); endfunction - + function out = isrow (this) - %ISROW True if input is a row vector. + #ISROW True if input is a row vector. out = isrow (this.code); endfunction - + function out = ismatrix (this) - %ISMATRIX True if input is a matrix. + #ISMATRIX True if input is a matrix. out = ismatrix (this.code); endfunction - + function this = reshape (this, varargin) - %RESHAPE Reshape array. + #RESHAPE Reshape array. this.code = reshape (this.code, varargin{:}); this.tfMissing = reshape (this.tfMissing, varargin{:}); endfunction - + function this = squeeze (this, varargin) - %SQUEEZE Remove singleton dimensions. + #SQUEEZE Remove singleton dimensions. this.code = squeeze (this.code, varargin{:}); this.tfMissing = squeeze (this.tfMissing, varargin{:}); endfunction - + function this = circshift (this, varargin) - %CIRCSHIFT Shift positions of elements circularly. + #CIRCSHIFT Shift positions of elements circularly. this.code = circshift (this.code, varargin{:}); this.tfMissing = circshift (this.tfMissing, varargin{:}); endfunction - + function this = permute (this, varargin) - %PERMUTE Permute array dimensions. + #PERMUTE Permute array dimensions. this.code = permute (this.code, varargin{:}); this.tfMissing = permute (this.tfMissing, varargin{:}); endfunction - + function this = ipermute (this, varargin) - %IPERMUTE Inverse permute array dimensions. + #IPERMUTE Inverse permute array dimensions. this.code = ipermute (this.code, varargin{:}); this.tfMissing = ipermute (this.tfMissing, varargin{:}); endfunction - + function this = repmat (this, varargin) - %REPMAT Replicate and tile array. + #REPMAT Replicate and tile array. this.code = repmat (this.code, varargin{:}); this.tfMissing = repmat (this.tfMissing, varargin{:}); endfunction - + function this = ctranspose (this, varargin) - %CTRANSPOSE Complex conjugate transpose. + #CTRANSPOSE Complex conjugate transpose. this.code = ctranspose (this.code, varargin{:}); this.tfMissing = ctranspose (this.tfMissing, varargin{:}); endfunction - + function this = transpose (this, varargin) - %TRANSPOSE Transpose vector or matrix. + #TRANSPOSE Transpose vector or matrix. this.code = transpose (this.code, varargin{:}); this.tfMissing = transpose (this.tfMissing, varargin{:}); endfunction - + function [this, nshifts] = shiftdim( this, n) - %SHIFTDIM Shift dimensions. + #SHIFTDIM Shift dimensions. if nargin > 1 this.code = shiftdim (this.code, n); this.tfMissing = shiftdim (this.code, n); @@ -1135,15 +1135,15 @@ function summary (this) [this.tfMissing, nshifts] = shiftdim (this.tfMissing); endif endfunction - + function out = cat (dim, varargin) - %CAT Concatenate arrays. + #CAT Concatenate arrays. args = varargin; for i = 1:numel(args) - if ~isa(args{i}, 'categorical') + if !isa(args{i}, 'categorical') args{i} = categorical(args{i}); - end - end + endif + endfor out = varargin{1}; for i = 2:numel (varargin) a = out; @@ -1154,50 +1154,50 @@ function summary (this) out.tfMissing = cat(dim, a.tfMissing, b.tfMissing); endfor endfunction - + function out = horzcat (varargin) - %HORZCAT Horizontal concatenation. + #HORZCAT Horizontal concatenation. out = cat (2, varargin{:}); endfunction - + function out = vertcat (varargin) - %VERTCAT Vertical concatenation. + #VERTCAT Vertical concatenation. out = cat (1, varargin{:}); endfunction - + function this = subsasgn(this, s, b) - %SUBSASGN Subscripted assignment. - - % Chained subscripts + #SUBSASGN Subscripted assignment. + + # Chained subscripts if numel(s) > 1 rhs_in = subsref(this, s(1)); rhs = subsasgn(rhs_in, s(2:end), b); else rhs = b; endif - - % Base case + + # Base case switch s(1).type case '()' this = subsasgnParensPlanar(this, s(1), rhs); case '{}' - % This works just like ()-assignment, and is only defined for - % compatibility with cellcode + # This works just like ()-assignment, and is only defined for + # compatibility with cellcode this = subsasgnParensPlanar(this, s(1), rhs); case '.' error ('categorical:BadOperation', '.-assignment is not defined for categorical arrays'); endswitch endfunction - + function varargout = subsref(this, s) - %SUBSREF Subscripted reference. - - % Base case + #SUBSREF Subscripted reference. + + # Base case switch s(1).type case '()' varargout = { subsrefParensPlanar(this, s(1)) }; case '{}' - % This pops out char arrays + # This pops out char arrays varargout = subsrefParensPlanar (this, s(1)); case '.' switch s(1).subs @@ -1213,24 +1213,24 @@ function summary (this) error ('Invalid property for .-referencing: %s', s(1).subs); endswitch endswitch - - % Chained reference + + # Chained reference if numel (s) > 1 out = subsref (out, s(2:end)); endif endfunction - + endmethods - + methods function varargout = promote_to_existing_categories(this, varargin) - % Convert strings or numerics to categorical, using an existing categorical - % - % varargout = promote_to_existing_categories(this, varargin) - % - % Converts input string or numeric arrays to categorical, using the - % existing categories mapping in this. Strings or numeric codes which do - % not correspond to a defined category in this are an error. + # Convert strings or numerics to categorical, using an existing categorical + # + # varargout = promote_to_existing_categories(this, varargin) + # + # Converts input string or numeric arrays to categorical, using the + # existing categories mapping in this. Strings or numeric codes which do + # not correspond to a defined category in this are an error. varargout = cell (size (varargin)); for i_arg = 1:numel(varargin) arg = varargin{i_arg}; @@ -1255,63 +1255,63 @@ function summary (this) endfor endfunction endmethods - + methods (Access=private) - + function this = subsasgnParensPlanar (this, s, rhs) - %SUBSASGNPARENSPLANAR ()-assignment for planar object - if ~isa (rhs, 'categorical') - % TODO: This conversion is probably wrong. It probably needs to be done - % with respect to this's existing cats list + #SUBSASGNPARENSPLANAR ()-assignment for planar object + if !isa (rhs, 'categorical') + # TODO: This conversion is probably wrong. It probably needs to be done + # with respect to this's existing cats list [this, rhs] = promote2 (this, rhs); endif this.code(s.subs{:}) = rhs.code; this.tfMissing(s.subs{:}) = rhs.tfMissing; endfunction - + function out = subsrefParensPlanar(this, s) - %SUBSREFPARENSPLANAR ()-indexing for planar object + #SUBSREFPARENSPLANAR ()-indexing for planar object out = this; out.code = this.code(s.subs{:}); out.tfMissing = this.tfMissing(s.subs{:}); endfunction - + function out = parensRef(this, varargin) - %PARENSREF ()-indexing, for this class's internal use + #PARENSREF ()-indexing, for this class's internal use out = subsrefParensPlanar (this, struct ('subs', {varargin})); endfunction - + function out = subset(this, varargin) - %SUBSET Subset array by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the RHS, which don't work properly inside the class - % because they don't respect the subsref() override. + #SUBSET Subset array by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the RHS, which don't work properly inside the class + # because they don't respect the subsref() override. out = parensRef (this, varargin{:}); endfunction - + function out = asgn(this, ix, value) - %ASGN Assign array elements by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the LHS, which don't work properly inside - % the class because they don't respect the subsasgn() override. - if ~iscell(ix) + #ASGN Assign array elements by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the LHS, which don't work properly inside + # the class because they don't respect the subsasgn() override. + if !iscell(ix) ix = { ix }; endif s.type = '()'; s.subs = ix; out = subsasgnParensPlanar(this, s, value); endfunction - + endmethods - + methods (Access = private) function out = codes_with_nans (this) out = single (this.code); out(this.tfMissing) = NaN; endfunction - + function out = remove_unused_cats (this, cats_to_delete) - %REMOVE_UNUSED_CATS Removes specified categories, as long as they have no values + #REMOVE_UNUSED_CATS Removes specified categories, as long as they have no values [tf, cat_codes_to_rm] = ismember (cats_to_delete, this.cats); cat_codes_to_rm = cat_codes_to_rm(tf); cats_to_delete2 = cats_to_delete(tf); @@ -1333,5 +1333,7 @@ function summary (this) out.code = uint16 (new_codes); out.cats = new_cats; endfunction + endmethods + endclassdef diff --git a/inst/cell2table.m b/inst/cell2table.m index 984f54d2..9a586eea 100644 --- a/inst/cell2table.m +++ b/inst/cell2table.m @@ -30,18 +30,18 @@ ## ## @end deftypefn function out = cell2table(c, varargin) - %CELL2TABLE Convert a cell array to a table + #CELL2TABLE Convert a cell array to a table - if ~iscell (c) + if !iscell (c) error ('cell2table: Input must be cell; got %s', class (c)); endif if ndims (c) > 2 error ('cell2table: Input must be 2-D; got %d-D', ndims (c)); endif - - % Peel off trailing options - [opts, args] = peelOffNameValueOptions (varargin, {'VariableNames', 'RowNames'}); - if ~isempty (args) + + # Peel off trailing options + [opts, args] = peelOffNameValueOptions (varargin, {'VariableNames', 'RowNames'}); + if !isempty (args) error ('cell2table: Unrecognized options'); endif @@ -49,10 +49,10 @@ colVals = cell (1, nCols); for iCol = 1:nCols if iscellstr (c(:,iCol)) - % Special-case char conversion + # Special-case char conversion colVals{iCol} = c(:,iCol); else - % Cheap hack to test for cat-ability + # Cheap hack to test for cat-ability try x = cat (1, c{:,iCol}); if size (x, 1) == size (c, 1) @@ -60,12 +60,12 @@ continue endif catch - % Nope, couldn't cat. Fall through. + # Nope, couldn't cat. Fall through. end colVals{iCol} = c(:,iCol); endif endfor - + if isfield (opts, 'VariableNames') varNames = opts.VariableNames; else @@ -74,10 +74,11 @@ varNames{iCol} = sprintf('Var%d', iCol); endfor endif - + optArgs = {'VariableNames', varNames}; if isfield (opts, 'RowNames') optArgs = [optArgs {'RowNames', opts.RowNames}]; endif - out = table (colVals{:}, optArgs{:}); + out = table (colVals{:}, optArgs{:}); + endfunction diff --git a/inst/colvecfun.m b/inst/colvecfun.m index d9985333..f14b0689 100644 --- a/inst/colvecfun.m +++ b/inst/colvecfun.m @@ -30,12 +30,12 @@ ## together in the same shape as x. ## ## @end deftypefn -function out = colvecfun (fcn, x) +function out = colvecfun (fcn, x) narginchk (2, 2); if ! isa (fcn, 'function_handle') error ('colvecfun: input fcn must be a function handle; got a %s', class (fcn)); endif - + out = colvecfun_impl (fcn, x); endfunction diff --git a/inst/contains.m b/inst/contains.m index b99c9eca..41b62831 100644 --- a/inst/contains.m +++ b/inst/contains.m @@ -21,7 +21,7 @@ ## ## Tests whether the given strings contain the given pattern(s). ## -## @var{str} (char, cellstr, or string) is a list of strings to compare against +## @var{str} (char, cellstr, or string) is a list of strings to compare against ## pattern. ## ## @var{pattern} (char, cellstr, or string) is a list of patterns to match. These are @@ -33,26 +33,26 @@ ## ## @end deftypefn function out = contains (str, pattern, varargin) - + [opts, args] = peelOffNameValueOptions (varargin, {'IgnoreCase'}); ignore_case = false; if isfield (opts, 'IgnoreCase') mustBeScalarLogical (opts.IgnoreCase, 'IgnoreCase option'); ignore_case = opts.IgnoreCase; endif - + str = cellstr (str); pattern = cellstr (pattern); - + if any (cellfun ('isempty', pattern(:))) out = true (size (str)); return; endif - - % TODO: This implementation is inefficient, because strfind() scans the - % full string for multiple matches. Could replace this whole function with - % an oct-file that does efficient scanning. - + + # TODO: This implementation is inefficient, because strfind() scans the + # full string for multiple matches. Could replace this whole function with + # an oct-file that does efficient scanning. + if ignore_case str = lower (str); pattern = lower (pattern); diff --git a/inst/datetime.m b/inst/datetime.m index 53f53a3c..9094c3f9 100644 --- a/inst/datetime.m +++ b/inst/datetime.m @@ -40,7 +40,7 @@ ## ## The underlying datenums that represent the points in time. These are always in UTC. ## - ## This is a planar property: the size of @code{dnums} is the same size as the + ## This is a planar property: the size of @code{dnums} is the same size as the ## containing @code{datetime} array object. ## ## @end deftypeivar @@ -55,28 +55,28 @@ ## is presented in for strings and broken-down times, but does not change the ## underlying UTC times that its elements represent. ## - ## @end deftypeivar + ## @end deftypeivar ## ## @deftypeivar datetime @code{char} Format ## ## The format to display this @code{datetime} in. Currently unsupported. ## ## @end deftypeivar - + properties (Constant) PosixEpochDatenum = datenum (1970, 1, 1); SystemTimeZone = tblish.chrono.internal.detect_system_timezone; endproperties properties (Access = private) - % The underlying datenum values, always in UTC + # The underlying datenum values, always in UTC dnums = NaN % planar endproperties properties - % Time zone code as charvec. This governs how display strings and broken-down - % times are calculated. + # Time zone code as charvec. This governs how display strings and broken-down + # times are calculated. TimeZone = '' - % Format to display these dates in. Changing the format is currently unimplemented. + # Format to display these dates in. Changing the format is currently unimplemented. Format = 'default' endproperties properties (Dependent = true) @@ -114,20 +114,20 @@ ## ## @end deftypefn function this = datetime (varargin) - %DATETIME Construct a new datetime array. - % - % datetime () - % datetime (datevec) - % datetime (datestrs) - % datetime (in, 'ConvertFrom', ConvertFrom) - % datetime (Y, M, D) - % datetime (Y, M, D, H, MI, S) - % datetime (..., 'Format', Format, 'InputFormat', InputFormat, ... - % 'PivotYear', PivotYear, 'TimeZone', TimeZone) - % - % datetime constructs a new datetime array. - - % Peel off options + #DATETIME Construct a new datetime array. + # + # datetime () + # datetime (datevec) + # datetime (datestrs) + # datetime (in, 'ConvertFrom', ConvertFrom) + # datetime (Y, M, D) + # datetime (Y, M, D, H, MI, S) + # datetime (..., 'Format', Format, 'InputFormat', InputFormat, ... + # 'PivotYear', PivotYear, 'TimeZone', TimeZone) + # + # datetime constructs a new datetime array. + + # Peel off options args = varargin; knownOptions = {'Format','InputFormat','Locale','PivotYear','TimeZone'}; opts = struct; @@ -136,8 +136,8 @@ opts.(args{end-1}) = args{end}; args(end-1:end) = []; endwhile - - % Handle inputs + + # Handle inputs timeZone = ''; if isfield (opts, 'TimeZone') timeZone = opts.TimeZone; @@ -148,13 +148,13 @@ case 1 x = args{1}; if isnumeric (x) - % Convert date vectors + # Convert date vectors dnums = datenum (x); elseif ischar (x) || iscellstr (x) || isa (x, 'string') x = cellstr (x); tfRelative = ismember (x, {'today','tomorrow','yesterday','now'}); if all (tfRelative) - if ~isscalar (x) + if !isscalar (x) error ('Multiple arguments not allowed for relativeDay format'); endif switch x{1} @@ -168,12 +168,12 @@ dnums = now; endswitch else - % They're datestrs - % TODO: Support Locale option + # They're datestrs + # TODO: Support Locale option if isfield (opts, 'Locale') error ('Locale option is unimplemented'); endif - % TODO: Support PivotYear option + # TODO: Support PivotYear option if isfield (opts, 'PivotYear') error ('PivotYear option is unimplemented'); endif @@ -196,8 +196,8 @@ error ('datetime: Invalid input type: %s', class (x)); endif case 2 - % Undocumented calling form for Tablicious's internal use - if ~isequal (args{2}, 'Backdoor') + # Undocumented calling form for Tablicious's internal use + if !isequal (args{2}, 'Backdoor') error ('Invalid number of inputs (excluding options): %d', numel (args)); endif dnums = args{1}; @@ -212,7 +212,7 @@ timeZone = 'UTC'; otherwise error ('Unsupported ConvertFrom format: %s', in3); - % TODO: Implement more formats + # TODO: Implement more formats endswitch elseif isnumeric (in2) [Y, M, D] = varargin{:}; @@ -233,11 +233,11 @@ otherwise error ('Invalid number of inputs: %d', nargin); endswitch - - % Construct - if ~isempty (timeZone) + + # Construct + if !isempty (timeZone) this.TimeZone = timeZone; - if ~isequal (timeZone, 'UTC') + if !isequal (timeZone, 'UTC') dnums = datetime.convertDatenumTimeZone(dnums, timeZone, 'UTC'); endif endif @@ -247,7 +247,7 @@ endif endfunction endmethods - + methods (Static) ## -*- texinfo -*- ## @node datetime.ofDatenum @@ -261,14 +261,14 @@ function out = ofDatenum (dnums) out = datetime (dnums, 'ConvertFrom', 'datenum'); endfunction - + ## -*- texinfo -*- ## @node datetime.ofDatestruct ## @deftypefn {Static Method} {@var{obj} =} datetime.ofDatestruct (@var{dstruct}) ## ## Converts a datestruct to a datetime array. ## - ## A datestruct is a special struct format used by Tablicious that has fields + ## A datestruct is a special struct format used by Tablicious that has fields ## Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype. ## ## Returns an unzoned @code{datetime} array. @@ -278,7 +278,7 @@ dnums = datetime.datestruct2datenum (dstruct); out = datetime (dnums, 'ConvertFrom', 'datenum'); endfunction - + function out = datestruct2datenum (dstruct) sz = size (dstruct.Year); n = numel (dstruct.Year); @@ -291,14 +291,14 @@ dvec(:,6) = dstruct.Second(:); out = datenum (dvec); endfunction - + ## -*- texinfo -*- ## @node datetime.NaT ## @deftypefn {Static Method} {@var{out} =} datetime.NaT () ## @deftypefnx {Static Method} {@var{out} =} datetime.NaT (@var{sz}) ## ## “Not-a-Time”: Creates NaT-valued arrays. - ## + ## ## Constructs a new @code{datetime} array of all @code{NaT} values of ## the given size. If no input @var{sz} is given, the result is a scalar @code{NaT}. ## @@ -311,7 +311,7 @@ function out = NaT () out = datetime (NaN, 'Backdoor'); endfunction - + ## -*- texinfo -*- ## @node datetime.posix2datenum ## @deftypefn {Static Method} {@var{dnums} =} datetime.posix2datenum (@var{pdates}) @@ -326,7 +326,7 @@ function out = posix2datenum (pdates) out = (double (pdates) / (24 * 60 * 60)) + datetime.PosixEpochDatenum; endfunction - + ## -*- texinfo -*- ## @node datetime.datenum2posix ## @deftypefn {Static Method} {@var{out} =} datetime.datenum2posix (@var{dnums}) @@ -374,7 +374,7 @@ ## ## @end deftypefn function [keysA, keysB] = proxyKeys (a, b) - %PROXYKEYS Proxy key values for sorting and set operations + #PROXYKEYS Proxy key values for sorting and set operations keysA = a.dnums(:); keysB = b.dnums(:); endfunction @@ -395,105 +395,105 @@ endif this.TimeZone = x; endfunction - + function this = set.Format (this, x) error ('Changing datetime format is currently unimplemented'); endfunction - + function out = get.Year (this) s = datestruct (this); out = s.Year; endfunction - + function this = set.Year (this, x) s = datestruct (this); s.Year(:) = x; this.dnums = datetime.datestruct2datenum (s); endfunction - + function out = get.Month (this) s = datestruct (this); out = s.Month; endfunction - + function this = set.Month (this, x) s = datestruct (this); s.Month(:) = x; this.dnums = datetime.datestruct2datenum (s); endfunction - + function out = get.Day (this) s = datestruct (this); out = s.Day; endfunction - + function this = set.Day (this, x) s = datestruct (this); s.Day(:) = x; this.dnums = datetime.datestruct2datenum (s); endfunction - + function out = get.Hour (this) s = datestruct (this); out = s.Hour; endfunction - + function this = set.Hour (this, x) s = datestruct (this); s.Hour(:) = x; this.dnums = datetime.datestruct2datenum (s); endfunction - + function out = get.Minute (this) s = datestruct (this); out = s.Minute; endfunction - + function this = set.Minute (this, x) s = datestruct (this); s.Minute(:) = x; this.dnums = datetime.datestruct2datenum (s); endfunction - + function out = get.Second (this) s = datestruct (this); out = s.Second; endfunction - + function this = set.Second (this, x) s = datestruct (this); s.Second(:) = x; this.dnums = datetime.datestruct2datenum (s); endfunction - + function out = year (this) out = this.Year; endfunction - + function out = month (this) out = this.Month; endfunction - + function out = day (this) out = this.Day; endfunction - + function out = hour (this) out = this.Hour; endfunction - + function out = minute (this) out = this.Minute; endfunction - + function out = second (this) out = this.Second; endfunction - + function out = quarter (this) out = ceil (this.Month / 3); endfunction - + ## -*- texinfo -*- ## @node datetime.ymd ## @deftypefn {Method} {[@var{y}, @var{m}, @var{d}] =} ymd (@var{obj}) @@ -511,7 +511,7 @@ m = s.Month; d = s.Day; endfunction - + ## -*- texinfo -*- ## @node datetime.hms ## @deftypefn {Method} {[@var{h}, @var{m}, @var{s}] =} hms (@var{obj}) @@ -529,7 +529,7 @@ m = st.Minute; s = st.Second; endfunction - + ## -*- texinfo -*- ## @node datetime.ymdhms ## @deftypefn {Method} {[@var{y}, @var{m}, @var{d}, @var{h}, @var{mi}, @var{s}] =} ymdhms @ @@ -543,9 +543,9 @@ ## ## @end deftypefn function [y, m, d, h, mi, s] = ymdhms (this) - %YMDHMS Get the year, month, day, etc components of this. - % - % This is an Octave extension. + #YMDHMS Get the year, month, day, etc components of this. + # + # This is an Octave extension. ds = datestruct (this); y = ds.Year; m = ds.Month; @@ -554,7 +554,7 @@ mi = ds.Minute; s = ds.Second; endfunction - + ## -*- texinfo -*- ## @node datetime.timeofday ## @deftypefn {Method} {@var{out} =} timeofday (@var{obj}) @@ -567,11 +567,11 @@ ## ## @end deftypefn function out = timeofday (this) - % Use mod, not rem, so negative dates give correct result + # Use mod, not rem, so negative dates give correct result local_dnums = datetime.convertDatenumTimeZone (this.dnums, 'UTC', this.TimeZone); out = duration.ofDays (mod (local_dnums, 1)); endfunction - + ## -*- texinfo -*- ## @node datetime.week ## @deftypefn {Method} {@var{out} =} week (@var{obj}) @@ -584,36 +584,36 @@ function out = week (this) error('week() is unimplemented'); endfunction - + function display (this) - %DISPLAY Custom display. + #DISPLAY Custom display. in_name = inputname (1); - if ~isempty (in_name) + if !isempty (in_name) fprintf ('%s =\n', in_name); endif disp (this); endfunction function disp (this) - %DISP Custom display. + #DISP Custom display. if isempty (this) fprintf ('Empty %s %s\n', size2str (size (this)), class (this)); elseif isscalar (this) str = dispstrs (this); str = str{1}; - if ~isempty (this.TimeZone) + if !isempty (this.TimeZone) str = [str ' ' this.TimeZone]; endif fprintf (' %s\n', str); else txt = tblish.chrono.internal.format_dispstr_array (dispstrs (this)); fprintf ('%s\n', txt); - if ~isempty (this.TimeZone) + if !isempty (this.TimeZone) fprintf (' %s\n', this.TimeZone); endif endif endfunction - + ## -*- texinfo -*- ## @node datetime.dispstrs ## @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) @@ -625,7 +625,7 @@ function disp (this) ## @end deftypefn function out = dispstrs (this) - % TODO: Uh oh; TimeZone isn't included in the output here! + # TODO: Uh oh; TimeZone isn't included in the output here! if isempty (this.TimeZone) local_dnums = this.dnums; else @@ -634,11 +634,11 @@ function disp (this) out = cell (size (this)); tfNaN = isnan (local_dnums); out(tfNaN) = {'NaT'}; - if any(~tfNaN(:)) - out(~tfNaN) = cellstr (datestr (local_dnums(~tfNaN))); + if any(!tfNaN(:)) + out(!tfNaN) = cellstr (datestr (local_dnums(!tfNaN))); endif endfunction - + ## -*- texinfo -*- ## @node datetime.datestr ## @deftypefn {Method} {@var{out} =} datestr (@var{obj}) @@ -651,10 +651,10 @@ function disp (this) ## ## @end deftypefn function out = datestr (this, varargin) - %DATESTR Format as date string. + #DATESTR Format as date string. out = datestr (this.dnums, varargin{:}); endfunction - + ## -*- texinfo -*- ## @node datetime.datestrs ## @deftypefn {Method} {@var{out} =} datestrs (@var{obj}) @@ -667,16 +667,16 @@ function disp (this) ## ## @end deftypefn function out = datestrs (this, varargin) - %DATESTSRS Format as date strings. - % - % Returns cellstr. - % - % This is an Octave extension. + #DATESTSRS Format as date strings. + # + # Returns cellstr. + # + # This is an Octave extension. s = datestr (this); c = cellstr (s); out = reshape (c, size (this)); endfunction - + function out = sprintf(fmt, varargin) args = varargin; for i = 1:numel (args) @@ -686,7 +686,7 @@ function disp (this) endfor out = sprintf (fmt, args{:}); endfunction - + function out = fprintf(varargin) args = varargin; if isnumeric (args{1}) @@ -741,7 +741,7 @@ function disp (this) out.Minute = reshape (dvec(:,5), sz); out.Second = reshape (dvec(:,6), sz); endfunction - + ## -*- texinfo -*- ## @node datetime.posixtime ## @deftypefn {Method} {@var{out} =} posixtime (@var{obj}) @@ -758,7 +758,7 @@ function disp (this) function out = posixtime (this) out = datetime.datenum2posix (this.dnums); endfunction - + ## -*- texinfo -*- ## @node datetime.datenum ## @deftypefn {Method} {@var{out} =} datenum (@var{obj}) @@ -801,7 +801,7 @@ function disp (this) endfor out = reshape (out, size (this)); endfunction - + ## -*- texinfo -*- ## @node datetime.localtime ## @deftypefn {Method} {@var{out} =} localtime (@var{obj}) @@ -848,10 +848,10 @@ function disp (this) ## ## @end deftypefn function out = isnat (this) - %ISNAT True if input is NaT. + #ISNAT True if input is NaT. out = isnan (this.dnums); endfunction - + ## -*- texinfo -*- ## @node datetime.isnan ## @deftypefn {Method} {@var{out} =} isnan (@var{obj}) @@ -863,13 +863,13 @@ function disp (this) ## ## @end deftypefn function out = isnan (this) - %ISNAN Alias for isnat. - % - % This is an Octave extension + #ISNAN Alias for isnat. + # + # This is an Octave extension out = isnat (this); endfunction - - % Relational operations + + # Relational operations ## -*- texinfo -*- ## @node datetime.lt @@ -885,7 +885,7 @@ function disp (this) ## ## @end deftypefn function out = lt (A, B) - %LT Less than. + #LT Less than. [A, B] = datetime.promote (A, B); out = A.dnums < B.dnums; endfunction @@ -904,7 +904,7 @@ function disp (this) ## ## @end deftypefn function out = le (A, B) - %LE Less than or equal. + #LE Less than or equal. [A, B] = datetime.promote (A, B); out = A.dnums <= B.dnums; endfunction @@ -923,7 +923,7 @@ function disp (this) ## ## @end deftypefn function out = ne (A, B) - %NE Not equal. + #NE Not equal. [A, B] = datetime.promote (A, B); out = A.dnums ~= B.dnums; endfunction @@ -942,7 +942,7 @@ function disp (this) ## ## @end deftypefn function out = eq (A, B) - %EQ Equals. + #EQ Equals. [A, B] = datetime.promote (A, B); out = A.dnums == B.dnums; endfunction @@ -961,7 +961,7 @@ function disp (this) ## ## @end deftypefn function out = ge (A, B) - %GE Greater than or equal. + #GE Greater than or equal. [A, B] = datetime.promote (A, B); out = A.dnums >= B.dnums; endfunction @@ -980,13 +980,13 @@ function disp (this) ## ## @end deftypefn function out = gt (A, B) - %GT Greater than. + #GT Greater than. [A, B] = datetime.promote (A, B); out = A.dnums > B.dnums; endfunction - % Arithmetic - + # Arithmetic + ## -*- texinfo -*- ## @node datetime.plus ## @deftypefn {Method} {@var{out} =} plus (@var{A}, @var{B}) @@ -1003,12 +1003,12 @@ function disp (this) ## ## @end deftypefn function out = plus (A, B) - %PLUS Addition. + #PLUS Addition. A_in = A; B_in = B; - % TODO: Maybe support `duration/calendarDuration + datetime` form by just swapping the - % arguments. - if ~isa (A, 'datetime') + # TODO: Maybe support `duration/calendarDuration + datetime` form by just swapping the + # arguments. + if !isa (A, 'datetime') error ('datetime.plus: Expected left-hand side of A + B to be a datetime; got a %s', ... class (A)); endif @@ -1050,12 +1050,12 @@ function disp (this) out.dnums = tmp.dnums; endif endfunction - + ## -*- texinfo -*- ## @node datetime.minus ## @deftypefn {Method} {@var{out} =} minus (@var{A}, @var{B}) ## - ## Subtraction (@code{-} operator). Subtracts a @code{duration}, + ## Subtraction (@code{-} operator). Subtracts a @code{duration}, ## @code{calendarDuration} or numeric @var{B} from a @code{datetime} @var{A}, ## or subtracts two @code{datetime}s from each other. ## @@ -1069,7 +1069,7 @@ function disp (this) ## ## @end deftypefn function out = minus (A, B) - %MINUS Subtraction. + #MINUS Subtraction. if isa (A, 'datetime') && isa (B, 'datetime') [A, B] = datetime.promote(A, B); out = duration.ofDays (A.dnums - B.dnums); @@ -1077,7 +1077,7 @@ function disp (this) out = A + -B; endif endfunction - + ## -*- texinfo -*- ## @node datetime.diff ## @deftypefn {Method} {@var{out} =} diff (@var{obj}) @@ -1091,10 +1091,10 @@ function disp (this) ## ## @end deftypefn function out = diff (this) - %DIFF Differences between elements + #DIFF Differences between elements out = duration.ofDays (diff (this.dnums)); endfunction - + ## -*- texinfo -*- ## @node datetime.isbetween ## @deftypefn {Method} {@var{out} =} isbetween (@var{obj}, @var{lower}, @var{upper}) @@ -1109,11 +1109,11 @@ function disp (this) ## ## @end deftypefn function out = isbetween (this, lower, upper) - %ISBETWEEN Whether elements are within a time interval + #ISBETWEEN Whether elements are within a time interval [this, lower, upper] = datetime.promote (this, lower, upper); out = lower.dnums <= this.dnums && this.dnums <= upper.dnums; endfunction - + function out = colon (this, varargin) narginchk (2, 3); switch nargin @@ -1125,7 +1125,7 @@ function disp (this) limit = varargin{2}; endswitch if isa (increment, 'calendarDuration') - % TODO: Fix this slow, Shlemiel implementation + # TODO: Fix this slow, Shlemiel implementation out = this; while subset (out, numel(out)) < limit next_date = subset (out, numel(out)) + increment; @@ -1136,16 +1136,16 @@ function disp (this) if isnumeric (increment) increment = duration.ofDays (increment); endif - if ~isa (increment, 'duration') + if !isa (increment, 'duration') error ('increment must be a duration object'); endif - if ~isscalar (this) || ~isscalar (limit) + if !isscalar (this) || !isscalar (limit) error ('base and limit must both be scalar'); endif out = this; out.dnums = this.dnums:increment.days:limit.dnums; endfunction - + ## -*- texinfo -*- ## @node datetime.linspace ## @deftypefn {Method} {@var{out} =} linspace (@var{from}, @var{to}, @var{n}) @@ -1164,14 +1164,14 @@ function disp (this) ## ## @end deftypefn function out = linspace (from, to, n) - %LINSPACE Linearly-spaced values + #LINSPACE Linearly-spaced values narginchk (2, 3); if nargin < 3; n = 100; endif if isnumeric (from) from = datetime.ofDatenum (from); endif [from, to] = datetime.promote (from, to); - if ~isscalar (from) || ~isscalar (to) + if !isscalar (from) || !isscalar (to) error ('Inputs must be scalar'); endif out = from; @@ -1179,153 +1179,153 @@ function disp (this) endfunction endmethods - % Planar boilerplate stuff - + # Planar boilerplate stuff + methods function out = numel (this) - %NUMEL Number of elements in array. + #NUMEL Number of elements in array. out = numel (this.dnums); endfunction - + function out = ndims (this) - %NDIMS Number of dimensions. + #NDIMS Number of dimensions. out = ndims (this.dnums); endfunction - + function out = size (this, dim) - %SIZE Size of array. + #SIZE Size of array. if nargin == 1 out = size (this.dnums); else out = size (this.dnums, dim); endif endfunction - + function out = isempty (this) - %ISEMPTY True for empty array. + #ISEMPTY True for empty array. out = isempty (this.dnums); endfunction - + function out = isscalar (this) - %ISSCALAR True if input is scalar. + #ISSCALAR True if input is scalar. out = isscalar (this.dnums); endfunction - + function out = isvector (this) - %ISVECTOR True if input is a vector. + #ISVECTOR True if input is a vector. out = isvector (this.dnums); endfunction - + function out = iscolumn (this) - %ISCOLUMN True if input is a column vector. + #ISCOLUMN True if input is a column vector. out = iscolumn (this.dnums); endfunction - + function out = isrow (this) - %ISROW True if input is a row vector. + #ISROW True if input is a row vector. out = isrow (this.dnums); endfunction - + function out = ismatrix (this) - %ISMATRIX True if input is a matrix. + #ISMATRIX True if input is a matrix. out = ismatrix (this.dnums); endfunction - + function this = reshape (this, varargin) - %RESHAPE Reshape array. + #RESHAPE Reshape array. this.dnums = reshape (this.dnums, varargin{:}); endfunction - + function this = squeeze (this, varargin) - %SQUEEZE Remove singleton dimensions. + #SQUEEZE Remove singleton dimensions. this.dnums = squeeze (this.dnums, varargin{:}); endfunction - + function this = circshift (this, varargin) - %CIRCSHIFT Shift positions of elements circularly. + #CIRCSHIFT Shift positions of elements circularly. this.dnums = circshift (this.dnums, varargin{:}); endfunction - + function this = permute (this, varargin) - %PERMUTE Permute array dimensions. + #PERMUTE Permute array dimensions. this.dnums = permute (this.dnums, varargin{:}); endfunction - + function this = ipermute (this, varargin) - %IPERMUTE Inverse permute array dimensions. + #IPERMUTE Inverse permute array dimensions. this.dnums = ipermute (this.dnums, varargin{:}); endfunction - + function this = repmat (this, varargin) - %REPMAT Replicate and tile array. + #REPMAT Replicate and tile array. this.dnums = repmat (this.dnums, varargin{:}); endfunction - + function this = ctranspose (this, varargin) - %CTRANSPOSE Complex conjugate transpose. + #CTRANSPOSE Complex conjugate transpose. this.dnums = ctranspose (this.dnums, varargin{:}); endfunction - + function this = transpose (this, varargin) - %TRANSPOSE Transpose vector or matrix. + #TRANSPOSE Transpose vector or matrix. this.dnums = transpose (this.dnums, varargin{:}); endfunction - + function [this, nshifts] = shiftdim (this, n) - %SHIFTDIM Shift dimensions. + #SHIFTDIM Shift dimensions. if nargin > 1 this.dnums = shiftdim (this.dnums, n); else [this.dnums, nshifts] = shiftdim (this.dnums); endif endfunction - + function out = cat (dim, varargin) - %CAT Concatenate arrays. + #CAT Concatenate arrays. args = datetime.promotec (varargin); out = args{1}; fieldArgs = cellfun (@(obj) obj.dnums, args, 'UniformOutput', false); out.dnums = cat (dim, fieldArgs{:}); endfunction - + function out = horzcat (varargin) - %HORZCAT Horizontal concatenation. + #HORZCAT Horizontal concatenation. out = cat (2, varargin{:}); endfunction - + function out = vertcat (varargin) - %VERTCAT Vertical concatenation. + #VERTCAT Vertical concatenation. out = cat (1, varargin{:}); endfunction - + function this = subsasgn (this, s, b) - %SUBSASGN Subscripted assignment. - - % Chained subscripts + #SUBSASGN Subscripted assignment. + + # Chained subscripts if numel(s) > 1 rhs_in = subsref (this, s(1)); rhs = subsasgn (rhs_in, s(2:end), b); else rhs = b; endif - - % Base case + + # Base case switch s(1).type case '()' this = subsasgnParensPlanar (this, s(1), rhs); - %TODO: Correct value of vivified indexes to NaN; right now it's zero. + #TODO: Correct value of vivified indexes to NaN; right now it's zero. case '{}' error ('{}-subscripting is not supported for class %s', class (this)); case '.' this.(s(1).subs) = rhs; endswitch endfunction - + function out = subsref (this, s) - %SUBSREF Subscripted reference. - - % Base case + #SUBSREF Subscripted reference. + + # Base case switch s(1).type case '()' out = subsrefParensPlanar (this, s(1)); @@ -1334,26 +1334,26 @@ function disp (this) case '.' out = this.(s(1).subs); endswitch - - % Chained reference + + # Chained reference if numel (s) > 1 out = subsref (out, s(2:end)); endif endfunction - + function [out, Indx] = sort (this) - %SORT Sort array elements. + #SORT Sort array elements. if isvector (this) isRow = isrow (this); this = subset (this, ':'); - % NaNs sort stably to end, so handle them separately + # NaNs sort stably to end, so handle them separately tfNan = isnan (this); nans = subset (this, tfNan); - nonnans = subset (this, ~tfNan); - ixNonNan = find (~tfNan); + nonnans = subset (this, !tfNan); + ixNonNan = find (!tfNan); proxy = proxyKeys (nonnans); [~, ix] = sortrows (proxy); - out = [subset(nonnans, ix); nans]; + out = [subset(nonnans, ix); nans]; Indx = [ixNonNan(ix); find (tfNan)]; if isRow out = out'; @@ -1371,10 +1371,10 @@ function disp (this) endfunction function [out, Indx] = sortND (this) - %SORTND N-dimensional sort implementation - - % I believe this multi-dimensional implementation is correct, - % but have not tested it yet. Use with caution. + #SORTND N-dimensional sort implementation + + # I believe this multi-dimensional implementation is correct, + # but have not tested it yet. Use with caution. out = this; Indx = NaN (size (out)); sz = size (this); @@ -1395,11 +1395,11 @@ function disp (this) if ixs{2} > sz(2) break; endif - endwhile + endwhile endfunction - + function [out, Indx] = unique (this, varargin) - %UNIQUE Set unique. + #UNIQUE Set unique. flags = setdiff (varargin, {'rows'}); if ismember('rows', varargin) [~,proxyIx] = unique (this); @@ -1411,8 +1411,8 @@ function disp (this) this = subset (this, ':'); tfNaN = isnan (this); nans = subset (this, tfNaN); - nonnans = subset (this, ~tfNaN); - ixNonnan = find (~tfNaN); + nonnans = subset (this, !tfNaN); + ixNonnan = find (!tfNaN); keys = proxyKeys (nonnans); if isa (keys, 'table') [~,ix] = unique (keys, flags{:}); @@ -1426,16 +1426,16 @@ function disp (this) endif endif endfunction - + function [out, Indx] = ismember (a, b, varargin) - %ISMEMBER True for set member. + #ISMEMBER True for set member. if ismember ('rows', varargin) error ('ismember(..., ''rows'') is unsupported'); endif - if ~isa (a, 'datetime') + if !isa (a, 'datetime') a = datetime (a); endif - if ~isa (b, 'datetime') + if !isa (b, 'datetime') b = datetime (b); endif [proxyA, proxyB] = proxyKeys (a, b); @@ -1443,21 +1443,21 @@ function disp (this) out = reshape (out, size(a)); Indx = reshape (Indx, size(a)); endfunction - + function [out, Indx] = setdiff (a, b, varargin) - %SETDIFF Set difference. + #SETDIFF Set difference. if ismember ('rows', varargin) error ('setdiff(..., ''rows'') is unsupported'); endif [tf,~] = ismember (a, b); - out = parensRef (a, ~tf); - Indx = find (~tf); + out = parensRef (a, !tf); + Indx = find (!tf); [out,ix] = unique (out); Indx = Indx(ix); endfunction - + function [out, ia, ib] = intersect (a, b, varargin) - %INTERSECT Set intersection. + #INTERSECT Set intersection. if ismember ('rows', varargin) error ('intersect(..., ''rows'') is unsupported'); endif @@ -1465,9 +1465,9 @@ function disp (this) [~,ia,ib] = intersect (proxyA, proxyB, 'rows'); out = parensRef (a, ia); endfunction - + function [out, ia, ib] = union (a, b, varargin) - %UNION Set union. + #UNION Set union. if ismember ('rows', varargin) error ('union(..., ''rows'') is unsupported'); endif @@ -1477,55 +1477,55 @@ function disp (this) bOut = parensRef (b, ib); out = [parensRef(aOut, ':'); parensRef(bOut, ':')]; endfunction - + endmethods - + methods (Access=private) - + function out = subsasgnParensPlanar (this, s, rhs) - %SUBSASGNPARENSPLANAR ()-assignment for planar object - if ~isa (rhs, 'datetime') + #SUBSASGNPARENSPLANAR ()-assignment for planar object + if !isa (rhs, 'datetime') rhs = datetime (rhs); endif out = this; out.dnums = tblish.chrono.internal.prefillNewSizeForSubsasgn(this.dnums, s.subs, NaN); out.dnums(s.subs{:}) = rhs.dnums; endfunction - + function out = subsrefParensPlanar (this, s) - %SUBSREFPARENSPLANAR ()-indexing for planar object + #SUBSREFPARENSPLANAR ()-indexing for planar object out = this; out.dnums = this.dnums(s.subs{:}); endfunction - + function out = parensRef (this, varargin) - %PARENSREF ()-indexing, for this class's internal use + #PARENSREF ()-indexing, for this class's internal use out = subsrefParensPlanar(this, struct ('subs', {varargin})); endfunction - + function out = subset (this, varargin) - %SUBSET Subset array by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the RHS, which don't work properly inside the class - % because they don't respect the subsref() override. + #SUBSET Subset array by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the RHS, which don't work properly inside the class + # because they don't respect the subsref() override. out = parensRef (this, varargin{:}); endfunction - + function out = asgn (this, ix, value) - %ASGN Assign array elements by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the LHS, which don't work properly inside - % the class because they don't respect the subsasgn() override. - if ~iscell (ix) + #ASGN Assign array elements by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the LHS, which don't work properly inside + # the class because they don't respect the subsasgn() override. + if !iscell (ix) ix = { ix }; endif s.type = '()'; s.subs = ix; out = subsasgnParensPlanar (this, s, value); endfunction - + endmethods - + methods (Static = true) ## -*- texinfo -*- @@ -1547,7 +1547,7 @@ function disp (this) ## ## @end deftypefn function out = convertDatenumTimeZone (dnum, fromZoneId, toZoneId) - %CONVERTDATENUMTIMEZONE Convert time zone on datenums + #CONVERTDATENUMTIMEZONE Convert time zone on datenums narginchk (3, 3); tzdb = tblish.chrono.internal.tzinfo.TzDb; fromZone = tzdb.zoneDefinition (fromZoneId); @@ -1555,24 +1555,24 @@ function disp (this) dnumUtc = fromZone.localtimeToGmt (dnum); out = toZone.gmtToLocaltime (dnumUtc); endfunction - + function out = promotec (args) - %PROMOTEC Promote inputs to be compatible, cell version + #PROMOTEC Promote inputs to be compatible, cell version out = cell(size(args)); [out{:}] = promote(args{:}); endfunction function varargout = promote (varargin) - %PROMOTE Promote inputs to be compatible + #PROMOTE Promote inputs to be compatible args = varargin; for i = 1:numel (args) - if ~isa (args{i}, 'datetime') + if !isa (args{i}, 'datetime') args{i} = datetime (args{i}); endif endfor tz0 = args{1}.TimeZone; for i = 2:numel (args) - if ~isequal (args{i}.TimeZone, tz0) + if !isequal (args{i}.TimeZone, tz0) if isempty (tz0) || isempty (args{i}.TimeZone) error('Cannot mix zoned and zoneless datetimes.'); else @@ -1587,12 +1587,12 @@ function disp (this) endclassdef -%!test datetime; -%!test datetime ('2011-03-07'); -%!test datetime ('2011-03-07 12:34:56', 'TimeZone','America/New_York'); -%!test -%! d = datetime; -%! d.TimeZone = 'America/New_York'; -%! d2 = d; -%! d2.TimeZone = 'America/Chicago'; -%! assert (abs(d.dnums - d2.dnums), (1/24), .0001) +#!test datetime; +#!test datetime ('2011-03-07'); +#!test datetime ('2011-03-07 12:34:56', 'TimeZone','America/New_York'); +#!test +#! d = datetime; +#! d.TimeZone = 'America/New_York'; +#! d2 = d; +#! d2.TimeZone = 'America/Chicago'; +#! assert (abs(d.dnums - d2.dnums), (1/24), .0001) diff --git a/inst/days.m b/inst/days.m index 5e9bdc15..1c880a31 100644 --- a/inst/days.m +++ b/inst/days.m @@ -21,7 +21,7 @@ ## ## Duration in days. ## -## If @var{x} is numeric, then @var{out} is a @code{duration} array in units +## If @var{x} is numeric, then @var{out} is a @code{duration} array in units ## of fixed-length 24-hour days, with the same size as @var{x}. ## ## If @var{x} is a @code{duration}, then returns a @code{double} array the same @@ -31,20 +31,20 @@ ## @end deftypefn function out = days (x) - %DAYS duration in days - % - % out = days (x) - % - % If x is numeric, then out is a duration array in units of fixed-length 24-hour - % days. - % - % If x is a duration, then returns a double array indicating the number of - % days that duration is. + #DAYS duration in days + # + # out = days (x) + # + # If x is numeric, then out is a duration array in units of fixed-length 24-hour + # days. + # + # If x is a duration, then returns a double array indicating the number of + # days that duration is. if isnumeric (x) out = duration.ofDays (double (x)); elseif isa (x, 'duration') out = x.days; else - error ('Invalid input: expected numeric or duration; got %s', class (x)); - end -end + error ('Invalid input: expected numeric or duration; got %s', class (x)); + endif +endfunction diff --git a/inst/discretize.m b/inst/discretize.m index a1817aac..b0dd0efa 100644 --- a/inst/discretize.m +++ b/inst/discretize.m @@ -38,8 +38,8 @@ ## ## @end deftypefn function [Y, E] = discretize (X, arg1, varargin) - - % Input handling + + # Input handling do_categorical = false; display_format = []; category_names = []; @@ -65,7 +65,7 @@ if ! isempty (args) value_map = args{i}; endif - + if isa (arg1, 'duration') error ('discretize: duration-valued bin size is not yet implemented. Sorry.'); elseif isscalar (arg1) @@ -85,21 +85,21 @@ n_bins = numel (edges) - 1; endif - cat_names = cell (1, n_bins); + cat_names = cell (1, n_bins); Y = NaN (size (X)); for i_bin = 1:(n_bins-1) tf = edges(i_bin) <= X & X < edges(i_bin+1); Y(tf) = i_bin; cat_names{i_bin} = gen_category_name (edges(i_bin), edges(i_bin+1), 0); endfor - % The last bin is closed on the upper edge + # The last bin is closed on the upper edge tf = edges(end-1) <= X & X <= edges(end); Y(tf) = n_bins; cat_names{n_bins} = gen_category_name (edges(i_bin), edges(i_bin+1), 1); if isempty (category_names) category_names = cat_names; endif - + if do_categorical codes = Y; Y = categorical.from_codes (codes, category_names, 'Ordinal', true); @@ -115,6 +115,6 @@ if is_closed_on_right out = sprintf ('[%s, %s)', edge_strs{1}, edge_strs{2}); else - out = sprintf ('[%s, %s]', edge_strs{1}, edge_strs{2}); + out = sprintf ('[%s, %s]', edge_strs{1}, edge_strs{2}); endif endfunction diff --git a/inst/dispstrs.m b/inst/dispstrs.m index 3185a707..9d99e466 100644 --- a/inst/dispstrs.m +++ b/inst/dispstrs.m @@ -33,13 +33,13 @@ ## ## @end deftypefn function out = dispstrs (x) - %DISPSTRS Display strings for arbitrary array + #DISPSTRS Display strings for arbitrary array if isnumeric (x) || islogical (x) out = reshape (strtrim (cellstr (num2str (x(:)))), size (x)); elseif iscellstr (x) || isa (x, 'string') out = cellstr (x); elseif isa (x, 'datetime') - out = datestrs (x); + out = datestrs (x); elseif ischar (x) out = num2cell (x); else diff --git a/inst/duration.m b/inst/duration.m index 8777d90b..447ad4fa 100644 --- a/inst/duration.m +++ b/inst/duration.m @@ -39,7 +39,7 @@ ## The underlying datenums that represent the durations, as number of (whole and ## fractional) days. These are uniform 24-hour days, not calendar days. ## - ## This is a planar property: the size of @code{days} is the same size as the + ## This is a planar property: the size of @code{days} is the same size as the ## containing @code{duration} array object. ## ## @end deftypeivar @@ -49,14 +49,14 @@ ## The format to display this @code{duration} in. Currently unsupported. ## ## @end deftypeivar - + properties - % Duration length in whole and fractional days (double) + # Duration length in whole and fractional days (double) days = 0 % planar - % Display format (currently unsupported) + # Display format (currently unsupported) Format = '' endproperties - + methods (Static) ## -*- texinfo -*- ## @node duration.ofDays @@ -70,7 +70,7 @@ ## ## @end deftypefn function out = ofDays (dnums) - %OFDAYS Convert days/datenums to durations + #OFDAYS Convert days/datenums to durations out = duration (double (dnums), 'Backdoor'); endfunction endmethods @@ -93,9 +93,9 @@ ## ## @end deftypefn function this = duration (varargin) - %DURATION Construct a new duration array + #DURATION Construct a new duration array args = varargin; - % Peel off options + # Peel off options knownOptions = {'InputFormat','Format'}; opts = struct; while numel (args) >= 3 && isa (args{end-1}, 'char') ... @@ -103,7 +103,7 @@ opts.(args{end-1}) = args{end}; args(end-1:end) = []; endwhile - % Handle inputs + # Handle inputs switch numel (args) case 0 return @@ -129,11 +129,11 @@ endif endif case 2 - % Undocumented calling form for internal use - if ~isequal (args{2}, 'Backdoor') + # Undocumented calling form for internal use + if !isequal (args{2}, 'Backdoor') error ('Invalid number if inputs: %d', numel (args)); endif - if ~isnumeric (args{1}) + if !isnumeric (args{1}) error ('Input must be numeric; got a %s', class (args{1})); endif this.days = double (args{1}); @@ -147,11 +147,11 @@ error ('Invalid number if inputs: %d', numel (args)); endswitch endfunction - + function this = set.Format (this, x) error ('Changing the Format of duration is currently unimplemented.'); endfunction - + ## -*- texinfo -*- ## @node duration.sizeof ## @deftypefn {Method} {@var{out} =} sizeof (@var{obj}) @@ -178,15 +178,15 @@ ## ## @end deftypefn function out = years (this) - %YEARS Number of fixed-length years equivalent to this. - out = this.days / 365.2425; + #YEARS Number of fixed-length years equivalent to this. + out = this.days / 365.2425; endfunction # Can't have a days() function as well as a days property or it will cause Octave to crash # At least, sometimes it does. And it's happened often enough that I don't want # to leave it in. If you can find out what conditions reproduce this, please # bug report. -apj - + ## function out = days (this) ## %DAYS Number of fixed-length days equivalent to this. ## out = this.days; @@ -205,10 +205,10 @@ ## ## @end deftypefn function out = hours (this) - %HOURS Number of hours equivalent to this. + #HOURS Number of hours equivalent to this. out = this.days * 24; endfunction - + ## -*- texinfo -*- ## @node duration.minutes ## @deftypefn {Method} {@var{out} =} minutes (@var{obj}) @@ -222,10 +222,10 @@ ## ## @end deftypefn function out = minutes (this) - %MINUTES Number of minutes equivalent to this. + #MINUTES Number of minutes equivalent to this. out = this.days * (24 * 60); endfunction - + ## -*- texinfo -*- ## @node duration.seconds ## @deftypefn {Method} {@var{out} =} seconds (@var{obj}) @@ -239,10 +239,10 @@ ## ## @end deftypefn function out = seconds (this) - %SECPMDS Number of seconds equivalent to this. + #SECPMDS Number of seconds equivalent to this. out = this.days * (24 * 60 * 60); endfunction - + ## -*- texinfo -*- ## @node duration.milliseconds ## @deftypefn {Method} {@var{out} =} milliseconds (@var{obj}) @@ -256,27 +256,27 @@ ## ## @end deftypefn function out = milliseconds (this) - %MILLISECONDS Number of milliseconds equivalent to this. + #MILLISECONDS Number of milliseconds equivalent to this. out = this.days * (24 * 60 * 60 * 1000); endfunction function [keysA, keysB] = proxyKeys (a, b) - %PROXYKEYS Proxy key values for sorting and set operations + #PROXYKEYS Proxy key values for sorting and set operations keysA = a.days(:); keysB = b.days(:); endfunction function display (this) - %DISPLAY Custom display. + #DISPLAY Custom display. in_name = inputname (1); - if ~isempty (in_name) + if !isempty (in_name) fprintf ('%s =\n', in_name); endif disp (this); endfunction function disp (this) - %DISP Custom display. + #DISP Custom display. if isempty (this) fprintf ('Empty %s %s\n', size2str (size (this)), class (this)); return; @@ -284,7 +284,7 @@ function disp (this) out = tblish.chrono.internal.format_dispstr_array (dispstrs (this)); fprintf ('%s\n', out); endfunction - + ## -*- texinfo -*- ## @node duration.dispstrs ## @deftypefn {Method} {@var{out} =} duration (@var{obj}) @@ -295,8 +295,8 @@ function disp (this) ## ## @end deftypefn function out = dispstrs (this) - %DISPSTRS Custom display strings. - % This is an Octave extension. + #DISPSTRS Custom display strings. + # This is an Octave extension. out = cell (size (this)); for i = 1:numel (this) d = this.days(i); @@ -344,7 +344,7 @@ function disp (this) endfor out = sprintf (fmt, args{:}); endfunction - + function out = fprintf(varargin) args = varargin; if isnumeric (args{1}) @@ -366,7 +366,7 @@ function disp (this) fprintf (fid, fmt, args{:}); endif endfunction - + ## -*- texinfo -*- ## @node duration.char ## @deftypefn {Method} {@var{out} =} char (@var{obj}) @@ -380,54 +380,54 @@ function disp (this) ## ## @end deftypefn function out = char (this) - %CHAR Convert to char. - % - % This is an Octave extension. + #CHAR Convert to char. + # + # This is an Octave extension. out = char (dispstrs (subset (this, ':'))); endfunction - - % Relational operations + + # Relational operations function out = lt (A, B) - %LT Less than. + #LT Less than. [A, B] = duration.promote (A, B); out = A.days < B.days; endfunction function out = le (A, B) - %LE Less than or equal. + #LE Less than or equal. [A, B] = duration.promote (A, B); out = A.days <= B.days; endfunction function out = ne (A, B) - %NE Not equal. + #NE Not equal. [A, B] = duration.promote (A, B); out = A.days ~= B.days; endfunction function out = eq (A, B) - %EQ Equals. + #EQ Equals. [A, B] = duration.promote (A, B); out = A.days == B.days; endfunction function out = ge (A, B) - %GE Greater than or equal. + #GE Greater than or equal. [A, B] = duration.promote (A, B); out = A.days >= B.days; endfunction function out = gt (A, B) - %GT Greater than. + #GT Greater than. [A, B] = duration.promote (A, B); out = A.days > B.days; endfunction - % Arithmetic - + # Arithmetic + function out = times (A, B) - %TIMES Multiplication + #TIMES Multiplication if isnumeric (A) out = B; out.days = out.days .* A; @@ -440,7 +440,7 @@ function disp (this) endfunction function out = mtimes (A, B) - %MTIMES Multiplication + #MTIMES Multiplication if isnumeric (A) out = B; out.days = out.days * A; @@ -451,10 +451,10 @@ function disp (this) error ('Invalid inputs to mtimes: %s * %s', class (A), class (B)); endif endfunction - + function out = rdivide (A, B) - %RDIVIDE Element-wise right division - if ~isa (A, 'duration') + #RDIVIDE Element-wise right division + if !isa (A, 'duration') error ('When dividing using duration, the left-hand side must be a duration; got a %s', ... class (A)); endif @@ -467,10 +467,10 @@ function disp (this) error ('Invalid input: RHS must be duration or double; got a %s', class (B)); endif endfunction - + function out = mrdivide (A, B) - %MRDIVIDE Matrix right division - if ~isa (A, 'duration') + #MRDIVIDE Matrix right division + if !isa (A, 'duration') error ('When dividing using duration, the left-hand side must be a duration; got a %s', ... class (A)); endif @@ -478,12 +478,12 @@ function disp (this) out = A; out.days = A.days / B; else - error ('Invalid input: RHS must be double; got a %s', class (B)); + error ('Invalid input: RHS must be double; got a %s', class (B)); endif endfunction - + function out = plus (A, B) - %PLUS Addition + #PLUS Addition if isa (A, 'datetime') && isa (B, 'duration') out = A; out.dnums = out.dnums + B.days; @@ -499,25 +499,25 @@ function disp (this) out = B + A; endif endfunction - + function out = minus (A, B) - %MINUS Subtraction + #MINUS Subtraction out = A + (-1 * B); endfunction - + function out = uminus (A) - %UMINUS Unary minus + #UMINUS Unary minus out = A; out.days = -1 * A.days; endfunction - + function out = uplus (A) - %UPLUS Unary plus + #UPLUS Unary plus out = A; endfunction - + function out = colon (varargin) - %COLON Generate range for colon expression + #COLON Generate range for colon expression narginchk (2, 3); if nargin == 2; [from, to] = varargin{:}; @@ -529,7 +529,7 @@ function disp (this) out = from; out.days = from.days:increment.days:to.days; endfunction - + ## -*- texinfo -*- ## @node duration.linspace ## @deftypefn {Method} {@var{out} =} linspace (@var{from}, @var{to}, @var{n}) @@ -548,7 +548,7 @@ function disp (this) ## ## @end deftypefn function out = linspace (A, B, n) - %LINSPACE Linearly spaced elements between two values + #LINSPACE Linearly spaced elements between two values narginchk (2, 3); if nargin < 3; n = 100; end [A, B] = duration.promote (A, B); @@ -556,7 +556,7 @@ function disp (this) out.days = linspace (A.days, B.days, n); endfunction endmethods - + methods (Static, Access = private) function out = hms2datenum (H, MI, S, MS) if nargin < 4; MS = 0; endif @@ -564,7 +564,7 @@ function disp (this) out = (H / 24) + (MI / (24 * 60)) + (S / (24 * 60 * 60)) ... + (MS / (24 * 60 * 60 * 1000)); endfunction - + function out = parseTimeStringsToDatenum (strs) strs = cellstr (strs); out = NaN (size (strs)); @@ -574,12 +574,12 @@ function disp (this) ixDot = find (str == '.'); if numel (ixDot) > 1 error ('Invalid TimeString: ''%s''', strIn); - elseif ~isempty (ixDot) + elseif !isempty (ixDot) fractionalSecStr = str(ixDot+1:end); str(ixDot:end) = []; nFracs = str2double (fractionalSecStr); fractionalSec = nFracs / (10^numel (fractionalSecStr)); - MS = fractionalSec * 1000; + MS = fractionalSec * 1000; else MS = 0; endif @@ -597,125 +597,125 @@ function disp (this) out(i) = duration.hms2datenum (D * 24 + H, MI, S, MS); endfor endfunction - + function out = parseTimeStringsToDatenumWithFormat (strs) error ('InputFormat support for time strings is unimplemented'); endfunction - end - - % Planar boilerplate stuff - + endmethods + + # Planar boilerplate stuff + methods - + function out = numel (this) - %NUMEL Number of elements in array. + #NUMEL Number of elements in array. out = numel (this.days); endfunction - + function out = ndims (this) - %NDIMS Number of dimensions. + #NDIMS Number of dimensions. out = ndims (this.days); endfunction - + function out = size (this, dim) - %SIZE Size of array. + #SIZE Size of array. if nargin == 1 out = size (this.days); else out = size (this.days, dim); endif endfunction - + function out = isempty (this) - %ISEMPTY True for empty array. + #ISEMPTY True for empty array. out = isempty (this.days); endfunction - + function out = isscalar (this) - %ISSCALAR True if input is scalar. + #ISSCALAR True if input is scalar. out = isscalar (this.days); endfunction - + function out = isvector (this) - %ISVECTOR True if input is a vector. + #ISVECTOR True if input is a vector. out = isvector (this.days); endfunction - + function out = iscolumn (this) - %ISCOLUMN True if input is a column vector. + #ISCOLUMN True if input is a column vector. out = iscolumn (this.days); endfunction - + function out = isrow (this) - %ISROW True if input is a row vector. + #ISROW True if input is a row vector. out = isrow (this.days); endfunction - + function out = ismatrix (this) - %ISMATRIX True if input is a matrix. + #ISMATRIX True if input is a matrix. out = ismatrix (this.days); endfunction - + function out = isnan (this) - %ISNAN True for Not-a-Number. + #ISNAN True for Not-a-Number. out = isnan (this.days); endfunction - + function this = reshape (this, varargin) - %RESHAPE Reshape array. + #RESHAPE Reshape array. this.days = reshape (this.days, varargin{:}); endfunction - + function this = squeeze (this, varargin) - %SQUEEZE Remove singleton dimensions. + #SQUEEZE Remove singleton dimensions. this.days = squeeze (this.days, varargin{:}); endfunction - + function this = circshift (this, varargin) - %CIRCSHIFT Shift positions of elements circularly. + #CIRCSHIFT Shift positions of elements circularly. this.days = circshift (this.days, varargin{:}); endfunction - + function this = permute (this, varargin) - %PERMUTE Permute array dimensions. + #PERMUTE Permute array dimensions. this.days = permute (this.days, varargin{:}); endfunction - + function this = ipermute (this, varargin) - %IPERMUTE Inverse permute array dimensions. + #IPERMUTE Inverse permute array dimensions. this.days = ipermute (this.days, varargin{:}); endfunction - + function this = repmat (this, varargin) - %REPMAT Replicate and tile array. + #REPMAT Replicate and tile array. this.days = repmat (this.days, varargin{:}); endfunction - + function this = ctranspose (this, varargin) - %CTRANSPOSE Complex conjugate transpose. + #CTRANSPOSE Complex conjugate transpose. this.days = ctranspose (this.days, varargin{:}); endfunction - + function this = transpose (this, varargin) - %TRANSPOSE Transpose vector or matrix. + #TRANSPOSE Transpose vector or matrix. this.days = transpose (this.days, varargin{:}); endfunction - + function [this, nshifts] = shiftdim (this, n) - %SHIFTDIM Shift dimensions. + #SHIFTDIM Shift dimensions. if nargin > 1 this.days = shiftdim (this.days, n); else [this.days, nshifts] = shiftdim (this.days); endif endfunction - + function out = cat (dim, varargin) - %CAT Concatenate arrays. + #CAT Concatenate arrays. args = varargin; for i = 1:numel (args) - if ~isa (args{i}, 'duration') + if !isa (args{i}, 'duration') args{i} = duration (args{i}); endif endfor @@ -723,29 +723,29 @@ function disp (this) fieldArgs = cellfun (@(obj) obj.days, args, 'UniformOutput', false); out.days = cat (dim, fieldArgs{:}); endfunction - + function out = horzcat (varargin) - %HORZCAT Horizontal concatenation. + #HORZCAT Horizontal concatenation. out = cat (2, varargin{:}); endfunction - + function out = vertcat (varargin) - %VERTCAT Vertical concatenation. + #VERTCAT Vertical concatenation. out = cat (1, varargin{:}); endfunction - + function this = subsasgn (this, s, b) - %SUBSASGN Subscripted assignment. - - % Chained subscripts + #SUBSASGN Subscripted assignment. + + # Chained subscripts if numel (s) > 1 rhs_in = subsref (this, s(1)); rhs = subsasgn (rhs_in, s(2:end), b); else rhs = b; endif - - % Base case + + # Base case switch s(1).type case '()' this = subsasgnParensPlanar (this, s(1), rhs); @@ -755,11 +755,11 @@ function disp (this) this.(s(1).subs) = rhs; endswitch endfunction - + function out = subsref (this, s) - %SUBSREF Subscripted reference. - - % Base case + #SUBSREF Subscripted reference. + + # Base case switch s(1).type case '()' out = subsrefParensPlanar (this, s(1)); @@ -768,23 +768,23 @@ function disp (this) case '.' out = this.(s(1).subs); endswitch - - % Chained reference + + # Chained reference if numel(s) > 1 out = subsref (out, s(2:end)); endif endfunction - + function [out,Indx] = sort (this) - %SORT Sort array elements. + #SORT Sort array elements. if isvector (this) isRow = isrow (this); this = subset (this, ':'); - % NaNs sort stably to end, so handle them separately + # NaNs sort stably to end, so handle them separately tfNan = isnan (this); nans = subset (this, tfNan); - nonnans = subset (this, ~tfNan); - ixNonNan = find (~tfNan); + nonnans = subset (this, !tfNan); + ixNonNan = find (!tfNan); proxy = proxyKeys (nonnans); [~, ix] = sortrows (proxy); out = [subset(nonnans, ix); nans]; @@ -800,8 +800,8 @@ function disp (this) out = asgn (out, {':', iCol}, sortedCol); endfor else - % I believe this multi-dimensional implementation is correct, - % but have not tested it yet. Use with caution. + # I believe this multi-dimensional implementation is correct, + # but have not tested it yet. Use with caution. out = this; Indx = NaN (size (out)); sz = size (this); @@ -825,9 +825,9 @@ function disp (this) endwhile endif endfunction - + function [out,Indx] = unique (this, varargin) - %UNIQUE Set unique. + #UNIQUE Set unique. flags = setdiff (varargin, {'rows'}); if ismember ('rows', varargin) [~, proxyIx] = unique (this); @@ -839,8 +839,8 @@ function disp (this) this = subset (this, ':'); tfNaN = isnan (this); nans = subset (this, tfNaN); - nonnans = subset (this, ~tfNaN); - ixNonnan = find (~tfNaN); + nonnans = subset (this, !tfNaN); + ixNonnan = find (!tfNaN); keys = proxyKeys (nonnans); if isa (keys, 'table') [~,ix] = unique (keys, flags{:}); @@ -854,16 +854,16 @@ function disp (this) endif endif endfunction - + function [out, Indx] = ismember (a, b, varargin) - %ISMEMBER True for set member. + #ISMEMBER True for set member. if ismember ('rows', varargin) error ('ismember(..., ''rows'') is unsupported'); endif - if ~isa (a, 'duration') + if !isa (a, 'duration') a = duration (a); endif - if ~isa (b, 'duration') + if !isa (b, 'duration') b = duration (b); endif [proxyA, proxyB] = proxyKeys (a, b); @@ -871,21 +871,21 @@ function disp (this) out = reshape (out, size(a)); Indx = reshape (Indx, size(a)); endfunction - + function [out,Indx] = setdiff (a, b, varargin) - %SETDIFF Set difference. + #SETDIFF Set difference. if ismember ('rows', varargin) error ('setdiff(..., ''rows'') is unsupported'); endif [tf,~] = ismember (a, b); - out = parensRef (a, ~tf); - Indx = find (~tf); + out = parensRef (a, !tf); + Indx = find (!tf); [out,ix] = unique (out); Indx = Indx(ix); endfunction - + function [out, ia, ib] = intersect (a, b, varargin) - %INTERSECT Set intersection. + #INTERSECT Set intersection. if ismember ('rows', varargin) error ('intersect(..., ''rows'') is unsupported'); endif @@ -893,9 +893,9 @@ function disp (this) [~,ia,ib] = intersect (proxyA, proxyB, 'rows'); out = parensRef (a, ia); endfunction - + function [out, ia, ib] = union (a, b, varargin) - %UNION Set union. + #UNION Set union. if ismember ('rows', varargin) error ('union(..., ''rows'') is unsupported'); endif @@ -905,63 +905,63 @@ function disp (this) bOut = parensRef (b, ib); out = [parensRef(aOut, ':'); parensRef(bOut, ':')]; endfunction - + endmethods - + methods (Access=private) - + function out = subsasgnParensPlanar (this, s, rhs) - %SUBSASGNPARENSPLANAR ()-assignment for planar object - if ~isa (rhs, 'duration') + #SUBSASGNPARENSPLANAR ()-assignment for planar object + if !isa (rhs, 'duration') rhs = duration (rhs); endif out = this; out.days = tblish.chrono.internal.prefillNewSizeForSubsasgn(this.days, s.subs, NaN); out.days(s.subs{:}) = rhs.days; endfunction - + function out = subsrefParensPlanar (this, s) - %SUBSREFPARENSPLANAR ()-indexing for planar object + #SUBSREFPARENSPLANAR ()-indexing for planar object out = this; out.days = this.days(s.subs{:}); endfunction - + function out = parensRef (this, varargin) - %PARENSREF ()-indexing, for this class's internal use + #PARENSREF ()-indexing, for this class's internal use out = subsrefParensPlanar (this, struct ('subs', {varargin})); endfunction - + function out = subset (this, varargin) - %SUBSET Subset array by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the RHS, which don't work properly inside the class - % because they don't respect the subsref() override. + #SUBSET Subset array by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the RHS, which don't work properly inside the class + # because they don't respect the subsref() override. out = parensRef (this, varargin{:}); endfunction - + function out = asgn (this, ix, value) - %ASGN Assign array elements by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the LHS, which don't work properly inside - % the class because they don't respect the subsasgn() override. - if ~iscell (ix) + #ASGN Assign array elements by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the LHS, which don't work properly inside + # the class because they don't respect the subsasgn() override. + if !iscell (ix) ix = { ix }; endif s.type = '()'; s.subs = ix; out = subsasgnParensPlanar (this, s, value); endfunction - + endmethods - + methods (Static) function varargout = promote (varargin) - %PROMOTE Promote inputs to be compatible + #PROMOTE Promote inputs to be compatible args = varargin; for i = 1:numel(args) - if ~isa (args{i}, 'duration') - % Sigh. We can't use a simple constructor call because of its weird - % signature. + if !isa (args{i}, 'duration') + # Sigh. We can't use a simple constructor call because of its weird + # signature. if isnumeric (args{i}) args{i} = duration.ofDays (args{i}); else @@ -975,7 +975,7 @@ function disp (this) endclassdef -%!test duration; -%!test duration (1, 2, 3); -%!test assert (duration (1, 2, 3) < duration (1, 2, 4)) +#!test duration; +#!test duration (1, 2, 3); +#!test assert (duration (1, 2, 3) < duration (1, 2, 4)) diff --git a/inst/eqn.m b/inst/eqn.m index e0299a86..aed106b0 100644 --- a/inst/eqn.m +++ b/inst/eqn.m @@ -20,18 +20,18 @@ ## ## out = eqn (A, B) ## -## @code{eqn} is just like @code{eq} (the function that implements the +## @code{eqn} is just like @code{eq} (the function that implements the ## @code{==} operator), except ## that it considers NaN and NaN-like values to be equal. This is the element-wise ## equivalent of @code{isequaln}. ## -## @code{eqn} uses @code{isnanny} to test for NaN and NaN-like values, -## which means that NaNs and NaTs are considered to be NaN-like, and -## string arrays’ “missing” and categorical objects’ “undefined” values +## @code{eqn} uses @code{isnanny} to test for NaN and NaN-like values, +## which means that NaNs and NaTs are considered to be NaN-like, and +## string arrays’ “missing” and categorical objects’ “undefined” values ## are considered equal, because they are NaN-ish. ## ## Developer's note: the name “@code{eqn}” is a little unfortunate, -## because “eqn” could also be an abbreviation for “equation”. But this +## because “eqn” could also be an abbreviation for “equation”. But this ## name follows the @code{isequaln} pattern of appending an “n” to the ## corresponding non-NaN-equivocating function. ## @@ -39,11 +39,11 @@ ## ## @end deftypefn function out = eqn (A, B) - - % Developer's note: the name is a little unfortunate because "eqn" could also - % be an abbreviation for "equation", but this name follows the ISEQUALN pattern - % of appending an "N" to the corresponding non-NaN-aware function. - + + # Developer's note: the name is a little unfortunate because "eqn" could also + # be an abbreviation for "equation", but this name follows the ISEQUALN pattern + # of appending an "N" to the corresponding non-NaN-aware function. + out = A == B; out(isnanny (A) & isnanny (B)) = true; diff --git a/inst/examples/ex_01_suppliers_parts.m b/inst/examples/ex_01_suppliers_parts.m index d9e0784f..1df66775 100644 --- a/inst/examples/ex_01_suppliers_parts.m +++ b/inst/examples/ex_01_suppliers_parts.m @@ -1,42 +1,42 @@ -% This example shows how to work with the tables in C. J. Date's classic -% Suppliers-Parts Database example +# This example shows how to work with the tables in C. J. Date's classic +# Suppliers-Parts Database example -% The Suppliers-Parts database is defined over in +tblish/+examples +# The Suppliers-Parts database is defined over in +tblish/+examples [s,p,sp] = tblish.examples.SpDb; -% Display one of the tables +# Display one of the tables fprintf('\nTable s:\n'); prettyprint (s) -% Get the suppliers just in London +# Get the suppliers just in London london_suppliers = s(strcmp (s.City, 'London'),:) fprintf('\nSuppliers in London:\n') prettyprint (london_suppliers) -% Suppliers in Paris with a status of 20 or greater +# Suppliers in Paris with a status of 20 or greater paris = s(strcmp (s.City, 'Paris') & s.Status >= 20,:) fprintf('\nParis suppliers with status >= 20:\n') prettyprint (paris) -% Join the tables up so we can do aggregate queries +# Join the tables up so we can do aggregate queries -% Rename the city columns in the Suppliers and Parts table, because we don't -% want to use them as a key +# Rename the city columns in the Suppliers and Parts table, because we don't +# want to use them as a key s2 = renamevars (s, {'City' 'SupplierCity'}) p2 = renamevars (p, {'City' 'PartCity'}); -% Join all the tables +# Join all the tables j = innerjoin(innerjoin(sp, s2), p2); fprintf('\nJoined tables:\n') prettyprint (j) -% Calculate the total weight of deliveries +# Calculate the total weight of deliveries j = setvar (j, 'TotalWeight', j.Qty .* j.Weight); -% Calculate the total parts count and weight for each part city +# Calculate the total parts count and weight for each part city g = groupby (j, {'PartCity'}, { 'TotalQty', @sum, 'Qty' 'TotalWeight', @sum, 'TotalWeight' @@ -44,9 +44,9 @@ fprintf ('\nDelivery totals by city:\n'); prettyprint (g); -% You can also use a trick with strjoin() to compactly display all the values -% for a column in a groupby. Note that you have to use {...} to throw the -% resulting strings into a cell so the output of the function is scalar. +# You can also use a trick with strjoin() to compactly display all the values +# for a column in a groupby. Note that you have to use {...} to throw the +# resulting strings into a cell so the output of the function is scalar. g = groupby (j, {'PartCity'}, { 'Parts', @(x) {strjoin(unique(x), ', ')}, 'PNum' 'Colors', @(x) {strjoin(unique(x), ', ')}, 'Color' diff --git a/inst/hours.m b/inst/hours.m index a04b7f20..560297ff 100644 --- a/inst/hours.m +++ b/inst/hours.m @@ -30,14 +30,14 @@ ## @end deftypefn function out = hours (x) - %HOURS Duration in hours - % - % If input is numeric, returns a @duration array that is that many hours long. - % - % If input is a duration, converts the duration to a number of hours. + #HOURS Duration in hours + # + # If input is numeric, returns a @duration array that is that many hours long. + # + # If input is a duration, converts the duration to a number of hours. if isnumeric (x) out = duration.ofDays (double (x) / 24); else error ('Invalid input: expected numeric or duration; got %s', class (x)); - end -end + endif +endfunction diff --git a/inst/iscalendarduration.m b/inst/iscalendarduration.m index 1934b54c..00e46565 100644 --- a/inst/iscalendarduration.m +++ b/inst/iscalendarduration.m @@ -30,19 +30,19 @@ ## @end deftypefn function out = iscalendarduration (x) - %ISCALENDARDURATION True if input is a calendar duration array + #ISCALENDARDURATION True if input is a calendar duration array - % Developer note: see istable for an explanation of this logic. + # Developer note: see istable for an explanation of this logic. if isa (x, 'calendarDuration') out = true; elseif isobject (x) - % Respect iscalendarduration methods on classes. + # Respect iscalendarduration methods on classes. if ismember ('iscalendarduration', methods (x)) out = iscalendarduration (x); else out = false; - end + endif else out = false; - end -end + endif +endfunction diff --git a/inst/iscategorical.m b/inst/iscategorical.m index 76eec75d..bbabe376 100644 --- a/inst/iscategorical.m +++ b/inst/iscategorical.m @@ -30,17 +30,17 @@ ## @end deftypefn function out = iscategorical (x) - % Developer note: see istable for an explanation of this logic. + # Developer note: see istable for an explanation of this logic. if isa (x, 'categorical') out = true; elseif isobject (x) - % Respect iscategorical methods on classes. + # Respect iscategorical methods on classes. if ismember ('iscategorical', methods (x)) out = iscategorical (x); else out = false; - end + endif else out = false; - end -end + endif +endfunction diff --git a/inst/isdatetime.m b/inst/isdatetime.m index 960ffd9a..0d76a3de 100644 --- a/inst/isdatetime.m +++ b/inst/isdatetime.m @@ -30,19 +30,19 @@ ## @end deftypefn function out = isdatetime (x) - %ISDATETIME True if input is a datetime array. + #ISDATETIME True if input is a datetime array. - % Developer note: see istable for an explanation of this logic. + # Developer note: see istable for an explanation of this logic. if isa (x, 'datetime') out = true; elseif isobject (x) - % Respect isdatetime methods on classes. + # Respect isdatetime methods on classes. if ismember ('isdatetime', methods (x)) out = isdatetime (x); else out = false; - end + endif else out = false; - end -end + endif +endfunction diff --git a/inst/isduration.m b/inst/isduration.m index 962b6a49..0e02d73c 100644 --- a/inst/isduration.m +++ b/inst/isduration.m @@ -30,19 +30,19 @@ ## @end deftypefn function out = isduration (x) - %ISDURATION True if input is a duration array + #ISDURATION True if input is a duration array - % Developer note: see istable for an explanation of this logic. + # Developer note: see istable for an explanation of this logic. if isa (x, 'duration') out = true; elseif isobject (x) - % Respect isduration methods on classes. + # Respect isduration methods on classes. if ismember ('isduration', methods (x)) out = isduration (x); else out = false; - end + endif else out = false; - end -end + endif +endfunction diff --git a/inst/isnanny.m b/inst/isnanny.m index f22bf645..fbd80204 100644 --- a/inst/isnanny.m +++ b/inst/isnanny.m @@ -41,7 +41,7 @@ ## See also: ismissing, @code{isnan}, @code{isnat}, @ref{eqn}, @code{isequaln} ## ## @end deftypefn -function out = isnanny (x) +function out = isnanny (x) if isnumeric (x) out = isnan (x); elseif isa (x, 'datetime') @@ -56,7 +56,7 @@ out = isnan (x); else out = false (size (x)); - end + endif else out = false (size (x)); endif diff --git a/inst/istable.m b/inst/istable.m index 547daee0..3a570a8d 100644 --- a/inst/istable.m +++ b/inst/istable.m @@ -28,7 +28,7 @@ ## ## User-defined classes should only override @code{istable} to return true if ## they conform to the @code{table} public interface. That interface is not -## well-defined or documented yet, so maybe you don't want to do that yet. +## well-defined or documented yet, so maybe you don't want to do that yet. ## ## Returns a scalar logical. ## @@ -42,23 +42,23 @@ # whether or not Tablicious is installed and loaded. function out = istable (x) - %ISTABLE True for table arrays or table-like arrays. + #ISTABLE True for table arrays or table-like arrays. if isa (x, 'table') - % Main case: table arrays are tables. - % This is actually redundant with the generic isobject/method test below, - % but written separately for readability. + # Main case: table arrays are tables. + # This is actually redundant with the generic isobject/method test below, + # but written separately for readability. out = true; elseif isobject (x) - % Respect istable methods on classes. Normally, those methods would "grab" - % this call. We check for it here so that these method overrides are respected - % even if this istable function was called through a function handle or - % similar mechanism, bypassing the regular method dispatch mechanism. + # Respect istable methods on classes. Normally, those methods would "grab" + # this call. We check for it here so that these method overrides are respected + # even if this istable function was called through a function handle or + # similar mechanism, bypassing the regular method dispatch mechanism. if ismember ('istable', methods (x)) out = istable (x); else out = false; - end + endif else out = false; - end -end + endif +endfunction diff --git a/inst/localdate.m b/inst/localdate.m index 3e247b53..284593f3 100644 --- a/inst/localdate.m +++ b/inst/localdate.m @@ -48,11 +48,11 @@ ## @end deftypeivar properties (Access = private) - % The underlying datenums, zoneless, always int-valued (midnights) + # The underlying datenums, zoneless, always int-valued (midnights) dnums = NaN % planar endproperties properties - % Format to display these dates in. Changing the format is currently unimplemented. + # Format to display these dates in. Changing the format is currently unimplemented. Format = 'default' endproperties properties (Dependent = true) @@ -79,17 +79,17 @@ ## ## @end deftypefn function this = localdate (varargin) - %LOCALDATE Construct a new localdate array - % - % localdate () - % localdate (datenums) - % localdate (datestrs) - % localdate (Y, M, D) - % localdate (..., 'Format', Format) - % - % localdate constructs a new localdate array. - - % Peel off options + #LOCALDATE Construct a new localdate array + # + # localdate () + # localdate (datenums) + # localdate (datestrs) + # localdate (Y, M, D) + # localdate (..., 'Format', Format) + # + # localdate constructs a new localdate array. + + # Peel off options args = varargin; knownOptions = {'Format','InputFormat','Locale','PivotYear'}; opts = struct; @@ -98,22 +98,22 @@ opts.(args{end-1}) = args{end}; args(end-1:end) = []; endwhile - - % Handle inputs + + # Handle inputs switch numel (args) case 0 dnums = floor (now); case 1 x = args{1}; if isnumeric (x) - % Convert datenums + # Convert datenums mustBeIntOrNanOrInf (x, 'input'); dnums = double (x); elseif ischar (x) || iscellstr (x) || isa (x, 'string') x = cellstr (x); tfRelative = ismember (x, {'today','tomorrow','yesterday','now'}); if all (tfRelative) - if ~isscalar (x) + if !isscalar (x) error ('Multiple arguments not allowed for relativeDay format'); endif switch x{1} @@ -127,12 +127,12 @@ dnums = floor (now); endswitch else - % They're datestrs - % TODO: Support Locale option + # They're datestrs + # TODO: Support Locale option if isfield (opts, 'Locale') error ('Locale option is unimplemented'); endif - % TODO: Support PivotYear option + # TODO: Support PivotYear option if isfield (opts, 'PivotYear') error ('PivotYear option is unimplemented'); endif @@ -144,7 +144,7 @@ tf = isIntOrNanOrInf (dnums); if ! all (tf) error ('localdate: input datestrs may not have nonzero time-of-day parts'); - end + endif dnums = reshape (dnums, size (x)); endif elseif isstruct (x) @@ -158,8 +158,8 @@ error ('localdate: Invalid input type: %s', class (x)); endif case 2 - % Undocumented calling form for Tablicious's internal use - if ~isequal (args{2}, 'Backdoor') + # Undocumented calling form for Tablicious's internal use + if !isequal (args{2}, 'Backdoor') error ('Invalid number of inputs (excluding options): %d', numel (args)); endif dnums = args{1}; @@ -174,7 +174,7 @@ error ('Invalid number of inputs: %d', nargin); endswitch - % Construct + # Construct this.dnums = dnums; if isfield (opts, 'Format') this.Format = opts.Format; @@ -191,7 +191,7 @@ ## @deftypefnx {Static Method} {@var{out} =} localdate.NaT (@var{sz}) ## ## “Not-a-Time”: Creates NaT-valued arrays. - ## + ## ## Constructs a new @code{datetime} array of all @code{NaT} values of ## the given size. If no input @var{sz} is given, the result is a scalar @code{NaT}. ## @@ -229,7 +229,7 @@ dvec(:,6) = 0; out = datenum (dvec); endfunction - + endmethods methods @@ -237,13 +237,13 @@ function validate (this) mustBeNumeric (this.dnums, 'datenum values'); endfunction - + function out = datetime (this) out = datetime (this.dnums, 'ConvertFrom','datenum'); endfunction function [keysA,keysB] = proxyKeys (a, b) - %PROXYKEYS Proxy key values for sorting and set operations + #PROXYKEYS Proxy key values for sorting and set operations keysA = a.dnums(:); keysB = b.dnums(:); endfunction @@ -251,56 +251,56 @@ function validate (this) function this = set.Format (this, x) error ('Changing localdate format is currently unimplemented'); endfunction - + function out = get.Year (this) s = datestruct (this); out = s.Year; endfunction - + function this = set.Year (this, x) s = datestruct (this); s.Year(:) = x; this.dnums = localdate.datestruct2datenum (s); endfunction - + function out = get.Month (this) s = datestruct (this); out = s.Month; endfunction - + function this = set.Month (this, x) s = datestruct (this); s.Month(:) = x; this.dnums = localdate.datestruct2datenum (s); endfunction - + function out = get.Day (this) s = datestruct (this); out = s.Day; endfunction - + function this = set.Day (this, x) s = datestruct (this); s.Day(:) = x; this.dnums = localdate.datestruct2datenum (s); endfunction - + function out = year (this) out = this.Year; endfunction - + function out = month (this) out = this.Month; endfunction - + function out = day (this) out = this.Day; endfunction - + function out = quarter (this) out = ceil (this.Month / 3); endfunction - + ## -*- texinfo -*- ## @node localdate.ymd ## @deftypefn {Method} {[@var{y}, @var{m}, @var{d}] =} ymd (@var{obj}) @@ -316,22 +316,22 @@ function validate (this) m = s.Month; d = s.Day; endfunction - + function out = week (this) error('week() is unimplemented'); endfunction - + function display (this) - %DISPLAY Custom display. + #DISPLAY Custom display. in_name = inputname (1); - if ~isempty (in_name) + if !isempty (in_name) fprintf ('%s =\n', in_name); endif disp (this); endfunction function disp (this) - %DISP Custom display. + #DISP Custom display. if isempty (this) fprintf ('Empty %s %s\n', size2str (size (this)), class (this)); elseif isscalar (this) @@ -343,7 +343,7 @@ function disp (this) fprintf ('%s\n', txt); endif endfunction - + ## -*- texinfo -*- ## @node localdate.dispstrs ## @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) @@ -354,17 +354,17 @@ function disp (this) ## ## @end deftypefn function out = dispstrs (this) - %DISPSTRS Custom display strings. - % This is an Octave extension. + #DISPSTRS Custom display strings. + # This is an Octave extension. out = cell (size (this)); local_dnums = this.dnums; tfNaN = isnan (local_dnums); out(tfNaN) = {'NaT'}; - if any(~tfNaN(:)) - out(~tfNaN) = cellstr (datestr (local_dnums(~tfNaN))); + if any(!tfNaN(:)) + out(!tfNaN) = cellstr (datestr (local_dnums(!tfNaN))); endif endfunction - + function out = sprintf(fmt, varargin) args = varargin; for i = 1:numel (args) @@ -374,7 +374,7 @@ function disp (this) endfor out = sprintf (fmt, args{:}); endfunction - + function out = fprintf(varargin) args = varargin; if isnumeric (args{1}) @@ -409,10 +409,10 @@ function disp (this) ## ## @end deftypefn function out = datestr (this, varargin) - %DATESTR Format as date string. + #DATESTR Format as date string. out = datestr (this.dnums, varargin{:}); endfunction - + ## -*- texinfo -*- ## @node localdate.datestrs ## @deftypefn {Method} {@var{out} =} datestrs (@var{obj}) @@ -425,16 +425,16 @@ function disp (this) ## ## @end deftypefn function out = datestrs (this, varargin) - %DATESTSRS Format as date strings. - % - % Returns cellstr. - % - % This is an Octave extension. + #DATESTSRS Format as date strings. + # + # Returns cellstr. + # + # This is an Octave extension. s = datestr (this); c = cellstr (s); out = reshape (c, size (this)); endfunction - + ## -*- texinfo -*- ## @node localdate.datestruct ## @deftypefn {Method} {@var{out} =} datestruct (@var{obj}) @@ -461,7 +461,7 @@ function disp (this) out.Month = reshape (dvec(:,2), sz); out.Day = reshape (dvec(:,3), sz); endfunction - + ## -*- texinfo -*- ## @node localdate.posixtime ## @deftypefn {Method} {@var{out} =} posixtime (@var{obj}) @@ -476,17 +476,17 @@ function disp (this) ## ## @end deftypefn function out = posixtime (this) - %POSIXTIME Convert this to POSIX time values (seconds since the Unix epoch) - % - % Converts this to POSIX time values that represent the same time. The - % returned values will be doubles that may include fractional second values. - % POSIX times are, by definition, in UTC. - % - % Returns double array of same size as this. - % - % This is an Octave extension. - - % Yes, this call to datetime instead of localdate is intentional + #POSIXTIME Convert this to POSIX time values (seconds since the Unix epoch) + # + # Converts this to POSIX time values that represent the same time. The + # returned values will be doubles that may include fractional second values. + # POSIX times are, by definition, in UTC. + # + # Returns double array of same size as this. + # + # This is an Octave extension. + + # Yes, this call to datetime instead of localdate is intentional out = datetime.datenum2posix (this.dnums); endfunction @@ -513,10 +513,10 @@ function disp (this) ## ## @end deftypefn function out = isnat (this) - %ISNAT True if input is NaT. + #ISNAT True if input is NaT. out = isnan (this.dnums); endfunction - + ## -*- texinfo -*- ## @node localdate.isnan ## @deftypefn {Method} {@var{out} =} isnan (@var{obj}) @@ -528,52 +528,52 @@ function disp (this) ## ## @end deftypefn function out = isnan (this) - %ISNAN Alias for isnat. - % - % This is an Octave extension + #ISNAN Alias for isnat. + # + # This is an Octave extension out = isnat (this); endfunction - - % Relational operations + + # Relational operations function out = lt (A, B) - %LT Less than. + #LT Less than. [A, B] = localdate.promote (A, B); out = A.dnums < B.dnums; endfunction function out = le (A, B) - %LE Less than or equal. + #LE Less than or equal. [A, B] = localdate.promote (A, B); out = A.dnums <= B.dnums; endfunction function out = ne (A, B) - %NE Not equal. + #NE Not equal. [A, B] = localdate.promote (A, B); out = A.dnums ~= B.dnums; endfunction function out = eq (A, B) - %EQ Equals. + #EQ Equals. [A, B] = localdate.promote (A, B); out = A.dnums == B.dnums; endfunction function out = ge (A, B) - %GE Greater than or equal. + #GE Greater than or equal. [A, B] = localdate.promote (A, B); out = A.dnums >= B.dnums; endfunction function out = gt (A, B) - %GT Greater than. + #GT Greater than. [A, B] = localdate.promote (A, B); out = A.dnums > B.dnums; endfunction - % Arithmetic - + # Arithmetic + function out = plus (this, b) mustBeA (this, 'localdate'); if isnumeric (b) @@ -601,7 +601,7 @@ function disp (this) else endif endfunction - + function out = minus (a, b) if ! isa (a, 'localdate') a = localdate (a); @@ -612,152 +612,152 @@ function disp (this) delta = a.dnums - b.dnums; out = duration.ofDays (delta); endfunction - - % Planar boilerplate stuff - + + # Planar boilerplate stuff + function out = numel (this) - %NUMEL Number of elements in array. + #NUMEL Number of elements in array. out = numel (this.dnums); endfunction - + function out = ndims (this) - %NDIMS Number of dimensions. + #NDIMS Number of dimensions. out = ndims (this.dnums); endfunction - + function out = size (this, dim) - %SIZE Size of array. + #SIZE Size of array. if nargin == 1 out = size (this.dnums); else out = size (this.dnums, dim); endif endfunction - + function out = isempty (this) - %ISEMPTY True for empty array. + #ISEMPTY True for empty array. out = isempty (this.dnums); endfunction - + function out = isscalar (this) - %ISSCALAR True if input is scalar. + #ISSCALAR True if input is scalar. out = isscalar (this.dnums); endfunction - + function out = isvector (this) - %ISVECTOR True if input is a vector. + #ISVECTOR True if input is a vector. out = isvector (this.dnums); endfunction - + function out = iscolumn (this) - %ISCOLUMN True if input is a column vector. + #ISCOLUMN True if input is a column vector. out = iscolumn (this.dnums); endfunction - + function out = isrow (this) - %ISROW True if input is a row vector. + #ISROW True if input is a row vector. out = isrow (this.dnums); endfunction - + function out = ismatrix (this) - %ISMATRIX True if input is a matrix. + #ISMATRIX True if input is a matrix. out = ismatrix (this.dnums); endfunction - + function this = reshape (this, varargin) - %RESHAPE Reshape array. + #RESHAPE Reshape array. this.dnums = reshape (this.dnums, varargin{:}); endfunction - + function this = squeeze (this, varargin) - %SQUEEZE Remove singleton dimensions. + #SQUEEZE Remove singleton dimensions. this.dnums = squeeze (this.dnums, varargin{:}); endfunction - + function this = circshift (this, varargin) - %CIRCSHIFT Shift positions of elements circularly. + #CIRCSHIFT Shift positions of elements circularly. this.dnums = circshift (this.dnums, varargin{:}); endfunction - + function this = permute (this, varargin) - %PERMUTE Permute array dimensions. + #PERMUTE Permute array dimensions. this.dnums = permute (this.dnums, varargin{:}); endfunction - + function this = ipermute (this, varargin) - %IPERMUTE Inverse permute array dimensions. + #IPERMUTE Inverse permute array dimensions. this.dnums = ipermute (this.dnums, varargin{:}); endfunction - + function this = repmat (this, varargin) - %REPMAT Replicate and tile array. + #REPMAT Replicate and tile array. this.dnums = repmat (this.dnums, varargin{:}); endfunction - + function this = ctranspose (this, varargin) - %CTRANSPOSE Complex conjugate transpose. + #CTRANSPOSE Complex conjugate transpose. this.dnums = ctranspose (this.dnums, varargin{:}); endfunction - + function this = transpose (this, varargin) - %TRANSPOSE Transpose vector or matrix. + #TRANSPOSE Transpose vector or matrix. this.dnums = transpose (this.dnums, varargin{:}); endfunction - + function [this, nshifts] = shiftdim (this, n) - %SHIFTDIM Shift dimensions. + #SHIFTDIM Shift dimensions. if nargin > 1 this.dnums = shiftdim (this.dnums, n); else [this.dnums, nshifts] = shiftdim (this.dnums); endif endfunction - + function out = cat (dim, varargin) - %CAT Concatenate arrays. + #CAT Concatenate arrays. args = localdate.promotec (varargin); out = args{1}; fieldArgs = cellfun (@(obj) obj.dnums, args, 'UniformOutput', false); out.dnums = cat (dim, fieldArgs{:}); endfunction - + function out = horzcat (varargin) - %HORZCAT Horizontal concatenation. + #HORZCAT Horizontal concatenation. out = cat (2, varargin{:}); endfunction - + function out = vertcat (varargin) - %VERTCAT Vertical concatenation. + #VERTCAT Vertical concatenation. out = cat (1, varargin{:}); endfunction - + function this = subsasgn (this, s, b) - %SUBSASGN Subscripted assignment. - - % Chained subscripts + #SUBSASGN Subscripted assignment. + + # Chained subscripts if numel(s) > 1 rhs_in = subsref (this, s(1)); rhs = subsasgn (rhs_in, s(2:end), b); else rhs = b; endif - - % Base case + + # Base case switch s(1).type case '()' this = subsasgnParensPlanar (this, s(1), rhs); - %TODO: Correct value of vivified indexes to NaN; right now it's zero. + #TODO: Correct value of vivified indexes to NaN; right now it's zero. case '{}' error ('{}-subscripting is not supported for class %s', class (this)); case '.' this.(s(1).subs) = rhs; endswitch endfunction - + function out = subsref (this, s) - %SUBSREF Subscripted reference. - - % Base case + #SUBSREF Subscripted reference. + + # Base case switch s(1).type case '()' out = subsrefParensPlanar (this, s(1)); @@ -766,26 +766,26 @@ function disp (this) case '.' out = this.(s(1).subs); endswitch - - % Chained reference + + # Chained reference if numel (s) > 1 out = subsref (out, s(2:end)); endif endfunction - + function [out, Indx] = sort (this) - %SORT Sort array elements. + #SORT Sort array elements. if isvector (this) isRow = isrow (this); this = subset (this, ':'); - % NaNs sort stably to end, so handle them separately + # NaNs sort stably to end, so handle them separately tfNan = isnan (this); nans = subset (this, tfNan); - nonnans = subset (this, ~tfNan); - ixNonNan = find (~tfNan); + nonnans = subset (this, !tfNan); + ixNonNan = find (!tfNan); proxy = proxyKeys (nonnans); [~, ix] = sortrows (proxy); - out = [subset(nonnans, ix); nans]; + out = [subset(nonnans, ix); nans]; Indx = [ixNonNan(ix); find (tfNan)]; if isRow out = out'; @@ -803,10 +803,10 @@ function disp (this) endfunction function [out, Indx] = sortND (this) - %SORTND N-dimensional sort implementation - - % I believe this multi-dimensional implementation is correct, - % but have not tested it yet. Use with caution. + #SORTND N-dimensional sort implementation + + # I believe this multi-dimensional implementation is correct, + # but have not tested it yet. Use with caution. out = this; Indx = NaN (size (out)); sz = size (this); @@ -827,11 +827,11 @@ function disp (this) if ixs{2} > sz(2) break; endif - endwhile + endwhile endfunction - + function [out, Indx] = unique (this, varargin) - %UNIQUE Set unique. + #UNIQUE Set unique. flags = setdiff (varargin, {'rows'}); if ismember('rows', varargin) [~,proxyIx] = unique (this); @@ -843,8 +843,8 @@ function disp (this) this = subset (this, ':'); tfNaN = isnan (this); nans = subset (this, tfNaN); - nonnans = subset (this, ~tfNaN); - ixNonnan = find (~tfNaN); + nonnans = subset (this, !tfNaN); + ixNonnan = find (!tfNaN); keys = proxyKeys (nonnans); if isa (keys, 'table') [~,ix] = unique (keys, flags{:}); @@ -858,16 +858,16 @@ function disp (this) endif endif endfunction - + function [out, Indx] = ismember (a, b, varargin) - %ISMEMBER True for set member. + #ISMEMBER True for set member. if ismember ('rows', varargin) error ('ismember(..., ''rows'') is unsupported'); endif - if ~isa (a, 'localdate') + if !isa (a, 'localdate') a = localdate (a); endif - if ~isa (b, 'localdate') + if !isa (b, 'localdate') b = localdate (b); endif [proxyA, proxyB] = proxyKeys (a, b); @@ -875,21 +875,21 @@ function disp (this) out = reshape (out, size(a)); Indx = reshape (Indx, size(a)); endfunction - + function [out, Indx] = setdiff (a, b, varargin) - %SETDIFF Set difference. + #SETDIFF Set difference. if ismember ('rows', varargin) error ('setdiff(..., ''rows'') is unsupported'); endif [tf,~] = ismember (a, b); - out = parensRef (a, ~tf); - Indx = find (~tf); + out = parensRef (a, !tf); + Indx = find (!tf); [out,ix] = unique (out); Indx = Indx(ix); endfunction - + function [out, ia, ib] = intersect (a, b, varargin) - %INTERSECT Set intersection. + #INTERSECT Set intersection. if ismember ('rows', varargin) error ('intersect(..., ''rows'') is unsupported'); endif @@ -897,9 +897,9 @@ function disp (this) [~,ia,ib] = intersect (proxyA, proxyB, 'rows'); out = parensRef (a, ia); endfunction - + function [out, ia, ib] = union (a, b, varargin) - %UNION Set union. + #UNION Set union. if ismember ('rows', varargin) error ('union(..., ''rows'') is unsupported'); endif @@ -913,64 +913,64 @@ function disp (this) endmethods methods (Access=private) - + function out = subsasgnParensPlanar (this, s, rhs) - %SUBSASGNPARENSPLANAR ()-assignment for planar object - if ~isa (rhs, 'localdate') + #SUBSASGNPARENSPLANAR ()-assignment for planar object + if !isa (rhs, 'localdate') rhs = localdate (rhs); endif out = this; out.dnums = tblish.chrono.internal.prefillNewSizeForSubsasgn(this.dnums, s.subs, NaN); out.dnums(s.subs{:}) = rhs.dnums; endfunction - + function out = subsrefParensPlanar (this, s) - %SUBSREFPARENSPLANAR ()-indexing for planar object + #SUBSREFPARENSPLANAR ()-indexing for planar object out = this; out.dnums = this.dnums(s.subs{:}); endfunction - + function out = parensRef (this, varargin) - %PARENSREF ()-indexing, for this class's internal use + #PARENSREF ()-indexing, for this class's internal use out = subsrefParensPlanar(this, struct ('subs', {varargin})); endfunction - + function out = subset (this, varargin) - %SUBSET Subset array by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the RHS, which don't work properly inside the class - % because they don't respect the subsref() override. + #SUBSET Subset array by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the RHS, which don't work properly inside the class + # because they don't respect the subsref() override. out = parensRef (this, varargin{:}); endfunction - + function out = asgn (this, ix, value) - %ASGN Assign array elements by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the LHS, which don't work properly inside - % the class because they don't respect the subsasgn() override. - if ~iscell (ix) + #ASGN Assign array elements by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the LHS, which don't work properly inside + # the class because they don't respect the subsasgn() override. + if !iscell (ix) ix = { ix }; endif s.type = '()'; s.subs = ix; out = subsasgnParensPlanar (this, s, value); endfunction - + endmethods - + methods (Static = true) function out = promotec (args) - %PROMOTEC Promote inputs to be compatible, cell version + #PROMOTEC Promote inputs to be compatible, cell version out = cell(size(args)); [out{:}] = promote(args{:}); endfunction function varargout = promote (varargin) - %PROMOTE Promote inputs to be compatible + #PROMOTE Promote inputs to be compatible args = varargin; for i = 1:numel (args) - if ~isa (args{i}, 'localdate') + if !isa (args{i}, 'localdate') args{i} = localdate (args{i}); endif endfor @@ -991,7 +991,7 @@ function mustBeNumeric (x, label) if nargin < 2; label = []; endif if isnumeric (x) return - end + endif if isempty (label) label = inputname (1); endif @@ -1014,7 +1014,7 @@ function mustBeNumeric (x, label) but = "it was complex"; elseif ! all (floor (x) == x) but = "it had fractional values in some elements"; - end + endif if ! isempty (but) if isempty (label) label = inputname (1); diff --git a/inst/milliseconds.m b/inst/milliseconds.m index 524c84ed..1cf66d62 100644 --- a/inst/milliseconds.m +++ b/inst/milliseconds.m @@ -31,14 +31,14 @@ function out = milliseconds (x) - %MILLISECONDS Duration in milliseconds - % - % If input is numeric, returns a @duration array that is that many milliseconds long. - % - % If input is a duration, converts the duration to a number of milliseconds. + #MILLISECONDS Duration in milliseconds + # + # If input is numeric, returns a @duration array that is that many milliseconds long. + # + # If input is a duration, converts the duration to a number of milliseconds. if isnumeric (x) out = duration.ofDays (double (x) / (24 * 60 * 60 * 1000)); else error ('Invalid input: expected numeric or duration; got %s', class (x)); - end -end + endif +endfunction diff --git a/inst/minutes.m b/inst/minutes.m index 6021c251..3d684319 100644 --- a/inst/minutes.m +++ b/inst/minutes.m @@ -24,14 +24,14 @@ ## @end deftypefn function out = minutes (x) - %MINUTES Duration in minutes - % - % If input is numeric, returns a @duration array that is that many minutes long. - % - % If input is a duration, converts the duration to a number of minutes. + #MINUTES Duration in minutes + # + # If input is numeric, returns a @duration array that is that many minutes long. + # + # If input is a duration, converts the duration to a number of minutes. if isnumeric (x) out = duration.ofDays (double(x) / (24 * 60)); else error ('Invalid input: expected numeric or duration; got %s', class (x)); - end -end + endif +endfunction diff --git a/inst/missing.m b/inst/missing.m index 3a1229b1..34661163 100644 --- a/inst/missing.m +++ b/inst/missing.m @@ -14,7 +14,7 @@ ## along with this program; If not, see . -# TODO: Because there is only one missing value, this could probably be +# TODO: Because there is only one missing value, this could probably be # optimized to just store a size variable, and not store the .data property. # I'm just using that now because it was easy to implement, due to my existing # planar-gen boilerplate code. @@ -25,7 +25,7 @@ ## ## Generic auto-converting missing value. ## - ## @code{missing} is a generic missing value that auto-converts to other + ## @code{missing} is a generic missing value that auto-converts to other ## types. ## ## A @code{missing} array indicates a missing value, of no particular type. It auto- @@ -50,7 +50,7 @@ properties data = NaN endproperties - + methods ## -*- texinfo -*- ## @node missing.missing @@ -63,16 +63,16 @@ ## ## @end deftypefn function display (this) - %DISPLAY Custom display. + #DISPLAY Custom display. in_name = inputname (1); - if ~isempty (in_name) + if !isempty (in_name) fprintf ('%s =\n', in_name); endif disp (this); endfunction - + function disp (this) - disp (dispstr (this)); + disp (dispstr (this)); endfunction function out = dispstr (this) @@ -99,9 +99,9 @@ function disp (this) function out = dispstrs (this) out = repmat ({''}, size (this)); endfunction - - % Semantics - + + # Semantics + ## -*- texinfo -*- ## @node missing.ismissing ## @deftypefn {Method} {@var{out} =} ismissing (@var{obj}) @@ -116,7 +116,7 @@ function disp (this) function out = ismissing (this) out = true (size (this)); endfunction - + ## -*- texinfo -*- ## @node missing.isnan ## @deftypefn {Method} {@var{out} =} isnan (@var{obj}) @@ -131,7 +131,7 @@ function disp (this) function out = isnan (this) out = true (size (this)); endfunction - + ## -*- texinfo -*- ## @node missing.isnanny ## @deftypefn {Method} {@var{out} =} isnanny (@var{obj}) @@ -146,105 +146,105 @@ function disp (this) function out = isnanny (this) out = true (size (this)); endfunction - + function out = eq (A, B) sz = missing.size_scalar_expand (A, B); out = false (sz); endfunction - + function out = ne (A, B) sz = missing.size_scalar_expand (A, B); out = true (sz); endfunction - + function out = gt (A, B) sz = missing.size_scalar_expand (A, B); out = false (sz); endfunction - + function out = ge (A, B) sz = missing.size_scalar_expand (A, B); out = false (sz); endfunction - + function out = lt (A, B) sz = missing.size_scalar_expand (A, B); out = false (sz); endfunction - + function out = le (A, B) sz = missing.size_scalar_expand (A, B); out = false (sz); endfunction - - % Conversion stuff - + + # Conversion stuff + function out = double (this) out = this.data; endfunction - + function out = single (this) out = single (this.data); endfunction - + function out = uint64 (this) out = uint64 (this.data); endfunction - + function out = int64 (this) out = int64 (this.data); endfunction - + function out = uint32 (this) out = uint32 (this.data); endfunction - + function out = int32 (this) out = int32 (this.data); endfunction - + function out = uint16 (this) out = uint16 (this.data); endfunction - + function out = int16 (this) out = int16 (this.data); endfunction - + function out = uint8 (this) out = uint8 (this.data); endfunction - + function out = int8 (this) out = int8 (this.data); endfunction - + function out = char (this) out = repmat (' ', size (this)); endfunction - + function out = cellstr (this) out = repmat ({' '}, size (this)); endfunction - + function out = cell (this) out = repmat ({' '}, size (this)); endfunction - + function out = datetime (this) out = NaT (size (this)); endfunction - + function out = duration (this) out = duration (NaN (size (this))); endfunction - + function out = calendarDuration (this) out = calendarDuration (NaN (size (this))); endfunction - % Arithmetic - + # Arithmetic + function out = plus (A, B) args = missing.demote ({A B}); out = plus(args{1}, args{2}); @@ -285,153 +285,153 @@ function disp (this) out = mpower(args{1}, args{2}); endfunction - % Auto-conversion stuff - + # Auto-conversion stuff + function out = cat (dim, varargin) args = missing.demote (varargin); out = cat (dim, args{:}); endfunction - % Array stuff - + # Array stuff + function [tf, loc] = ismember (this, varargin) tf = false (size (this)); loc = zeros (size (this)); endfunction - + function [out, ix, jx] = unique (this) out = this; ix = 1:numel (this); jx = ix; endfunction - + function [out, ix] = sort (this) out = this; - ix = 1:numel (this); + ix = 1:numel (this); endfunction - + endmethods - - % Planar boilerplate stuff - + + # Planar boilerplate stuff + methods function out = numel (this) - %NUMEL Number of elements in array. + #NUMEL Number of elements in array. out = numel (this.data); endfunction - + function out = ndims (this) - %NDIMS Number of dimensions. + #NDIMS Number of dimensions. out = ndims (this.data); endfunction - + function out = size (this) - %SIZE Size of array. + #SIZE Size of array. out = size (this.data); endfunction - + function out = isempty (this) - %ISEMPTY True for empty array. + #ISEMPTY True for empty array. out = isempty (this.data); endfunction - + function out = isscalar (this) - %ISSCALAR True if input is scalar. + #ISSCALAR True if input is scalar. out = isscalar (this.data); endfunction - + function out = isvector (this) - %ISVECTOR True if input is a vector. + #ISVECTOR True if input is a vector. out = isvector (this.data); endfunction - + function out = iscolumn (this) - %ISCOLUMN True if input is a column vector. + #ISCOLUMN True if input is a column vector. out = iscolumn (this.data); endfunction - + function out = isrow (this) - %ISROW True if input is a row vector. + #ISROW True if input is a row vector. out = isrow (this.data); endfunction - + function out = ismatrix (this) - %ISMATRIX True if input is a matrix. + #ISMATRIX True if input is a matrix. out = ismatrix (this.data); endfunction - + function this = reshape (this, varargin) - %RESHAPE Reshape array. + #RESHAPE Reshape array. this.data = reshape (this.data, varargin{:}); endfunction - + function this = squeeze (this, varargin) - %SQUEEZE Remove singleton dimensions. + #SQUEEZE Remove singleton dimensions. this.data = squeeze (this.data, varargin{:}); endfunction - + function this = circshift (this, varargin) - %CIRCSHIFT Shift positions of elements circularly. + #CIRCSHIFT Shift positions of elements circularly. this.data = circshift (this.data, varargin{:}); endfunction - + function this = permute (this, varargin) - %PERMUTE Permute array dimensions. + #PERMUTE Permute array dimensions. this.data = permute (this.data, varargin{:}); endfunction - + function this = ipermute (this, varargin) - %IPERMUTE Inverse permute array dimensions. + #IPERMUTE Inverse permute array dimensions. this.data = ipermute (this.data, varargin{:}); endfunction - + function this = repmat (this, varargin) - %REPMAT Replicate and tile array. + #REPMAT Replicate and tile array. this.data = repmat (this.data, varargin{:}); endfunction - + function this = ctranspose (this, varargin) - %CTRANSPOSE Complex conjugate transpose. + #CTRANSPOSE Complex conjugate transpose. this.data = ctranspose (this.data, varargin{:}); endfunction - + function this = transpose (this, varargin) - %TRANSPOSE Transpose vector or matrix. + #TRANSPOSE Transpose vector or matrix. this.data = transpose (this.data, varargin{:}); endfunction - + function [this, nshifts] = shiftdim (this, n) - %SHIFTDIM Shift dimensions. + #SHIFTDIM Shift dimensions. if nargin > 1 this.data = shiftdim (this.data, n); else [this.data, nshifts] = shiftdim (this.data); endif endfunction - + function out = horzcat (varargin) - %HORZCAT Horizontal concatenation. + #HORZCAT Horizontal concatenation. out = cat (2, varargin{:}); endfunction - + function out = vertcat (varargin) - %VERTCAT Vertical concatenation. + #VERTCAT Vertical concatenation. out = cat (1, varargin{:}); endfunction - + function this = subsasgn(this, s, b) - %SUBSASGN Subscripted assignment. - - % Chained subscripts + #SUBSASGN Subscripted assignment. + + # Chained subscripts if numel(s) > 1 rhs_in = subsref(this, s(1)); rhs = subsasgn(rhs_in, s(2:end), b); else rhs = b; endif - - % Base case + + # Base case switch s(1).type case '()' this = subsasgnParensPlanar(this, s(1), rhs); @@ -441,11 +441,11 @@ function disp (this) error ('missing:BadOperation', '.-assignment is not defined for missing arrays'); endswitch endfunction - + function varargout = subsref(this, s) - %SUBSREF Subscripted reference. - - % Base case + #SUBSREF Subscripted reference. + + # Base case switch s(1).type case '()' varargout = { subsrefParensPlanar(this, s(1)) }; @@ -456,71 +456,71 @@ function disp (this) error('missing:BadOperation',... '.-subscripting is not supported for missing arrays'); endswitch - - % Chained reference + + # Chained reference if numel (s) > 1 out = subsref (out, s(2:end)); endif endfunction - + endmethods - + methods (Access=private) - + function this = subsasgnParensPlanar (this, s, rhs) - %SUBSASGNPARENSPLANAR ()-assignment for planar object - if ~isa (rhs, 'missing') + #SUBSASGNPARENSPLANAR ()-assignment for planar object + if !isa (rhs, 'missing') rhs = missing (rhs); endif this.data(s.subs{:}) = rhs.data; endfunction - + function out = subsrefParensPlanar(this, s) - %SUBSREFPARENSPLANAR ()-indexing for planar object + #SUBSREFPARENSPLANAR ()-indexing for planar object out = this; out.data = this.data(s.subs{:}); endfunction - + function out = parensRef(this, varargin) - %PARENSREF ()-indexing, for this class's internal use + #PARENSREF ()-indexing, for this class's internal use out = subsrefParensPlanar (this, struct ('subs', {varargin})); endfunction - + function out = subset(this, varargin) - %SUBSET Subset array by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the RHS, which don't work properly inside the class - % because they don't respect the subsref() override. + #SUBSET Subset array by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the RHS, which don't work properly inside the class + # because they don't respect the subsref() override. out = parensRef (this, varargin{:}); endfunction - + function out = asgn(this, ix, value) - %ASGN Assign array elements by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the LHS, which don't work properly inside - % the class because they don't respect the subsasgn() override. - if ~iscell(ix) + #ASGN Assign array elements by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the LHS, which don't work properly inside + # the class because they don't respect the subsasgn() override. + if !iscell(ix) ix = { ix }; endif s.type = '()'; s.subs = ix; out = subsasgnParensPlanar(this, s, value); endfunction - + endmethods methods (Static) function out = demote (args) - %DEMOTE Internal implementation method - % - % This will become private before tblish.table release 1.0. + #DEMOTE Internal implementation method + # + # This will become private before tblish.table release 1.0. found_type = []; for i = 1:numel (args) if isa (args{i}, 'missing') continue elseif isnumeric (args{i}) || isa (args{i}, 'duration') ... || isa (args{i}, 'calendarDuration') - % These all take NaNs. + # These all take NaNs. found_type = 'numeric'; elseif iscell (args{i}) found_type = 'cell'; @@ -550,9 +550,9 @@ function disp (this) endif endfor endfunction - + function out = size_scalar_expand (A, B) - %SIZE_SCALAR_EXPAND Internal implementation method + #SIZE_SCALAR_EXPAND Internal implementation method if isscalar (A) out = size (B); else diff --git a/inst/mustBeSameSize.m b/inst/mustBeSameSize.m index d36c5971..adc8e384 100644 --- a/inst/mustBeSameSize.m +++ b/inst/mustBeSameSize.m @@ -21,9 +21,9 @@ ## Raises an error if the inputs @var{a} and @var{b} are not the same size, ## as determined by @code{isequal (size (a), size (b))}. ## -## @var{labelA} and @var{labelB} are optional inputs that determine how -## the input will be described in error messages. If not supplied, -## @code{inputname (...)} is used, and if that is empty, it falls back to +## @var{labelA} and @var{labelB} are optional inputs that determine how +## the input will be described in error messages. If not supplied, +## @code{inputname (...)} is used, and if that is empty, it falls back to ## "input 1" and "input 2". ## ## @end deftypefn diff --git a/inst/mustBeScalar.m b/inst/mustBeScalar.m index 8df8fd18..2c7db1da 100644 --- a/inst/mustBeScalar.m +++ b/inst/mustBeScalar.m @@ -28,7 +28,7 @@ ## @end deftypefn function mustBeScalar (x) - if ~isscalar (x) + if !isscalar (x) name = inputname (1); if isempty (name) name = 'input'; diff --git a/inst/pp.m b/inst/pp.m index 6f519dcb..59416007 100644 --- a/inst/pp.m +++ b/inst/pp.m @@ -23,25 +23,25 @@ ## ## This is an alias for prettyprint(), with additional name-conversion magic. ## -## If you pass in a char, instead of pretty-printing that directly, it will +## If you pass in a char, instead of pretty-printing that directly, it will ## grab and pretty-print the variable of that name from the caller’s workspace. ## This is so you can conveniently run it from the command line. ## ## @end deftypefn function pp(varargin) - %PP Alias for prettyprint, for debugging - % - % pp (x) - % pp x - % pp (A, B, C) - % pp A B C - % - % This is an alias for prettyprint(), with additional name-conversion magic. - % - % If you pass in a string, instead of pretty-printing that directly, it will - % grab and pretty-print the variable of that name from the caller's workspace. - % This is so you can conveniently run it from the command line. - + #PP Alias for prettyprint, for debugging + # + # pp (x) + # pp x + # pp (A, B, C) + # pp A B C + # + # This is an alias for prettyprint(), with additional name-conversion magic. + # + # If you pass in a string, instead of pretty-printing that directly, it will + # grab and pretty-print the variable of that name from the caller's workspace. + # This is so you can conveniently run it from the command line. + show_label = nargin > 1; for i = 1:numel (varargin) arg = varargin{i}; @@ -55,7 +55,7 @@ function pp(varargin) label = sprintf ("Input %d", i); endif endif - + if show_label fprintf ("%s:\n", label); endif diff --git a/inst/private/__eval_expr_with_table_vars_in_workspace__.m b/inst/private/__eval_expr_with_table_vars_in_workspace__.m index 8464a40f..2aa62b81 100644 --- a/inst/private/__eval_expr_with_table_vars_in_workspace__.m +++ b/inst/private/__eval_expr_with_table_vars_in_workspace__.m @@ -15,13 +15,13 @@ function out = __eval_expr_with_table_vars_in_workspace__ (__tbl__, __expr__) - % Set up workspace + # Set up workspace __tbl_vars__ = varnames (__tbl__); for __i_var__ = 1:numel (__tbl_vars__) eval (sprintf ('%s = __tbl__.%s;', __tbl_vars__{__i_var__}, __tbl_vars__{__i_var__})); endfor - - % Eval code + + # Eval code out = eval (__expr__); - -end \ No newline at end of file + +endfunction diff --git a/inst/private/format_dispstr_array.m b/inst/private/format_dispstr_array.m index a846f595..d650c8c7 100644 --- a/inst/private/format_dispstr_array.m +++ b/inst/private/format_dispstr_array.m @@ -17,7 +17,7 @@ ## . function out = format_dispstr_array (strs) - %FORMAT_DISPSTR_ARRAY Format an array of strings as a matrix display + #FORMAT_DISPSTR_ARRAY Format an array of strings as a matrix display if ismatrix (strs) out = prettyprint_matrix (strs); @@ -47,7 +47,7 @@ endfunction function out = prettyprint_matrix (strs) - if ~ismatrix (strs) + if !ismatrix (strs) error ('Input must be matrix; got %d-D', ndims (strs)); endif lens = cellfun ('prodofsize', strs); @@ -59,4 +59,4 @@ lines{i} = sprintf (format, strs{i,:}); endfor out = [strjoin(lines, '\n') sprintf("\n")]; -endfunction \ No newline at end of file +endfunction diff --git a/inst/private/intersect_stable.m b/inst/private/intersect_stable.m index 359d0fa4..58097b5b 100644 --- a/inst/private/intersect_stable.m +++ b/inst/private/intersect_stable.m @@ -14,8 +14,8 @@ ## along with this program; If not, see . function [out, indx, jndx] = intersect_stable (A, B) - %INTERSECT_STABLE Set intersection with stable value ordering - + #INTERSECT_STABLE Set intersection with stable value ordering + [tf, indx] = ismember (A, B); out = A(tf); [uOut, ix2] = unique (out); diff --git a/inst/private/mycombvec.m b/inst/private/mycombvec.m index ba012858..e27ce521 100644 --- a/inst/private/mycombvec.m +++ b/inst/private/mycombvec.m @@ -17,12 +17,12 @@ ## . function out = mycombvec (vecs) - %MYCOMBVEC All combinations of values from vectors - % - % This is similar to Matlab's combvec, but has a different signature. - if ~iscell (vecs) + #MYCOMBVEC All combinations of values from vectors + # + # This is similar to Matlab's combvec, but has a different signature. + if !iscell (vecs) error ('Input vecs must be cell'); - end + endif switch numel (vecs) case 0 error ('Must supply at least one input vector'); diff --git a/inst/private/num2cellstr.m b/inst/private/num2cellstr.m index 9c9f896a..d7a4acd8 100644 --- a/inst/private/num2cellstr.m +++ b/inst/private/num2cellstr.m @@ -17,6 +17,6 @@ ## . function out = num2cellstr (x) -%NUM2CELLSTR Like num2str, but return cellstr of individual number strings +#NUM2CELLSTR Like num2str, but return cellstr of individual number strings out = strtrim (cellstr (num2str (x(:)))); -endfunction \ No newline at end of file +endfunction diff --git a/inst/private/peelOffNameValueOptions.m b/inst/private/peelOffNameValueOptions.m index f7e30b18..08fa18e7 100644 --- a/inst/private/peelOffNameValueOptions.m +++ b/inst/private/peelOffNameValueOptions.m @@ -14,15 +14,15 @@ ## along with this program; If not, see . function [opts, remainingArgs, peeledArgs] = peelOffNameValueOptions (args, knownOpts) - %PEELOFFNAMEVALUEOPTIONS Peel off name-value options from argins - % - % Peels off recognized name-value options from the end of an argument array. + #PEELOFFNAMEVALUEOPTIONS Peel off name-value options from argins + # + # Peels off recognized name-value options from the end of an argument array. opts = struct; peeledArgs = {}; while numel (args) >= 2 && ischar (args{end-1}) && ismember (args{end-1}, knownOpts) peeledArgs = [peeledArgs args(end-1:end)]; opts.(args{end-1}) = args{end}; args(end-1:end) = []; - end + endwhile remainingArgs = args; endfunction diff --git a/inst/private/prettyprint_array.m b/inst/private/prettyprint_array.m index 1326e618..f81c0d47 100644 --- a/inst/private/prettyprint_array.m +++ b/inst/private/prettyprint_array.m @@ -17,11 +17,11 @@ ## . function out = prettyprint_array (strs) -%PRETTYPRINT_ARRAY Pretty-print an array from dispstrs -% -% out = prettyprint_array (strs) -% -% strs (cellstr) is an array of display strings of any size. +#PRETTYPRINT_ARRAY Pretty-print an array from dispstrs +# +# out = prettyprint_array (strs) +# +# strs (cellstr) is an array of display strings of any size. if ismatrix (strs) out = prettyprint_matrix (strs); @@ -51,7 +51,7 @@ endfunction function out = prettyprint_matrix (strs) -if ~ismatrix (strs) +if !ismatrix (strs) error ('Input must be matrix; got %d-D', ndims (strs)); endif lens = cellfun ('prodofsize', strs); @@ -63,4 +63,4 @@ lines{i} = sprintf (format, strs{i,:}); endfor out = strjoin (lines, '\n'); -endfunction \ No newline at end of file +endfunction diff --git a/inst/private/setdiff_stable.m b/inst/private/setdiff_stable.m index 1eb701b9..1efa36cd 100644 --- a/inst/private/setdiff_stable.m +++ b/inst/private/setdiff_stable.m @@ -14,7 +14,7 @@ ## along with this program; If not, see . function [out, indx] = setdiff_stable (A, B) - %SETDIFF_STABLE Set difference with stable value ordering + #SETDIFF_STABLE Set difference with stable value ordering [tf, loc] = ismember (A, B); out = A; indx = 1:numel (A); diff --git a/inst/private/sprintfv.m b/inst/private/sprintfv.m index 9268db06..637e7a16 100644 --- a/inst/private/sprintfv.m +++ b/inst/private/sprintfv.m @@ -17,17 +17,17 @@ ## . function out = sprintfv (format, varargin) -%SPRINTFV "Vectorized" sprintf -% -% out = sprintfv (format, varargin) -% -% SPRINTFV is an array-oriented form of sprintf that applies a format to array -% inputs and produces a cellstr. -% -% This is not a high-performance method. It's a convenience wrapper around a -% loop around sprintf (). -% -% Returns cellstr. +#SPRINTFV "Vectorized" sprintf +# +# out = sprintfv (format, varargin) +# +# SPRINTFV is an array-oriented form of sprintf that applies a format to array +# inputs and produces a cellstr. +# +# This is not a high-performance method. It's a convenience wrapper around a +# loop around sprintf (). +# +# Returns cellstr. args = varargin; sz = []; @@ -35,11 +35,11 @@ if ischar (args{i}) args{i} = { args{i} }; %#ok endif - if ~isscalar (args{i}) + if !isscalar (args{i}) if isempty (sz) sz = size (args{i}); else - if ~isequal (sz, size (args{i})) + if !isequal (sz, size (args{i})) error ('Inconsistent dimensions in inputs'); endif endif @@ -67,4 +67,4 @@ out{i} = sprintf (format, theseArgs{:}); endfor -endfunction \ No newline at end of file +endfunction diff --git a/inst/proxykeysForMatrixes.m b/inst/proxykeysForMatrixes.m index 127796e5..283a13fc 100644 --- a/inst/proxykeysForMatrixes.m +++ b/inst/proxykeysForMatrixes.m @@ -14,80 +14,80 @@ ## along with this program; If not, see . function [pkA, pkB] = proxykeysForMatrixes (A, B) - %PROXYKEYSFORMATRIXES Compute row proxy keys for matrices - % - % pkA = proxykeysForMatrixes (A) - % [pkA, pkB] = proxykeysForMatrixes (A, B) - % - % Computes row-identity "proxy key" matrix pairs for input matrices. A proxy - % key matrix pair is a pair of double matrices whose respective rows have the - % same identity and ordering relationships (both within the same matrix and - % across the two matrices) as the corresponding rows in the input matrices. - % In the case of one input, proxy keys are computed for that matrix on its own, - % without reference to any other input. - % - % Proxy keys are used by table for efficient computation of record identity/equality - % and ordering for tables with heterogeneous variable types. - % - % For an m1-by-n A and m2-by-n B, pkA and pkB will be m1-by-k and m2-by-k, - % respectively. k is not necessarily the same as n; it may be smaller or larger. - % - % The identity and ordering relationships between rows will be true even in - % the case of NaN and NaN-like inputs, including the case where some but not - % all of the columns in the - % - % In particular, this means that the following relationships hold: - % - % [tf, s_idx] = ismember(pkA, pkB, 'rows') - % [tf, s_idx] = ismember(A, B, 'rows') % same tf, s_idx results - % - % all(pkA(i,:) == pkB(j,:), 2) == all(A(i,:), B(j,:), 2) % For any i, j - % - % any(isnan(pkA), 2) == any(isnanny(A), 2) - % % where "isnanny()" uses whichever of isnan() or isnat() is defined for A - % - % [~, s_idx] = sortrows(A) - % [~, s_idx] = sortrows(pkA) % same s_idx result - % - % (The more-specific identity of Octave isna() inputs versus isnan()-but-not-isna() - % inputs is *not* preserved. This is a limitation of the current proxykeysForMatrixes - % implementation, not necessarily a limitation of the semantics of the isna() - % interface, so this shortcoming may be addressed in the future.) - % - % The generic proxykeysForMatrixes function can compute proxy keys for any type - % that supports the `unique()` function (as long as that unique() - % implementation does not itself depend on proxykeysForMatrixes). - % - % Note that the proxy key identity and ordering relationships: - % a) Are for entire *rows* of matrices, not individual *elements* within the - % matrix. In particular, a given value x in one column of A may be represented - % by one proxy key element value in one column of pkA, and another proxy key - % element value in another column of pkA. - % b) Only hold within the scope of the specific values in A and B, so they are - % only good for comparisons between those two specific matrices. The proxy - % key values for a given row in A may change if either other rows in A have - % different values, or if any rows in B have different values. That is, for: - % [pkA1, pkB] = proxykeysForMatrixes (A, B) - % [pkA2, pkC] = proxykeysForMatrixes (A, C) - % pkA1 and pkA2 may not be the same values. - % - % User-defined classes may override proxykeysForMatrixes to provide optimized - % implementations, or so that their unique() implementations may themselves use - % proxykeysForMatrixes. This may be especially useful for classes which are - % represented internally by single numeric matrices. - % - % This is an Octave extension. + #PROXYKEYSFORMATRIXES Compute row proxy keys for matrices + # + # pkA = proxykeysForMatrixes (A) + # [pkA, pkB] = proxykeysForMatrixes (A, B) + # + # Computes row-identity "proxy key" matrix pairs for input matrices. A proxy + # key matrix pair is a pair of double matrices whose respective rows have the + # same identity and ordering relationships (both within the same matrix and + # across the two matrices) as the corresponding rows in the input matrices. + # In the case of one input, proxy keys are computed for that matrix on its own, + # without reference to any other input. + # + # Proxy keys are used by table for efficient computation of record identity/equality + # and ordering for tables with heterogeneous variable types. + # + # For an m1-by-n A and m2-by-n B, pkA and pkB will be m1-by-k and m2-by-k, + # respectively. k is not necessarily the same as n; it may be smaller or larger. + # + # The identity and ordering relationships between rows will be true even in + # the case of NaN and NaN-like inputs, including the case where some but not + # all of the columns in the + # + # In particular, this means that the following relationships hold: + # + # [tf, s_idx] = ismember(pkA, pkB, 'rows') + # [tf, s_idx] = ismember(A, B, 'rows') % same tf, s_idx results + # + # all(pkA(i,:) == pkB(j,:), 2) == all(A(i,:), B(j,:), 2) % For any i, j + # + # any(isnan(pkA), 2) == any(isnanny(A), 2) + # % where "isnanny()" uses whichever of isnan() or isnat() is defined for A + # + # [~, s_idx] = sortrows(A) + # [~, s_idx] = sortrows(pkA) % same s_idx result + # + # (The more-specific identity of Octave isna() inputs versus isnan()-but-not-isna() + # inputs is *not* preserved. This is a limitation of the current proxykeysForMatrixes + # implementation, not necessarily a limitation of the semantics of the isna() + # interface, so this shortcoming may be addressed in the future.) + # + # The generic proxykeysForMatrixes function can compute proxy keys for any type + # that supports the `unique()` function (as long as that unique() + # implementation does not itself depend on proxykeysForMatrixes). + # + # Note that the proxy key identity and ordering relationships: + # a) Are for entire *rows* of matrices, not individual *elements* within the + # matrix. In particular, a given value x in one column of A may be represented + # by one proxy key element value in one column of pkA, and another proxy key + # element value in another column of pkA. + # b) Only hold within the scope of the specific values in A and B, so they are + # only good for comparisons between those two specific matrices. The proxy + # key values for a given row in A may change if either other rows in A have + # different values, or if any rows in B have different values. That is, for: + # [pkA1, pkB] = proxykeysForMatrixes (A, B) + # [pkA2, pkC] = proxykeysForMatrixes (A, C) + # pkA1 and pkA2 may not be the same values. + # + # User-defined classes may override proxykeysForMatrixes to provide optimized + # implementations, or so that their unique() implementations may themselves use + # proxykeysForMatrixes. This may be especially useful for classes which are + # represented internally by single numeric matrices. + # + # This is an Octave extension. - % TODO: Add support for non-cellstr cell inputs. + # TODO: Add support for non-cellstr cell inputs. + + # Developer's note: If it wasn't for NaNs, we could make the proxy keys outputs + # be simple column vectors with element-wise equality and ordering semantics. + # It's only the case of the relative ordering of multi-column records where + # some but not all columns are NaN that requires proxy keys to be matrices with + # row-wise identity. + + # Input handling / conversion - % Developer's note: If it wasn't for NaNs, we could make the proxy keys outputs - % be simple column vectors with element-wise equality and ordering semantics. - % It's only the case of the relative ordering of multi-column records where - % some but not all columns are NaN that requires proxy keys to be matrices with - % row-wise identity. - - % Input handling / conversion - if nargin == 1 pkA = proxykeysForOneMatrix (A); return @@ -107,9 +107,9 @@ size (A, 2), size (B, 2)); endif - % Main proxy key computation logic - - % Special-case type optimizations + # Main proxy key computation logic + + # Special-case type optimizations widenableToDoubleIntTypes = {'uint8' 'int8' 'uint16' 'int16' 'uint32' 'int32'}; if isa (A, 'double') pkA = A; @@ -121,10 +121,10 @@ pkA = double (A); pkB = double (B); else - % General case: use the pair-wise version of the "unique() trick" + # General case: use the pair-wise version of the "unique() trick" [pkA, pkB] = uniqueTrickForTwoMatrixes(A, B); endif - + endfunction function [outA, outB] = widenTypesForProxyKeys (A, B) @@ -143,7 +143,7 @@ endfunction function pk = proxykeysForOneMatrix (A) - % Special-case optimizations + # Special-case optimizations if isa (A, 'double') pk = A; return; @@ -151,15 +151,15 @@ pk = double (A); return; elseif ismember (class (A), {'uint8' 'int8' 'uint16' 'int16' 'uint32' 'int32'}) - % Note that (u)int64 is not included here; it cannot be losslessly widened to double + # Note that (u)int64 is not included here; it cannot be losslessly widened to double pk = double (A); return; elseif isa (A, 'datetime') pk = datenum (A); return; endif - - % General case: use the "unique() trick" + + # General case: use the "unique() trick" pk = uniqueTrickForOneMatrix (A); endfunction @@ -171,7 +171,7 @@ tfNan = isnanny (a_i); pkA(:,i) = jndx; pkA(tfNan,i) = NaN; - endfor + endfor endfunction function [pkA, pkB] = uniqueTrickForTwoMatrixes (A, B) diff --git a/inst/scalarexpand.m b/inst/scalarexpand.m index 8d2aa91c..46ea3d47 100644 --- a/inst/scalarexpand.m +++ b/inst/scalarexpand.m @@ -49,12 +49,12 @@ sz = []; for i = 1:nargin - if ~isscalar (varargin{i}) + if !isscalar (varargin{i}) sz_i = size (varargin{i}); if isempty (sz) sz = sz_i; else - if ~isequal (sz, sz_i) + if !isequal (sz, sz_i) error ('Matrix dimensions must agree (%s vs %s)',... tblish.chrono.internal.size2str (sz), tblish.chrono.internal.size2str (sz_i)) endif @@ -74,4 +74,4 @@ endif endfor -endfunction \ No newline at end of file +endfunction diff --git a/inst/seconds.m b/inst/seconds.m index 2c5b2cfa..6d0e141a 100644 --- a/inst/seconds.m +++ b/inst/seconds.m @@ -30,14 +30,14 @@ ## @end deftypefn function out = seconds (x) - %SECONDS Duration in seconds - % - % If input is numeric, returns a @duration array that is that many seconds long. - % - % If input is a duration, converts the duration to a number of seconds. + #SECONDS Duration in seconds + # + # If input is numeric, returns a @duration array that is that many seconds long. + # + # If input is a duration, converts the duration to a number of seconds. if isnumeric (x) out = duration.ofDays (double (x) / (24 * 60 * 60)); else error ('Invalid input: expected numeric or duration; got %s', class (x)); - end -end + endif +endfunction diff --git a/inst/shims/compat/all/isstring.m b/inst/shims/compat/all/isstring.m index 02051b2d..da51522e 100644 --- a/inst/shims/compat/all/isstring.m +++ b/inst/shims/compat/all/isstring.m @@ -27,4 +27,4 @@ function out = isstring (x) out = isa (x, 'string'); -end +endfunction diff --git a/inst/shims/compat/pre-6.0.0/mustBeInteger.m b/inst/shims/compat/pre-6.0.0/mustBeInteger.m index 2bf293c4..7d71daae 100644 --- a/inst/shims/compat/pre-6.0.0/mustBeInteger.m +++ b/inst/shims/compat/pre-6.0.0/mustBeInteger.m @@ -41,7 +41,7 @@ but = "it was complex"; elseif ! all (floor (x) == x) but = "it had fractional values in some elements"; - end + endif if ! isempty (but) if isempty (label) label = inputname (1); diff --git a/inst/shims/compat/pre-6.0.0/mustBeMember.m b/inst/shims/compat/pre-6.0.0/mustBeMember.m index 952402e8..3ee18822 100644 --- a/inst/shims/compat/pre-6.0.0/mustBeMember.m +++ b/inst/shims/compat/pre-6.0.0/mustBeMember.m @@ -18,7 +18,7 @@ ## ## Requires that input is a member of a set of given valid values. ## -## Raises an error if any element of the input @var{x} is not a member +## Raises an error if any element of the input @var{x} is not a member ## of @var{valid}, as determined by @code{ismember (x)}. ## ## Note that char inputs may behave weirdly, because of the interaction between diff --git a/inst/shims/compat/pre-6.0.0/mustBeNumeric.m b/inst/shims/compat/pre-6.0.0/mustBeNumeric.m index 4292f2cb..be3a92a1 100644 --- a/inst/shims/compat/pre-6.0.0/mustBeNumeric.m +++ b/inst/shims/compat/pre-6.0.0/mustBeNumeric.m @@ -28,7 +28,7 @@ ## @end deftypefn function mustBeNumeric (x) - if ~isnumeric (x) + if !isnumeric (x) name = inputname (1); if isempty (name) name = 'Input'; diff --git a/inst/shims/compat/pre-7.0.0/endsWith.m b/inst/shims/compat/pre-7.0.0/endsWith.m index 361fe53d..2967284a 100644 --- a/inst/shims/compat/pre-7.0.0/endsWith.m +++ b/inst/shims/compat/pre-7.0.0/endsWith.m @@ -21,7 +21,7 @@ ## ## Tests whether the given strings end with the given pattern(s). ## -## @var{str} (char, cellstr, or string) is a list of strings to compare against +## @var{str} (char, cellstr, or string) is a list of strings to compare against ## @var{pattern}. ## ## @var{pattern} (char, cellstr, or string) is a list of patterns to match. These are @@ -32,14 +32,14 @@ ## @var{str}. ## ## @end deftypefn -function out = endsWith (str, pattern, varargin) +function out = endsWith (str, pattern, varargin) [opts, args] = peelOffNameValueOptions (varargin, {'IgnoreCase'}); ignore_case = false; if isfield (opts, 'IgnoreCase') mustBeScalarLogical (opts.IgnoreCase, 'IgnoreCase option'); ignore_case = opts.IgnoreCase; endif - + str = cellstr (str); pattern = cellstr (pattern); @@ -47,7 +47,7 @@ out = true (size (str)); return; endif - + if ignore_case str = lower (str); pattern = lower (pattern); diff --git a/inst/shims/compat/pre-7.0.0/startsWith.m b/inst/shims/compat/pre-7.0.0/startsWith.m index a35add81..cf50c354 100644 --- a/inst/shims/compat/pre-7.0.0/startsWith.m +++ b/inst/shims/compat/pre-7.0.0/startsWith.m @@ -21,7 +21,7 @@ ## ## Tests whether the given strings start with the given pattern(s). ## -## @var{str} (char, cellstr, or string) is a list of strings to compare against +## @var{str} (char, cellstr, or string) is a list of strings to compare against ## @var{pattern}. ## ## @var{pattern} (char, cellstr, or string) is a list of patterns to match. These are @@ -39,15 +39,15 @@ mustBeScalarLogical (opts.IgnoreCase, 'IgnoreCase option'); ignore_case = opts.IgnoreCase; endif - + str = cellstr (str); pattern = cellstr (pattern); - + if any (cellfun ('isempty', pattern(:))) out = true (size (str)); return; endif - + out = false (size (str)); for i_str = 1:numel (str) for i_pattern = 1:numel (pattern) diff --git a/inst/string.m b/inst/string.m index 12d21826..3c8eded7 100644 --- a/inst/string.m +++ b/inst/string.m @@ -57,13 +57,13 @@ ## ## @enumerate ## @item - ## It is a type-safe object wrapper around Octave’s base primitive character types. + ## It is a type-safe object wrapper around Octave’s base primitive character types. ## ## @item ## It adds ismissing() semantics. ## ## @item - ## And it introduces Unicode support. + ## And it introduces Unicode support. ## ## @end enumerate ## @@ -88,14 +88,14 @@ ## @end deftp properties - % The underlying char data, as cellstr + # The underlying char data, as cellstr strs = {''}; % planar - % A logical mask indicating whether each element is a missing value + # A logical mask indicating whether each element is a missing value tfMissing = false % planar endproperties - + methods (Static = true) - + ## -*- texinfo -*- ## @node string.empty ## @deftypefn {Function} {@var{out} =} empty (@var{sz}) @@ -147,9 +147,9 @@ out = repmat (string, sz); endif endfunction - + endmethods - + methods ## -*- texinfo -*- ## @node string.string @@ -159,7 +159,7 @@ ## Construct a new string array. ## ## The zero-argument constructor creates a new scalar string array - ## whose value is the empty string. + ## whose value is the empty string. ## ## The other constructors construct a new string array by converting ## various types of inputs. @@ -175,17 +175,17 @@ ## ## @end deftypefn function this = string(in, varargin) - % TODO: Support a 'MapMissing' option to map "standard missing values" - % (empty strings, NaN, NaT) to string missings. - % - % TODO: Maybe fall back to calling cellstr() on arbitrary input objects. + # TODO: Support a 'MapMissing' option to map "standard missing values" + # (empty strings, NaN, NaT) to string missings. + # + # TODO: Maybe fall back to calling cellstr() on arbitrary input objects. if nargin == 0 return; endif if isa(in, "string") - % Copy properties, because I don't know if a full-array pass-through - % works in Octave. -apj - % this = in; % That is, don't do this. + # Copy properties, because I don't know if a full-array pass-through + # works in Octave. -apj + # this = in; % That is, don't do this. this.strs = in.strs; this.tfMissing = in.tfMissing; return @@ -204,11 +204,11 @@ this.tfMissing = tfNan; if any(tfNan(:)) strs = repmat ({''}, size (in)); - strs(~tfNan) = arrayfun (@(x) {num2str(x)}, in(~tfNan)); + strs(!tfNan) = arrayfun (@(x) {num2str(x)}, in(!tfNan)); this.strs = strs; else this.strs = arrayfun (@(x) {num2str(x)}, in); - end + endif elseif islogical (in) strs = repmat ({'false'}, size (in)); strs(in) = {'true'}; @@ -219,21 +219,21 @@ this.tfMissing = tfNat; if any(tfNat(:)) strs = repmat ({''}, size (in)); - strs(~tfNat) = arrayfun (@(x) {datestr(x)}, in(~tfNat)); + strs(!tfNat) = arrayfun (@(x) {datestr(x)}, in(!tfNat)); this.strs = strs; else this.strs = arrayfun (@(x) {datestr(x)}, in); - end + endif elseif isa (in, 'duration') || isa (in, 'calendarDuration') tfNat = isnat (in); this.tfMissing = tfNat; if any(tfNat(:)) strs = repmat ({''}, size (in)); - strs(~tfNat) = dispstrs (in(~tfNat)); + strs(!tfNat) = dispstrs (in(!tfNat)); this.strs = strs; else this.strs = dispstrs (in); - end + endif elseif isa (in, 'missing') this.strs = repmat ({''}, size (in)); this.tfMissing = true (size (in)); @@ -241,7 +241,7 @@ error ('string: unsupported input type: %s', class (in)); endif endfunction - + ## -*- texinfo -*- ## @node string.isstring ## @deftypefn {Method} {@var{out} =} isstring (@var{obj}) @@ -255,28 +255,28 @@ ## @end deftypefn function out = isstring (this) out = true; - end + endfunction function display (this) - %DISPLAY Custom display + #DISPLAY Custom display in_name = inputname(1); - if ~isempty(in_name) + if !isempty(in_name) fprintf('%s =\n', in_name); - end + endif disp(this); - end + endfunction function disp (this) - %DISP Custom display + #DISP Custom display if isempty (this) fprintf ('Empty %s string\n', size2str (size (this))); - return; - end + return + endif my_dispstrs = this.dispstrs; out = format_dispstr_array (my_dispstrs); fprintf("%s", out); - end - + endfunction + ## -*- texinfo -*- ## @node string.dispstrs ## @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) @@ -297,7 +297,7 @@ function disp (this) out = strrep (out, sprintf ("\n"), '\n'); out(this.tfMissing) = ""; endfunction - + ## -*- texinfo -*- ## @node string.sizeof ## @deftypefn {Method} {@var{out} =} sizeof (@var{obj}) @@ -310,7 +310,7 @@ function disp (this) out += sizeof (this.strs); out += sizeof (this.tfMissing); endfunction - + ## -*- texinfo -*- ## @node string.ismissing ## @deftypefn {Method} {@var{out} =} ismissing (@var{obj}) @@ -318,7 +318,7 @@ function disp (this) ## Test whether array elements are missing. ## ## For @code{string} arrays, only the special “missing” value is - ## considered missing. Empty strings are not considered missing, + ## considered missing. Empty strings are not considered missing, ## the way they are with cellstrs. ## ## Returns a logical array the same size as @code{obj}. @@ -327,7 +327,7 @@ function disp (this) function out = ismissing (this) out = this.tfMissing; endfunction - + ## -*- texinfo -*- ## @node string.isnanny ## @deftypefn {Method} {@var{out} =} isnanny (@var{obj}) @@ -342,9 +342,9 @@ function disp (this) function out = isnanny (this) out = ismissing (this); endfunction - - % Type conversion methods - + + # Type conversion methods + ## -*- texinfo -*- ## @node string.cellstr ## @deftypefn {Method} {@var{out} =} cellstr (@var{obj}) @@ -358,12 +358,12 @@ function disp (this) ## @end deftypefn function out = cellstr (this) out = this.strs; - % TODO: I don't know what the best conversion is here. Maybe it should - % even error if any are missing? For now I'm using '', because that's the - % "standard" missing value for cellstrs. + # TODO: I don't know what the best conversion is here. Maybe it should + # even error if any are missing? For now I'm using '', because that's the + # "standard" missing value for cellstrs. out(this.tfMissing) = {''}; - end - + endfunction + ## -*- texinfo -*- ## @node string.cell ## @deftypefn {Method} {@var{out} =} cell (@var{obj}) @@ -381,8 +381,8 @@ function disp (this) ## @end deftypefn function out = cell (this) out = cellstr (this); - end - + endfunction + ## -*- texinfo -*- ## @node string.char ## @deftypefn {Method} {@var{out} =} char (@var{obj}) @@ -400,22 +400,22 @@ function disp (this) ## ## @end deftypefn function out = char (this) - %CHAR Convert to char + #CHAR Convert to char if any (this.tfMissing) error ('string.char: Cannot convert missing string data to char'); endif out = char(cellstr(this)); - end - + endfunction + function out = demote_strings(varargin) - %DEMOTE_STRINGS Turn all string arguments into chars - % - % This is for compatibility with functions that take chars or cellstrs, - % but are not aware of string arrays. - % - % Scalar strings are turned into char row vectors. Nonscalar strings are - % turned in to cellstrs. This might not actually be the right thing, - % depending on what function you are calling! + #DEMOTE_STRINGS Turn all string arguments into chars + # + # This is for compatibility with functions that take chars or cellstrs, + # but are not aware of string arrays. + # + # Scalar strings are turned into char row vectors. Nonscalar strings are + # turned in to cellstrs. This might not actually be the right thing, + # depending on what function you are calling! args = varargin; out = args; for i = 1:numel(args) @@ -428,9 +428,9 @@ function disp (this) endif endfor endfunction - - % Encoding - + + # Encoding + ## -*- texinfo -*- ## @node string.encode ## @deftypefn {Method} {@var{out} =} encode (@var{obj}, @var{charsetName}) @@ -451,9 +451,9 @@ function disp (this) mustBeScalar (this); out = unicode2native (this.strs{1}, charsetName); endfunction - - % String manipulation methods - + + # String manipulation methods + ## -*- texinfo -*- ## @node string.strlength_bytes ## @deftypefn {Method} {@var{out} =} strlength_bytes (@var{obj}) @@ -462,7 +462,7 @@ function disp (this) ## ## Gets the length of each string in @var{obj}, counted in Unicode UTF-8 ## code units (bytes). This is the same as @code{numel(str)} for the corresponding - ## Octave char vector for each string, but may not be what you + ## Octave char vector for each string, but may not be what you ## actually want to use. You may want @code{strlength} instead. ## ## Returns double array of the same size as @var{obj}. Returns NaNs for missing @@ -472,28 +472,28 @@ function disp (this) ## ## @end deftypefn function out = strlength_bytes (this) - %STRLENGTH_BYTES String length in UTF-8 code units (bytes) - % - % Gets the length of each string, counted in Unicode UTF-8 - % code units (bytes). This is the same as numel(str) for the corresponding - % Octave char vector for each string, but is probably not what you - % actually want to use. You probably want STRLENGTH instead. - % - % Returns double array of the same size as this. Returns NaNs for missing - % strings. - % - % See also: STRING.STRLENGTH + #STRLENGTH_BYTES String length in UTF-8 code units (bytes) + # + # Gets the length of each string, counted in Unicode UTF-8 + # code units (bytes). This is the same as numel(str) for the corresponding + # Octave char vector for each string, but is probably not what you + # actually want to use. You probably want STRLENGTH instead. + # + # Returns double array of the same size as this. Returns NaNs for missing + # strings. + # + # See also: STRING.STRLENGTH out = cellfun (@numel, this.strs); out(this.tfMissing) = NaN; endfunction - + ## -*- texinfo -*- ## @node string.strlength ## @deftypefn {Method} {@var{out} =} strlength (@var{obj}) ## ## String length in characters (actually, UTF-16 code units). ## - ## Gets the length of each string, counted in UTF-16 code units. In most + ## Gets the length of each string, counted in UTF-16 code units. In most ## cases, this is the same as the number of characters. The exception is for ## characters outside the Unicode Basic Multilingual Plane, which are ## represented with UTF-16 surrogate pairs, and thus will count as 2 characters @@ -521,7 +521,7 @@ function disp (this) out(i) = numel (utf16) / 2; endfor endfunction - + ## -*- texinfo -*- ## @node string.reverse_bytes ## @deftypefn {Method} {@var{out} =} reverse_bytes (@var{obj}) @@ -549,7 +549,7 @@ function disp (this) out.strs{i} = out.strs{i}(end:-1:1); endfor endfunction - + ## -*- texinfo -*- ## @node string.reverse ## @deftypefn {Method} {@var{out} =} reverse (@var{obj}) @@ -575,7 +575,7 @@ function disp (this) out = string.ofCodepoints (rev_points); out.tfMissing = this.tfMissing; endfunction - + ## -*- texinfo -*- ## @node string.strcat ## @deftypefn {Method} {@var{out} =} strcat (@var{varargin}) @@ -594,7 +594,7 @@ function disp (this) ## ## @end deftypefn function out = strcat (varargin) - % TODO: Fix missing handling + # TODO: Fix missing handling args = promotec (varargin); args_strs = cell (size (args)); args_tfMissing = cell (size (args)); @@ -603,9 +603,9 @@ function disp (this) args_tfMissing{i} = args{i}.tfMissing; endfor out = string (strcat (args_strs{:})); - % TODO: I think this is wrong: it doesn't handle scalar expansion - % TODO: Actually, this is completely wrong. Then inputs should be ORed - % or something like that, not concatenated. + # TODO: I think this is wrong: it doesn't handle scalar expansion + # TODO: Actually, this is completely wrong. Then inputs should be ORed + # or something like that, not concatenated. out.tfMissing = cat (2, args_tfMissing{:}); endfunction @@ -626,11 +626,11 @@ function disp (this) ## @end deftypefn function out = lower (this) out = this; - % TODO: This lower() call is probably wrong: it relies on Octave's lower(), - % which I think only does ASCII case conversion, not Unicode case conversion. -apj + # TODO: This lower() call is probably wrong: it relies on Octave's lower(), + # which I think only does ASCII case conversion, not Unicode case conversion. -apj out.strs = lower (this.strs); endfunction - + ## -*- texinfo -*- ## @node string.upper ## @deftypefn {Method} {@var{out} =} upper (@var{obj}) @@ -648,11 +648,11 @@ function disp (this) ## @end deftypefn function out = upper (this) out = this; - % TODO: This upper() call is probably wrong: it relies on Octave's upper(), - % which I think only does ASCII case conversion, not Unicode case conversion. -apj + # TODO: This upper() call is probably wrong: it relies on Octave's upper(), + # which I think only does ASCII case conversion, not Unicode case conversion. -apj out.strs = upper (this.strs); endfunction - + ## -*- texinfo -*- ## @node string.erase ## @deftypefn {Method} {@var{out} =} erase (@var{obj}, @var{match}) @@ -669,7 +669,7 @@ function disp (this) out = this; out.strs = strrep (this.strs, char(match), ''); endfunction - + ## -*- texinfo -*- ## @node string.strrep ## @deftypefn {Method} {@var{out} =} strrep (@var{obj}, @var{match}, @var{replacement}) @@ -712,7 +712,7 @@ function disp (this) out = strfind(this.strs, char(pattern), varargin{:}); out(this.tfMissing) = {[]}; endfunction - + ## -*- texinfo -*- ## @node string.regexprep ## @deftypefn {Method} {@var{out} =} regexprep (@var{obj}, @var{pat}, @var{repstr}) @@ -732,14 +732,14 @@ function disp (this) out = this; out.strs = regexprep(this.strs, char(pat), char(repstr), args{:}); endfunction - - % Relational operations - + + # Relational operations + function out = eq (A, B) - %EQ Equals. + #EQ Equals. out = strcmp (A, B); endfunction - + ## -*- texinfo -*- ## @node string.strcmp ## @deftypefn {Method} {@var{out} =} strcmp (@var{A}, @var{B}) @@ -763,7 +763,7 @@ function disp (this) out = strcmp (A.strs, B.strs); out(A.tfMissing | B.tfMissing) = false; endfunction - + ## -*- texinfo -*- ## @node string.cmp ## @deftypefn {Method} {[@var{out}, @var{outA}, @var{outB}] =} cmp (@var{A}, @var{B}) @@ -788,10 +788,10 @@ function disp (this) ## @end deftypefn function [out, A, B] = cmp(A, B) [A, B] = promote (A, B); - % In production code, you wouldn't scalarexpand; you'd do a scalar test - % and smarter indexing. - % Though really, in production code, you'd probably want to implement this - % whole function as a built-in or oct-file. + # In production code, you wouldn't scalarexpand; you'd do a scalar test + # and smarter indexing. + # Though really, in production code, you'd probably want to implement this + # whole function as a built-in or oct-file. [A, B] = scalarexpand (A, B); out = NaN (size (A)); for i = 1:numel (A) @@ -800,8 +800,8 @@ function disp (this) if isequal (a, b) out(i) = 0; else - % This implementation is gross, but it's the best I can do with what - % the base language provides. - apj + # This implementation is gross, but it's the best I can do with what + # the base language provides. - apj tmp = [a b]; [tmp2, ix] = sort (tmp); if ix(1) == 1 @@ -812,99 +812,99 @@ function disp (this) endif endfor endfunction - + function out = lt (A, B) - %LT Less than. + #LT Less than. [cmpval, A, B] = cmp (A, B); out = cmpval < 0; out = propagate_missing (out, A, B); endfunction function out = le (A, B) - %LE Less than or equal. + #LE Less than or equal. [cmpval, A, B] = cmp (A, B); out = cmpval <= 0; out = propagate_missing (out, A, B); endfunction function out = gt(A, B) - %GT Greater than. + #GT Greater than. [cmpval, A, B] = cmp (A, B); out = cmpval > 0; out = propagate_missing (out, A, B); endfunction function out = ge (A, B) - %GE Greater than or equal. + #GE Greater than or equal. [cmpval, A, B] = cmp (A, B); out = cmpval >= 0; out = propagate_missing (out, A, B); endfunction - - % TODO: max, min + + # TODO: max, min function [out, Indx] = ismember (a, b, varargin) - %ISMEMBER True for set member. + #ISMEMBER True for set member. [a, b] = promote (a, b); [out, Indx] = ismember (a.strs, b.strs, varargin{:}); out(a.tfMissing) = false; Indx(a.tfMissing) = 0; endfunction - + function [out, Indx] = setdiff (a, b, varargin) - %SETDIFF Set difference. - % - % TODO: Handle missings. + #SETDIFF Set difference. + # + # TODO: Handle missings. [a, b] = promote (a, b); [s_out, Indx] = setdiff (a.strs, b.strs, varargin{:}); out = string (s_out); endfunction function [out, ia, ib] = intersect (a, b, varargin) - %INTERSECT Set intersection. - % - % TODO: Handle missings. + #INTERSECT Set intersection. + # + # TODO: Handle missings. [a, b] = promote (a, b); [s_out, ia, ib] = intersect (a.strs, b.strs, varargin{:}); out = string (s_out); endfunction - + function [out, ia, ib] = union (a, b, varargin) - %UNION Set union. - % - % TODO: Handle missings. + #UNION Set union. + # + # TODO: Handle missings. [a, b] = promote (a, b); [s_out, ia, ib] = union (a.strs, b.strs, varargin{:}); out = string (s_out); endfunction function [out, Indx] = unique (this, varargin) - %UNIQUE Set unique. - % - % TODO: Handle missings. + #UNIQUE Set unique. + # + # TODO: Handle missings. this = promote (this); [s_out, Indx] = unique (this.strs, varargin{:}); out = string (s_out); endfunction endmethods - + methods (Hidden) - % Compatibility shims - + # Compatibility shims + function out = sprintf (fmt, varargin) - %SPRINTF Like printf, but returns a string - % - % TODO: Handle missings. + #SPRINTF Like printf, but returns a string + # + # TODO: Handle missings. fmt = char (string (fmt)); args = demote_strings (varargin); out = string (sprintf (fmt, args{:})); endfunction - + function out = fprintf (varargin) - %FPRINTF Formatted output to stream or file handle - % - % TODO: Handle missings. + #FPRINTF Formatted output to stream or file handle + # + # TODO: Handle missings. args = demote_strings (varargin); out = fprintf (args{:}); if nargout == 0 @@ -913,9 +913,9 @@ function disp (this) endfunction function out = printf (varargin) - %PRINTF Formatted output - % - % TODO: Handle missings. + #PRINTF Formatted output + # + # TODO: Handle missings. args = demote_strings( varargin); printf (args{:}); if nargout == 0 @@ -923,194 +923,194 @@ function disp (this) endif endfunction - % TODO: fdisp, fputs - - % Note: fwrite is not supported, because that is a low-level byte-oriented - % I/O function, and string is character-oriented. - - % plot() and related functions. Yuck. - + # TODO: fdisp, fputs + + # Note: fwrite is not supported, because that is a low-level byte-oriented + # I/O function, and string is character-oriented. + + # plot() and related functions. Yuck. + function out = plot (varargin) args = demote_strings (varargin); out = plot (args{:}); endfunction - + function out = plotyy (varargin) args = demote_strings (varargin); out = plotyy (args{:}); endfunction - + function out = loglog (varargin) args = demote_strings (varargin); out = loglog (args{:}); endfunction - + function out = semilogy (varargin) args = demote_strings (varargin); out = semilogy (args{:}); endfunction - + function out = bar (varargin) args = demote_strings (varargin); out = bar (args{:}); endfunction - + function out = barh (varargin) args = demote_strings (varargin); out = barh (args{:}); endfunction - + function varargout = hist (varargin) args = demote_strings (varargin); varargout = cell (1, nargout); [varargout{:}] = hist (args{:}); endfunction - + function out = stemleaf (varargin) args = demote_strings (varargin); out = stemleaf (args{:}); endfunction - + function out = stairs (varargin) args = demote_strings (varargin); out = stairs (args{:}); endfunction - + function out = stem3 (varargin) args = demote_strings (varargin); out = stem3 (args{:}); endfunction - + function out = scatter (varargin) args = demote_strings (varargin); out = scatter (args{:}); endfunction - + function out = stem (varargin) args = demote_strings (varargin); out = stem (args{:}); endfunction - + function out = surf (varargin) args = demote_strings (varargin); out = surf (args{:}); endfunction - + function out = title (varargin) args = demote_strings (varargin); out = title (args{:}); endfunction - + function out = legend (varargin) args = demote_strings (varargin); out = legend (args{:}); endfunction - - % ... and so on, and so on, and so on ... + + # ... and so on, and so on, and so on ... endmethods - - % Planar structural stuff + + # Planar structural stuff methods - + function out = size (this, dim) - %SIZE Size of array. + #SIZE Size of array. if nargin == 1 out = size (this.strs); else out = size (this.strs, dim); endif endfunction - + function out = numel (this) - %NUMEL Number of elements in array. + #NUMEL Number of elements in array. out = numel (this.strs); endfunction - + function out = ndims (this) - %NDIMS Number of dimensions. + #NDIMS Number of dimensions. out = ndims(this.strs); endfunction - + function out = isempty(this) - %ISEMPTY True for empty array. + #ISEMPTY True for empty array. out = isempty (this.strs); endfunction - + function out = isscalar (this) - %ISSCALAR True if input is scalar. + #ISSCALAR True if input is scalar. out = isscalar (this.strs); endfunction - + function out = isvector (this) - %ISVECTOR True if input is a vector. + #ISVECTOR True if input is a vector. out = isvector (this.strs); endfunction - + function out = iscolumn (this) - %ISCOLUMN True if input is a column vector. + #ISCOLUMN True if input is a column vector. out = iscolumn (this.strs); endfunction - + function out = isrow (this) - %ISROW True if input is a row vector. + #ISROW True if input is a row vector. out = isrow (this.strs); endfunction - + function out = ismatrix (this) - %ISMATRIX True if input is a matrix. + #ISMATRIX True if input is a matrix. out = ismatrix (this.strs); endfunction - + function this = reshape (this, varargin) - %RESHAPE Reshape array. + #RESHAPE Reshape array. this.strs = reshape (this.strs, varargin{:}); this.tfMissing = reshape (this.tfMissing, varargin{:}); endfunction - + function this = squeeze (this, varargin) - %SQUEEZE Remove singleton dimensions. + #SQUEEZE Remove singleton dimensions. this.strs = squeeze (this.strs, varargin{:}); this.tfMissing = squeeze (this.tfMissing, varargin{:}); endfunction - + function this = circshift (this, varargin) - %CIRCSHIFT Shift positions of elements circularly. + #CIRCSHIFT Shift positions of elements circularly. this.strs = circshift (this.strs, varargin{:}); this.tfMissing = circshift (this.tfMissing, varargin{:}); endfunction - + function this = permute (this, varargin) - %PERMUTE Permute array dimensions. + #PERMUTE Permute array dimensions. this.strs = permute (this.strs, varargin{:}); this.tfMissing = permute (this.tfMissing, varargin{:}); endfunction - + function this = ipermute (this, varargin) - %IPERMUTE Inverse permute array dimensions. + #IPERMUTE Inverse permute array dimensions. this.strs = ipermute (this.strs, varargin{:}); this.tfMissing = ipermute (this.tfMissing, varargin{:}); endfunction - + function this = repmat (this, varargin) - %REPMAT Replicate and tile array. + #REPMAT Replicate and tile array. this.strs = repmat (this.strs, varargin{:}); this.tfMissing = repmat (this.tfMissing, varargin{:}); endfunction - + function this = ctranspose (this, varargin) - %CTRANSPOSE Complex conjugate transpose. + #CTRANSPOSE Complex conjugate transpose. this.strs = ctranspose (this.strs, varargin{:}); this.tfMissing = ctranspose (this.tfMissing, varargin{:}); endfunction - + function this = transpose (this, varargin) - %TRANSPOSE Transpose vector or matrix. + #TRANSPOSE Transpose vector or matrix. this.strs = transpose (this.strs, varargin{:}); this.tfMissing = transpose (this.tfMissing, varargin{:}); endfunction - + function [this, nshifts] = shiftdim( this, n) - %SHIFTDIM Shift dimensions. + #SHIFTDIM Shift dimensions. if nargin > 1 this.strs = shiftdim (this.strs, n); this.tfMissing = shiftdim (this.strs, n); @@ -1119,167 +1119,167 @@ function disp (this) [this.tfMissing, nshifts] = shiftdim (this.tfMissing); endif endfunction - + function out = cat (dim, varargin) - %CAT Concatenate arrays. + #CAT Concatenate arrays. args = varargin; for i = 1:numel(args) - if ~isa(args{i}, 'string') + if !isa(args{i}, 'string') args{i} = string(args{i}); - end - end + endif + endfor out = args{1}; fieldArgs1 = cellfun(@(obj) {obj.strs}, args); out.strs = cat(dim, fieldArgs1{:}); fieldArgs2 = cellfun(@(obj) {obj.tfMissing}, args); out.tfMissing = cat(dim, fieldArgs2{:}); endfunction - + function out = horzcat (varargin) - %HORZCAT Horizontal concatenation. + #HORZCAT Horizontal concatenation. out = cat (2, varargin{:}); endfunction - + function out = vertcat (varargin) - %VERTCAT Vertical concatenation. + #VERTCAT Vertical concatenation. out = cat (1, varargin{:}); endfunction - + function this = subsasgn(this, s, b) - %SUBSASGN Subscripted assignment. - - % Chained subscripts + #SUBSASGN Subscripted assignment. + + # Chained subscripts if numel(s) > 1 rhs_in = subsref(this, s(1)); rhs = subsasgn(rhs_in, s(2:end), b); else rhs = b; endif - - % Base case + + # Base case switch s(1).type case '()' this = subsasgnParensPlanar(this, s(1), rhs); case '{}' - % This works just like ()-assignment, and is only defined for - % compatibility with cellstrs + # This works just like ()-assignment, and is only defined for + # compatibility with cellstrs this = subsasgnParensPlanar(this, s(1), rhs); case '.' error ('string:BadOperation', '.-assignment is not defined for string arrays'); endswitch endfunction - + function varargout = subsref(this, s) - %SUBSREF Subscripted reference. - - % Base case + #SUBSREF Subscripted reference. + + # Base case switch s(1).type case '()' varargout = { subsrefParensPlanar(this, s(1)) }; case '{}' - % This pops out char arrays + # This pops out char arrays varargout = subsrefParensPlanar (this, s(1)); case '.' error('string:BadOperation',... '.-subscripting is not supported for string arrays'); endswitch - - % Chained reference + + # Chained reference if numel (s) > 1 out = subsref (out, s(2:end)); endif endfunction - + endmethods - + methods (Access=private) - + function this = subsasgnParensPlanar (this, s, rhs) - %SUBSASGNPARENSPLANAR ()-assignment for planar object - if ~isa (rhs, 'string') + #SUBSASGNPARENSPLANAR ()-assignment for planar object + if !isa (rhs, 'string') rhs = string (rhs); endif this.strs(s.subs{:}) = rhs.strs; this.tfMissing(s.subs{:}) = rhs.tfMissing; endfunction - + function out = subsrefParensPlanar(this, s) - %SUBSREFPARENSPLANAR ()-indexing for planar object + #SUBSREFPARENSPLANAR ()-indexing for planar object out = this; out.strs = this.strs(s.subs{:}); out.tfMissing = this.tfMissing(s.subs{:}); endfunction - + function out = parensRef(this, varargin) - %PARENSREF ()-indexing, for this class's internal use + #PARENSREF ()-indexing, for this class's internal use out = subsrefParensPlanar (this, struct ('subs', {varargin})); endfunction - + function out = subset(this, varargin) - %SUBSET Subset array by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the RHS, which don't work properly inside the class - % because they don't respect the subsref() override. + #SUBSET Subset array by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the RHS, which don't work properly inside the class + # because they don't respect the subsref() override. out = parensRef (this, varargin{:}); endfunction - + function out = asgn(this, ix, value) - %ASGN Assign array elements by indexes. - % This is what you call internally inside the class instead of doing - % ()-indexing references on the LHS, which don't work properly inside - % the class because they don't respect the subsasgn() override. - if ~iscell(ix) + #ASGN Assign array elements by indexes. + # This is what you call internally inside the class instead of doing + # ()-indexing references on the LHS, which don't work properly inside + # the class because they don't respect the subsasgn() override. + if !iscell(ix) ix = { ix }; endif s.type = '()'; s.subs = ix; out = subsasgnParensPlanar(this, s, value); endfunction - + endmethods - + methods (Access=private) - + function out = codepoints(this) - % Convert to cell array of 32-bit Unicode code point vectors - % - % This is a little utility to support other Unicode-character-aware methods, - % like strlength() and reverse(). + # Convert to cell array of 32-bit Unicode code point vectors + # + # This is a little utility to support other Unicode-character-aware methods, + # like strlength() and reverse(). persistent native_utf32_encoding if isempty (native_utf32_encoding) [~,~,endian] = computer (); native_utf32_encoding = sprintf ('UTF-32%cE', endian); endif - + out = cell (size (this)); for i = 1:numel (out) out{i} = typecast (unicode2native (this.strs{i}, native_utf32_encoding), 'uint32'); endfor endfunction - + endmethods - + methods (Static, Access=private) - + function out = ofCodepoints(points) - %OFUTF32S Convert from a cell array of 32-bit Unicode code point vectors - % - % This is the inverse of codepoints(). + #OFUTF32S Convert from a cell array of 32-bit Unicode code point vectors + # + # This is the inverse of codepoints(). persistent native_utf32_encoding if isempty (native_utf32_encoding) [~,~,endian] = computer (); native_utf32_encoding = sprintf ('UTF-32%cE', endian); endif - + cstr = cell (size (points)); for i = 1:numel (points) cstr{i} = native2unicode (typecast (points{i}, 'uint8'), native_utf32_encoding); endfor out = string (cstr); endfunction - + endmethods - + methods (Static) ## -*- texinfo -*- ## @node string.decode @@ -1297,16 +1297,16 @@ function disp (this) ## @end deftypefn function out = decode (bytes, charsetName) out = string (native2unicode (bytes, charsetName)); - end - end + endfunction + endmethods endclassdef function out = propagate_missing (out, varargin) - %PROPAGATE_MISSING Propagate missing values to single output - % - % Assumes all inputs are strings, and have been scalar-expanded, and have - % congruent dimensions. + #PROPAGATE_MISSING Propagate missing values to single output + # + # Assumes all inputs are strings, and have been scalar-expanded, and have + # congruent dimensions. for i = 1:numel (varargin) arg = varargin{i}; out.tfMissing = out.tfMissing | arg.tfMissing; @@ -1314,10 +1314,10 @@ function disp (this) endfunction function varargout = promote (varargin) - %PROMOTEC Promote arguments to strings + #PROMOTEC Promote arguments to strings varargout = varargin; for i = 1:numel (varargin) - if ~ isa (varargin{i}, 'string') + if !isa (varargin{i}, 'string') varargout{i} = string (varargin{i}); endif endfor @@ -1325,39 +1325,39 @@ function disp (this) function out = promotec (args) - %PROMOTEC Promote arguments to strings, cell-wise + #PROMOTEC Promote arguments to strings, cell-wise out = args; for i = 1:numel (args) - if ~ isa (args{i}, 'string') + if !isa (args{i}, 'string') out{i} = string (args{i}); endif endfor endfunction ## Test string constructor -%!test -%! str = string (["a";"b";"c"]); -%! assert (cellstr (str), {"a";"b";"c"}) -%!test -%! str = string ({"a";"b";"c"}); -%! assert (cellstr (str), {"a";"b";"c"}) -%!test -%! str = string ({"a";"";"c"}); -%! tfM = ismissing (str); -%! assert (cell (str), {"a";"";"c"}) -%! assert (tfM, logical ([0; 0; 0])) -%!test -%! str = string ([1 2 3 NaN 5]); -%! tfM = ismissing (str); -%! assert (cellstr (str), {"1", "2", "3", "", "5"}) -%! assert (tfM, logical ([0 0 0 0 0])) -%!test -%! str = string (duration ([3,4,5; NaN,NaN,NaN])); -%! tfM = ismissing (str); -%! assert (cellstr (str), {"03:04:05"; ""}) -%! assert (tfM, logical ([0; 1])) -%!test -%! str = string (calendarDuration ([3,4,5; NaN,NaN,NaN])); -%! tfM = ismissing (str); -%! assert (cellstr (str), {"3y 4mo 5d"; ""}) -%! assert (tfM, logical ([0; 1])) +#!test +#! str = string (["a";"b";"c"]); +#! assert (cellstr (str), {"a";"b";"c"}) +#!test +#! str = string ({"a";"b";"c"}); +#! assert (cellstr (str), {"a";"b";"c"}) +#!test +#! str = string ({"a";"";"c"}); +#! tfM = ismissing (str); +#! assert (cell (str), {"a";"";"c"}) +#! assert (tfM, logical ([0; 0; 0])) +#!test +#! str = string ([1 2 3 NaN 5]); +#! tfM = ismissing (str); +#! assert (cellstr (str), {"1", "2", "3", "", "5"}) +#! assert (tfM, logical ([0 0 0 0 0])) +#!test +#! str = string (duration ([3,4,5; NaN,NaN,NaN])); +#! tfM = ismissing (str); +#! assert (cellstr (str), {"03:04:05"; ""}) +#! assert (tfM, logical ([0; 1])) +#!test +#! str = string (calendarDuration ([3,4,5; NaN,NaN,NaN])); +#! tfM = ismissing (str); +#! assert (cellstr (str), {"3y 4mo 5d"; ""}) +#! assert (tfM, logical ([0; 1])) diff --git a/inst/struct2table.m b/inst/struct2table.m index 7f126ff6..94fbed98 100644 --- a/inst/struct2table.m +++ b/inst/struct2table.m @@ -29,17 +29,17 @@ ## ## @end deftypefn function out = struct2table (s, varargin) - - % Peel off trailing options + + # Peel off trailing options [opts, args] = peelOffNameValueOptions (varargin, {'AsArray'}); if isfield (opts, 'AsArray') && opts.AsArray error ('struct2table: AsArray option is currently unimplemented'); endif - if ~isempty (args) + if !isempty (args) error ('struct2table: Unrecognized options'); endif - % Conversion logic + # Conversion logic varNames = fieldnames (s); if isscalar (s) varValues = struct2cell (s); @@ -49,6 +49,6 @@ c = struct2cell (s); c = c'; out = cell2table (c, 'VariableNames', varNames); - end - + endif + endfunction diff --git a/inst/table.m b/inst/table.m index a210c31c..f04e2534 100644 --- a/inst/table.m +++ b/inst/table.m @@ -14,9 +14,9 @@ ## along with this program; If not, see . -% Developer's notes: -% - Wherever you see the abbreviation "pk" here, that means "proxy keys", not -% "primary keys". +# Developer's notes: +# - Wherever you see the abbreviation "pk" here, that means "proxy keys", not +# "primary keys". classdef table ## -*- texinfo -*- @@ -24,13 +24,13 @@ ## ## Tabular data array containing multiple columnar variables. ## - ## A @code{table} is a tabular data structure that collects multiple parallel + ## A @code{table} is a tabular data structure that collects multiple parallel ## named variables. ## Each variable is treated like a column. (Possibly a multi-columned column, if ## that makes sense.) ## The types of variables may be heterogeneous. ## - ## A table object is like an SQL table or resultset, or a relation, or a + ## A table object is like an SQL table or resultset, or a relation, or a ## DataFrame in R or Pandas. ## ## A table is an array in itself: its size is @var{nrows}-by-@var{nvariables}, @@ -67,16 +67,16 @@ ## @end deftypeivar properties - % The names of the variables (columns), as cellstr + # The names of the variables (columns), as cellstr VariableNames = {} - % The values of the variables, as a cell vector of arbitrary types + # The values of the variables, as a cell vector of arbitrary types VariableValues = {} - % Optional row names, as cellstr + # Optional row names, as cellstr RowNames = [] - % Dimension names + # Dimension names DimensionNames = { "Row" "Variables" } - end - + endproperties + methods ## -*- texinfo -*- ## @node table.table @@ -110,14 +110,14 @@ ## ## @end deftypefn function this = table (varargin) - - % Peel off trailing options + + # Peel off trailing options [opts, args] = peelOffNameValueOptions (varargin, {'VariableNames', 'RowNames'}); - - % Calling form handling + + # Calling form handling nargs = numel (args); if nargs == 3 && isequal (args{1}, 'Backdoor') - % Undocumented form for internal use + # Undocumented form for internal use [varNames, varVals] = args{2:3}; elseif nargs == 4 && isequal (args{1}, 'Size') && isequal (args{3}, 'VariableTypes') error('table: This constructor form is unimplemented'); @@ -131,25 +131,25 @@ varNames{i} = inputname (i); if isempty (varNames{i}) varNames{i} = sprintf('Var%d', i); - end - end - end - end - - % Input validation - if ~iscell (varVals) || (~isvector (varVals) && ~isempty (varVals)) + endif + endfor + endif + endif + + # Input validation + if !iscell (varVals) || (!isvector (varVals) && !isempty (varVals)) error('table: VariableValues must be a cell vector'); - end - if ~iscellstr (varNames) || (~isvector (varNames) && ~isempty (varNames)) + endif + if !iscellstr (varNames) || (!isvector (varNames) && !isempty (varNames)) error('table: VariableNames must be a cellstr vector'); - end + endif varNames = varNames(:)'; varVals = varVals(:)'; if numel (varNames) ~= numel (varVals) error ('table: Inconsistent number of VariableNames (%d) and VariableValues (%d)', ... numel (varNames), numel (varVals)); - end - if ~isempty (varVals) + endif + if !isempty (varVals) nrows = size (varVals{1}, 1); for i = 2:numel (varVals) if ndims (varVals{i}) > 2 @@ -160,37 +160,37 @@ if nrows ~= nrows2 error ('table: Inconsistent sizes: var 1 (%s) is %d rows; var %d (%s) is %d rows', ... varNames{1}, nrows, i, varNames{i}, nrows2); - end - end - end + endif + endfor + endif [uqNames, ix] = unique (varNames); if numel (uqNames) < numel (varNames) ixBad = 1:numel (varNames); ixBad(ix) = []; error ('table: Duplicate VariableNames: %s', strjoin (varNames(ixBad), ', ')); - end + endif - % Construction + # Construction this.VariableNames = varNames; this.VariableValues = varVals; if isfield (opts, 'RowNames') this.RowNames = opts.RowNames; - end - end - - % Display - + endif + endfunction + + # Display + function display (this) - %DISPLAY Custom display. + #DISPLAY Custom display. in_name = inputname (1); - if ~isempty (in_name) + if !isempty (in_name) fprintf ('%s =\n', in_name); - end + endif disp (this); - end + endfunction function disp (this) - %DISP Custom display. + #DISP Custom display. if isempty (this) fprintf ('Empty %s %s\n', size2str (size (this)), class (this)); else @@ -199,8 +199,8 @@ function disp (this) if hasrownames (this) fprintf (' Has RowNames\n'); endif - end - end + endif + endfunction ## -*- texinfo -*- ## @node table.summary @@ -215,7 +215,7 @@ function disp (this) function out = summary (this) summary_impl (this); endfunction - + ## -*- texinfo -*- ## @node table.prettyprint ## @deftypefn {Method} {} prettyprint (@var{obj}) @@ -228,18 +228,18 @@ function disp (this) ## ## @end deftypefn function prettyprint (this) - %PRETTYPRINT Display table values, formatted as a table + #PRETTYPRINT Display table values, formatted as a table if isempty (this) fprintf ('Empty %s %s\n', size2str (size (this)), class (this)); - return; - end + return + endif nVars = width (this); varNames = this.VariableNames; - % Here, "cols" means output columns, not data columns. Each data variable - % will be displayed in a single output column. - %FIXME: This display logic might be broken for multi-column variables. + # Here, "cols" means output columns, not data columns. Each data variable + # will be displayed in a single output column. + #FIXME: This display logic might be broken for multi-column variables. colNames = varNames; - + nCols = nVars; colNames = varNames; colStrs = cell (1, nVars); @@ -266,23 +266,23 @@ function prettyprint (this) colWidths = max ([nameWidths; colWidths]); totalWidth = sum (colWidths) + 4 + (3 * (nCols - 1)); elementStrs = cat (2, colStrs{:}); - + rowFmts = cell (1, nCols); for i = 1:nCols rowFmts{i} = ['%-' num2str(colWidths(i)) 's']; - end + endfor rowFmt = ['| ' strjoin(rowFmts, ' | ') ' |' sprintf('\n')]; fprintf ('%s\n', repmat ('-', [1 totalWidth])); fprintf (rowFmt, colNames{:}); fprintf ('%s\n', repmat ('-', [1 totalWidth])); for i = 1:height (this) fprintf (rowFmt, elementStrs{i,:}); - end + endfor fprintf ('%s\n', repmat ('-', [1 totalWidth])); - end - - % Type conversion - + endfunction + + # Type conversion + ## -*- texinfo -*- ## @node table.table2cell ## @deftypefn {Method} {@var{c} =} table2cell (@var{obj}) @@ -310,7 +310,7 @@ function prettyprint (this) endif endfor endfunction - + ## -*- texinfo -*- ## @node table.table2struct ## @deftypefn {Method} {@var{s} =} table2struct (@var{obj}) @@ -335,14 +335,14 @@ function prettyprint (this) mustBeScalar (opts.ToScalar); toScalar = opts.ToScalar; endif - + if toScalar out = struct; for i = 1:width (this) out.(this.VariableNames{i}) = this.VariableValues{i}; endfor else - %TODO: Figure out how to implement this efficiently using cell2struct + #TODO: Figure out how to implement this efficiently using cell2struct s0 = struct; for i = 1:width (this) s0.(this.VariableNames{i}) = []; @@ -361,7 +361,7 @@ function prettyprint (this) endfor endif endfunction - + ## -*- texinfo -*- ## @node table.table2array ## @deftypefn {Method} {@var{s} =} table2struct (@var{obj}) @@ -370,20 +370,20 @@ function prettyprint (this) ## ## @end deftypefn function out = table2array (this) - %TABLE2ARRAY Convert table to homogeneous array + #TABLE2ARRAY Convert table to homogeneous array if isempty (this) out = []; return endif - % Wow, this is an easy implementation - % TODO: Doesn't work for mixed cell and non-cell variable values, because of the - % implicit conversion of numerics to single cells. Dunno if we want to add - % more graceful support for that or not. + # Wow, this is an easy implementation + # TODO: Doesn't work for mixed cell and non-cell variable values, because of the + # implicit conversion of numerics to single cells. Dunno if we want to add + # more graceful support for that or not. out = cat (2, this.VariableValues{:}); endfunction - % Structural stuff - + # Structural stuff + ## -*- texinfo -*- ## @node table.varnames ## @deftypefn {Method} {@var{out} =} varnames (@var{obj}) @@ -401,7 +401,7 @@ function prettyprint (this) else out = this; out.VariableNames = newVarNames; - endif + endif endfunction ## -*- texinfo -*- @@ -412,7 +412,7 @@ function prettyprint (this) ## ## @end deftypefn function out = istable (this) - %ISTABLE True if input is a table + #ISTABLE True if input is a table out = true; endfunction @@ -437,15 +437,15 @@ function prettyprint (this) varargout{1} = width(this); else varargout{1} = 1; - end + endif elseif nargout == 0 || nargout == 1 varargout{1} = [height(this), width(this)]; else varargout{1} = height(this); varargout{2} = width(this); [varargout{3:end}] = deal(1); - end - end + endif + endfunction ## -*- texinfo -*- ## @node table.end @@ -456,7 +456,7 @@ function prettyprint (this) ## @end deftypefn function out = end (this, k, n) out = size (this, k); - end + endfunction ## -*- texinfo -*- ## @node table.length @@ -470,7 +470,7 @@ function prettyprint (this) ## @end deftypefn function out = length (this, varargin) out = max (size (this)); - end + endfunction ## -*- texinfo -*- ## @node table.ndims @@ -482,30 +482,30 @@ function prettyprint (this) ## ## @end deftypefn function out = ndims (this) - %NDIMS Number of dimensions - % - % For tables, ndims is always 2. + #NDIMS Number of dimensions + # + # For tables, ndims is always 2. out = 2; - end - + endfunction + ## -*- texinfo -*- ## @node table.squeeze ## @deftypefn {Method} {@var{obj} =} squeeze (@var{obj}) ## ## Remove singleton dimensions. ## - ## For tables, this is always a no-op that returns the input + ## For tables, this is always a no-op that returns the input ## unmodified, because tables always have exactly 2 dimensions. ## ## @end deftypefn function out = squeeze (this) - %SQUEEZE Remove singleton dimensions from this. - % - % This is always a no-op that returns the input unmodified, because tables - % always have exactly 2 dimensions. + #SQUEEZE Remove singleton dimensions from this. + # + # This is always a no-op that returns the input unmodified, because tables + # always have exactly 2 dimensions. out = this; endfunction - + ## -*- texinfo -*- ## @node table.size_equal ## @deftypefn {Method} {@var{out} =} size_equal (@var{varargin}) @@ -514,7 +514,7 @@ function prettyprint (this) ## ## @end deftypefn function out = size_equal (varargin) - %SIZE_EQUAL True if the dimensions of all arguments agree. + #SIZE_EQUAL True if the dimensions of all arguments agree. [nrows, nvars] = size (varargin{1}); out = true; for i = 2:numel (varargin) @@ -522,16 +522,16 @@ function prettyprint (this) if nrowsi ~= nrows || nvarsi ~= nvars; out = false; return; - end + endif endfor endfunction - + ## -*- texinfo -*- ## @node table.sizeof ## @deftypefn {Method} {@var{out} =} sizeof (@var{obj}) ## ## Approximate size of array in bytes. For tables, this returns the sume - ## of @code{sizeof} for all of its variables’ arrays, plus the size of the + ## of @code{sizeof} for all of its variables’ arrays, plus the size of the ## VariableNames and any other metadata stored in @var{obj}. ## ## This is currently unimplemented. @@ -555,14 +555,14 @@ function prettyprint (this) ## ## @end deftypefn function out = height (this) - %HEIGHT Number of rows in table + #HEIGHT Number of rows in table if isempty (this.VariableValues) out = 0; else out = size (this.VariableValues{1}, 1); - end - end - + endif + endfunction + ## -*- texinfo -*- ## @node table.rows ## @deftypefn {Method} {@var{out} =} rows (@var{obj}) @@ -571,10 +571,10 @@ function prettyprint (this) ## ## @end deftypefn function out = rows (this) - %ROWS Number of rows in table + #ROWS Number of rows in table out = height (this); endfunction - + ## -*- texinfo -*- ## @node table.width ## @deftypefn {Method} {@var{out} =} width (@var{obj}) @@ -586,13 +586,13 @@ function prettyprint (this) ## ## @end deftypefn function out = width (this) - %WIDTH Number of variables in table - % - % Note that this is not the sum of the number of columns in each variable. - % It is just the number of variables. + #WIDTH Number of variables in table + # + # Note that this is not the sum of the number of columns in each variable. + # It is just the number of variables. out = numel (this.VariableNames); - end - + endfunction + ## -*- texinfo -*- ## @node table.columns ## @deftypefn {Method} {@var{out} =} columns (@var{obj}) @@ -604,13 +604,13 @@ function prettyprint (this) ## ## @end deftypefn function out = columns (this) - %COLUMNS Number of columns (variables) in table - % - % Note that this is not the sum of the number of columns in each variable. - % It is just the number of variables. + #COLUMNS Number of columns (variables) in table + # + # Note that this is not the sum of the number of columns in each variable. + # It is just the number of variables. out = width (this); endfunction - + ## -*- texinfo -*- ## @node table.numel ## @deftypefn {Method} {@var{out} =} numel (@var{obj}) @@ -625,10 +625,10 @@ function prettyprint (this) ## @end deftypefn function out = numel (this) out = 1; - % This bit breaks subsasgn - %out = heignt (this) * width (this); - end - + # This bit breaks subsasgn + #out = heignt (this) * width (this); + endfunction + ## -*- texinfo -*- ## @node table.isempty ## @deftypefn {Method} {@var{out} =} isempty (@var{obj}) @@ -641,8 +641,8 @@ function prettyprint (this) ## @end deftypefn function out = isempty (this) out = prod (size (this)) == 0; - end - + endfunction + ## -*- texinfo -*- ## @node table.ismatrix ## @deftypefn {Method} {@var{out} =} ismatrix (@var{obj}) @@ -653,12 +653,12 @@ function prettyprint (this) ## ## @end deftypefn function out = ismatrix (this) - %ISMATRIX True if input is a matrix - % - % For tables, ismatrix() is always true, by definition. + #ISMATRIX True if input is a matrix + # + # For tables, ismatrix() is always true, by definition. out = true; - end - + endfunction + ## -*- texinfo -*- ## @node table.isrow ## @deftypefn {Method} {@var{out} =} isrow (@var{obj}) @@ -667,10 +667,10 @@ function prettyprint (this) ## ## @end deftypefn function out = isrow (this) - %ISROW True if input is a row vector + #ISROW True if input is a row vector out = height (this) == 1; - end - + endfunction + ## -*- texinfo -*- ## @node table.iscol ## @deftypefn {Method} {@var{out} =} iscol (@var{obj}) @@ -683,8 +683,8 @@ function prettyprint (this) ## @end deftypefn function out = iscol (this) out = width (this) == 1; - end - + endfunction + ## -*- texinfo -*- ## @node table.isvector ## @deftypefn {Method} {@var{out} =} isvector (@var{obj}) @@ -693,10 +693,10 @@ function prettyprint (this) ## ## @end deftypefn function out = isvector (this) - %ISVECTOR True if input is a vector + #ISVECTOR True if input is a vector out = isrow (this) || iscol (this); - end - + endfunction + ## -*- texinfo -*- ## @node table.isscalar ## @deftypefn {Method} {@var{out} =} isscalar (@var{obj}) @@ -705,10 +705,10 @@ function prettyprint (this) ## ## @end deftypefn function out = isscalar (this) - %ISSCALAR True if input is a scalar + #ISSCALAR True if input is a scalar out = height (this) == 1 && width (this) == 1; - end - + endfunction + ## -*- texinfo -*- ## @node table.hasrownames ## @deftypefn {Method} {@var{out} =} hasrownames (@var{obj}) @@ -717,10 +717,10 @@ function prettyprint (this) ## ## @end deftypefn function out = hasrownames (this) - %HASROWNAMES True if this table has row names defined - out = ~isempty (this.RowNames); + #HASROWNAMES True if this table has row names defined + out = !isempty (this.RowNames); endfunction - + ## -*- texinfo -*- ## @node table.vertcat ## @deftypefn {Method} {@var{out} =} vertcat (@var{varargin}) @@ -739,32 +739,32 @@ function prettyprint (this) function out = vertcat (varargin) args = varargin; for i = 1:numel (args) - if ~istable (args{i}) + if !istable (args{i}) args{i} = table (args{i}); - end - end + endif + endfor mustBeAllSameVars (args{:}); out = args{1}; for i = 2:numel (args) if isempty (out.RowNames) - if ~isempty (args{i}.RowNames) + if !isempty (args{i}.RowNames) error ('table.vertcat: Cannot cat tables with mixed empty and non-empty RowNames'); - end + endif else out.RowNames = [out.RowNames; args{i}.RowNames]; - end + endif for iVar = 1:width (out) out.VariableValues{iVar} = [out.VariableValues{iVar}; args{i}.VariableValues{iVar}]; - end - end - end - + endfor + endfor + endfunction + ## -*- texinfo -*- ## @node table.horzcat ## @deftypefn {Method} {@var{out} =} horzcat (@var{varargin}) ## ## Horizontal concatenation. - ## + ## ## Combines tables by horizontally concatenating them. ## Inputs that are not tables are automatically converted to tables by calling ## table() on them. @@ -780,12 +780,12 @@ function prettyprint (this) seen_names = args{1}.VariableNames; for i = 2:numel (args) dup_names = intersect (seen_names, args{i}.VariableNames); - if ~isempty (dup_names) + if !isempty (dup_names) error ('table.horzcat: Inputs have duplicate VariableNames: %s', strjoin (dup_names, ', ')); - end + endif seen_names = [seen_names args{i}.VariableNames]; - end - % Okay, all var names are distinct. We can just concatenate. + endfor + # Okay, all var names are distinct. We can just concatenate. varNameses = cell (size (args)); varValses = cell (size (args)); for i = 1:numel (args) @@ -795,8 +795,8 @@ function prettyprint (this) out = varargin{1}; out.VariableNames = cat (2, varNameses{:}); out.VariableValues = cat (2, varValses{:}); - end - + endfunction + ## -*- texinfo -*- ## @node table.repmat ## @deftypefn {Method} {@var{out} =} repmat (@var{obj}, @var{sz}) @@ -826,7 +826,7 @@ function prettyprint (this) out.RowNames = repmat (this.RowNames, sz); endif endfunction - + ## -*- texinfo -*- ## @node table.repelem ## @deftypefn {Method} {@var{out} =} repelem (@var{obj}, @var{R}) @@ -850,26 +850,26 @@ function prettyprint (this) out.VariableValues{i} = repelem (this.VariableValues{i}, args{:}); endfor endfunction - + function out = subsref (this, s) - %SUBSREF Subscripted reference - % - % tbl.VarName - % tbl.VarName(ix) - % tbl.(VarName) - % tbl(ixRows, ixVars) - % tbl{ixRow, ixVar} - % tbl{ixRow, ixVar}(ix) - % - % Table supports various forms of indexing that allow you to subset the - % table or get at the variable values within the table. + #SUBSREF Subscripted reference + # + # tbl.VarName + # tbl.VarName(ix) + # tbl.(VarName) + # tbl(ixRows, ixVars) + # tbl{ixRow, ixVar} + # tbl{ixRow, ixVar}(ix) + # + # Table supports various forms of indexing that allow you to subset the + # table or get at the variable values within the table. chain_s = s(2:end); s = s(1); switch s(1).type case '()' if numel (s.subs) ~= 2 error ('table.subsref: ()-indexing of table requires exactly two arguments'); - end + endif [ixRow, ixVar] = resolveRowVarRefs (this, s.subs{1}, s.subs{2}); out = this; out = subsetrows (out, ixRow); @@ -877,27 +877,27 @@ function prettyprint (this) case '{}' if numel (s.subs) ~= 2 error ('table.subsref: {}-indexing of table requires exactly two arguments'); - end + endif [ixRow, ixVar] = resolveRowVarRefs (this, s.subs{1}, s.subs{2}); if numel (ixRow) ~= 1 && numel (ixVar) ~= 1 error('table.subsref: {}-indexing of table requires one of the inputs to be scalar'); - end - %FIXME: I'm not sure how to handle the signature here yet + endif + #FIXME: I'm not sure how to handle the signature here yet if numel (ixVar) > 1 error ('table.subsref: {}-indexing across multiple variables is currently unimplemented'); - end + endif if numel (ixRow) > 1 error ('table.subsref: {}-indexing across multiple rows is currently unimplemented'); - end + endif varData = this.VariableValues{ixVar}; out = varData(ixRow); case '.' name = s.subs; - if ~ischar (name) + if !ischar (name) error ('table.subsref: .-reference arguments must be char'); - end - % Special cases for special properties and other attribute access - % TODO: should variable names or dimension names take precedence? + endif + # Special cases for special properties and other attribute access + # TODO: should variable names or dimension names take precedence? if isequal (name, 'Properties') out = getProperties (this); elseif isequal (name, this.DimensionNames{1}) @@ -907,25 +907,25 @@ function prettyprint (this) else out = getvar (this, name); endif - end - % Chained references - if ~isempty (chain_s) + endswitch + # Chained references + if !isempty (chain_s) out = subsref (out, chain_s); - end - end - + endif + endfunction + function out = subsasgn (this, s, val) - %SUBSASGN Subscripted assignment + #SUBSASGN Subscripted assignment - % Chained subscripts + # Chained subscripts chain_s = s(2:end); s = s(1); - if ~isempty (chain_s) + if !isempty (chain_s) rhs_in = subsref (this, s); rhs = subsasgn (rhs_in, chain_s, val); else rhs = val; - end + endif out = this; switch s(1).type @@ -934,29 +934,29 @@ function prettyprint (this) case '{}' if numel (s.subs) ~= 2 error ('table.subsasgn: {}-indexing of table requires exactly two arguments'); - end + endif [ixRow, ixVar] = resolveRowVarRefs (this, s.subs{1}, s.subs{2}); - if ~isscalar (ixVar) + if !isscalar (ixVar) error ('table.subsasgn: {}-indexing must reference a single variable; got %d', ... numel (ixVar)); - end + endif varData = this.VariableValues{ixVar}; varData(ixRow) = rhs; out.VariableValues{ixVar} = varData; case '.' - if ~ischar (s.subs) + if !ischar (s.subs) error ('table.subsasgn: .-index argument must be char; got a %s', ... class (s.subs)); endif if isequal (s.subs, 'Properties') - % Special case for this.Properties access + # Special case for this.Properties access error ('table.subsasgn: .Properties access is not implemented yet'); else - out = setvar (this, s.subs, rhs); + out = setvar (this, s.subs, rhs); endif - end - end - + endswitch + endfunction + ## -*- texinfo -*- ## @node table.setVariableNames ## @deftypefn {Method} {@var{out} =} setVariableNames (@var{obj}, @var{names}) @@ -969,7 +969,7 @@ function prettyprint (this) ## @var{names} is a char or cellstr vector. It must have the same number of elements ## as the number of variable names being assigned. ## - ## @var{ix} is an index vector indicating which variable names to set. If + ## @var{ix} is an index vector indicating which variable names to set. If ## omitted, it sets all of them present in @var{obj}. ## ## This method exists because the @code{obj.Properties.VariableNames = @dots{}} @@ -977,7 +977,7 @@ function prettyprint (this) ## ## @end deftypefn function this = setVariableNames (this, varargin) - %SETVARIABLENAMES Set VariableNames + #SETVARIABLENAMES Set VariableNames narginchk (2, 3); if nargin == 2 ix = []; @@ -1008,7 +1008,7 @@ function prettyprint (this) this.VariableNames(ix) = names; endif endfunction - + ## -*- texinfo -*- ## @node table.setDimensionNames ## @deftypefn {Method} {@var{out} =} setDimensionNames (@var{obj}, @var{names}) @@ -1021,7 +1021,7 @@ function prettyprint (this) ## @var{names} is a char or cellstr vector. It must have the same number of elements ## as the number of dimension names being assigned. ## - ## @var{ix} is an index vector indicating which dimension names to set. If + ## @var{ix} is an index vector indicating which dimension names to set. If ## omitted, it sets all two of them. Since there are always two dimension, ## the indexes in @var{ix} may never be higher than 2. ## @@ -1041,7 +1041,7 @@ function prettyprint (this) names = cellstr (names); endif mustBeCellstr (names); - if ~all (cellfun (@isvarname, names)) + if !all (cellfun (@isvarname, names)) error ('table.setDimensionNames: DimensionNames must be valid variable names'); endif if isempty (ix) @@ -1078,21 +1078,21 @@ function prettyprint (this) ## ## @end deftypefn function this = setRowNames (this, names) - %SETROWNAMES Set RowNames + #SETROWNAMES Set RowNames if isempty (names) this.RowNames = []; return; endif - if ~iscellstr (names) + if !iscellstr (names) error ('table: RowNames must be cellstr; got a %s', class (names)); endif - if ~isequal (size (names), [height(this), 1]) + if !isequal (size (names), [height(this), 1]) error ('table: Dimension mismatch: table has %d rows but new RowNames is %s', ... height (this), size2str (size (names))); endif this.RowNames = names; endfunction - + ## -*- texinfo -*- ## @node table.removevars ## @deftypefn {Method} {@var{out} =} removevars (@var{obj}, @var{vars}) @@ -1111,7 +1111,7 @@ function prettyprint (this) out.VariableNames(ixVar) = []; out.VariableValues(ixVar) = []; endfunction - + ## -*- texinfo -*- ## @node table.movevars ## @deftypefn {Method} {@var{out} =} movevars (@var{obj}, @var{vars}, @var{relLocation}, @var{location}) @@ -1122,7 +1122,7 @@ function prettyprint (this) ## ## @var{relLocation} is @code{'Before'} or @code{'After'}. ## - ## @var{location} indicates a single variable to use as the target location, + ## @var{location} indicates a single variable to use as the target location, ## specified by name or index. If it is specified by index, it is the index ## into the list of *unmoved* variables from @var{obj}, not the original full ## list of variables in @var{obj}. @@ -1131,10 +1131,10 @@ function prettyprint (this) ## ## @end deftypefn function out = movevars (this, vars, relLocation, location) - if ~ischar (relLocation) + if !ischar (relLocation) error ('table.movevars: relLocation must be char; got %s', class (relLocation)); endif - if ~ismember (relLocation, {'Before', 'After'}) + if !ismember (relLocation, {'Before', 'After'}) error ('table.movevars: relLocation must be ''Before'' or ''After''; got ''%s''', ... relLocation); endif @@ -1144,7 +1144,7 @@ function prettyprint (this) tmp = subsetvars (this, ixOtherVars); moved = subsetvars (this, ixVar); ixLoc = resolveVarRef (tmp, location); - if ~isscalar (ixLoc) + if !isscalar (ixLoc) error ('table.movevars: location must specify a single existing variable'); endif if isequal(relLocation, 'Before') @@ -1156,7 +1156,7 @@ function prettyprint (this) right = subsetvars (tmp, insertionIx:width (tmp)); out = [left moved right]; endfunction - + ## -*- texinfo -*- ## @node table.getvar ## @deftypefn {Method} {[@var{out}, @var{name}]} = getvar (@var{obj}, @var{varRef}) @@ -1180,14 +1180,14 @@ function prettyprint (this) out = this.VariableValues{ix_var}; name = var_names{1}; endfunction - + ## -*- texinfo -*- ## @node table.getvars ## @deftypefn {Method} {[@var{out1}, @dots{}]} = getvars (@var{obj}, @var{varRef}) ## ## Get values for one ore more table variables. ## - ## @var{varRef} is a variable reference in the form of variable names or + ## @var{varRef} is a variable reference in the form of variable names or ## indexes. ## ## Returns as many outputs as @var{varRef} referenced variables. Each output @@ -1228,7 +1228,7 @@ function prettyprint (this) numel (ixVar)); endif out = this; - % Scalar expansion + # Scalar expansion value_in = value; n_rows = height (this); val_is_scalar = isscalar(value) || (ischar(value) && ... @@ -1242,9 +1242,9 @@ function prettyprint (this) if size (value, 1) ~= height (this) error ('table.setvar: Inconsistent dimensions: table is height %d, input is height %d', ... height (this), size (value, 1)); - end + endif if ixVar == 0 - % Adding a variable + # Adding a variable if ! ischar (varRef) error (['table.setvar: When adding a variable, you must supply the ' ... 'variable name instead of an index']); @@ -1253,11 +1253,11 @@ function prettyprint (this) out.VariableNames{ix_new_var} = varRef; out.VariableValues{ix_new_var} = value; else - % Changing a variable + # Changing a variable out.VariableValues{ixVar} = value; endif - end - + endfunction + ## -*- texinfo -*- ## @node table.addvars ## @deftypefn {Method} {@var{out} =} addvars (@var{obj}, @var{var1}, @dots{}, @var{varN}) @@ -1281,7 +1281,7 @@ function prettyprint (this) if isfield (opts, 'After') ix_insertion = resolveVarRef (this, opts.After); endif - + new_var_vals = args; if isfield (opts, 'NewVariableNames') new_var_names = opts.NewVariableNames; @@ -1298,7 +1298,7 @@ function prettyprint (this) endif endfor endif - + new_tbl = table (new_var_vals{:}, 'VariableNames', new_var_names); if ix_insertion == width (this) out = [this new_tbl]; @@ -1310,7 +1310,7 @@ function prettyprint (this) out = [left new_tbl right]; endif endfunction - + ## -*- texinfo -*- ## @node table.convertvars ## @deftypefn {Method} {@var{out} =} convertvars (@var{obj}, @var{vars}, @var{dataType}) @@ -1333,7 +1333,7 @@ function prettyprint (this) ## ## @end deftypefn function out = convertvars (this, vars, dataType) - if ~ischar (dataType) && isa (dataType, 'function_handle') + if !ischar (dataType) && isa (dataType, 'function_handle') error ('table.convertvars: dataType must be char or function_handle; got a %s', ... class (dataType)); endif @@ -1344,7 +1344,7 @@ function prettyprint (this) out.VariableValues{ixVar} = feval (dataType, this.VariableValues{ixVar}); endfor endfunction - + ## -*- texinfo -*- ## @node table.mergevars ## @deftypefn {Method} {@var{out} =} mergevars (@var{obj}, @var{vars}) @@ -1371,12 +1371,12 @@ function prettyprint (this) new_var_name = opts.NewVariableName; else new_var_name = var_names{1}; - endif - + endif + ix_all_vars = 1:width (this); ix_vars_left = ix_all_vars; ix_vars_left(ix_vars) = []; - + merged_as_tbl = subsetvars (this, ix_vars); leftover = subsetvars (this, ix_vars_left); if merge_as_table @@ -1387,7 +1387,7 @@ function prettyprint (this) out = addvars (leftover, new_var_value, 'After', ix_vars(1)-1, ... 'NewVariableNames', {new_var_name}); endfunction - + ## -*- texinfo -*- ## @node table.splitvars @@ -1416,7 +1416,7 @@ function prettyprint (this) do_all_vars = false; vars_to_split = args{1}; endif - + if do_all_vars vars_to_split = []; for i=1:width (this) @@ -1431,7 +1431,7 @@ function prettyprint (this) if numel (ix_vars) > 1 && ! isempty (new_var_names) error ('NewVariableNames may only be specified when splitting a single variable'); endif - + out = this; for i_var = numel(ix_vars):-1:1 ix_var = ix_vars(i_var); @@ -1454,7 +1454,7 @@ function prettyprint (this) else my_new_var_names = new_var_names; endif - + out = removevars (out, ix_var); out = addvars (out, new_var_vals{:}, 'NewVariableNames', my_new_var_names, ... 'Before', ix_var); @@ -1483,21 +1483,21 @@ function prettyprint (this) if isfield (opts, 'NewDataVariableName') new_data_var_name = opts.NewDataVariableName; endif - + [ix_vars, var_names] = resolveVarRef (this, varRef); if isfield (opts, 'ConstantVariables') [ix_const_vars, const_var_names] = resolveVarRef (this, opts.ConstantVariables); else ix_const_vars = setdiff (1:width (this), ix_vars); endif - + tbl = subsetvars (this, ix_const_vars); n_rows_orig = height (this); n_ctgs = numel (ix_vars); ctg_run = categorical (var_names)'; tbl = repelem (tbl, n_ctgs, 1); - - % Do some fancy indexing to arrange the stacked values + + # Do some fancy indexing to arrange the stacked values stk_vals = this.VariableValues(ix_vars); stk_mat = cat(2, stk_vals{:}); stk_mat = stk_mat'; @@ -1511,10 +1511,10 @@ function prettyprint (this) endif stk_tbl = table(index_var_vals, stk_var_vals, ... 'VariableNames', {index_var_name, new_data_var_name}); - + out = [tbl stk_tbl]; endfunction - + ## -*- texinfo -*- ## @node table.head ## @deftypefn {Method} {@var{out} =} head (@var{obj}) @@ -1540,7 +1540,7 @@ function prettyprint (this) endif out = subsetrows (this, 1:k); endfunction - + ## -*- texinfo -*- ## @node table.tail ## @deftypefn {Method} {@var{out} =} tail (@var{obj}) @@ -1556,13 +1556,13 @@ function prettyprint (this) ## ## @end deftypefn function out = tail (this, k) - %TAIL Get last K rows of table - % - % out = tail (this, k) - % - % Returns the last k rows of this. K defaults to 8. - % - % If there are less than k rows in this, returns all rows. + #TAIL Get last K rows of table + # + # out = tail (this, k) + # + # Returns the last k rows of this. K defaults to 8. + # + # If there are less than k rows in this, returns all rows. if nargin < 2 || isempty (k) k = 8; endif @@ -1573,42 +1573,42 @@ function prettyprint (this) endif out = subsetrows (this, [(nRows - (k - 1)):nRows]); endfunction - + function out = transpose (this) out = transpose_table (this); - end + endfunction function out = ctranspose (this) out = transpose_table (this); - end + endfunction + + # Relational operations - % Relational operations - function [out, index] = sortrows (this, varargin) - %SORTROWS Sort rows of table - % - % [out, index] = sortrows (this, varargin) - % - % Sorts the rows of this based on the values in their variables. - - % Parse input signature - % This is tricky because the sortrows() signature is complicated and ambiguous + #SORTROWS Sort rows of table + # + # [out, index] = sortrows (this, varargin) + # + # Sorts the rows of this based on the values in their variables. + + # Parse input signature + # This is tricky because the sortrows() signature is complicated and ambiguous args = varargin; doRowNames = false; direction = 'ascend'; varRef = ':'; knownOptions = {'MissingPlacement', 'ComparisonMethod'}; [opts, ~, optArgs] = peelOffNameValueOptions (args, knownOptions); - if ~isempty (args) && (ischar (args{end}) || iscellstr (args{end})) ... + if !isempty (args) && (ischar (args{end}) || iscellstr (args{end})) ... && all (ismember (args{end}, {'ascend','descend'})) direction = args{end}; args(end) = []; - end + endif if numel (args) > 1 error ('table.sortrows: Unrecognized options or arguments'); endif if !isempty (args) - %FIXME: Determine how to identify the "rowDimName" argument + #FIXME: Determine how to identify the "rowDimName" argument if ischar (args{1}) && isequal (args{1}, 'RowNames') doRowNames = true; else @@ -1616,19 +1616,19 @@ function prettyprint (this) endif args(end) = []; endif - - % Interpret inputs - - % Do sorting + + # Interpret inputs + + # Do sorting if doRowNames - % Special case: sort by row names + # Special case: sort by row names if isempty (this.rowNames) error ('table.sortrows: this table does not have row names'); endif [sortedRowNames, index] = sortrows (this.RowNames, direction, optArgs{:}); out = subsetrows (this, index); else - % General case + # General case ixVars = resolveVarRef (this, varRef); if ischar (direction) direction = cellstr (direction); @@ -1638,20 +1638,20 @@ function prettyprint (this) else directions = direction; endif - if ~isequal (size (directions), size (ixVars)) + if !isequal (size (directions), size (ixVars)) error ('table.sortrows: inconsistent size between direction and vars specifier'); endif - % Perform a radix sort on the referenced variables + # Perform a radix sort on the referenced variables index = 1:height (this); tmp = this; for iStep = 1:numel(ixVars) iVar = numel(ixVars) - iStep + 1; ixVar = ixVars(iVar); varVal = tmp.VariableValues{ixVar}; - %Convert Matlab-style 'descend' arg to Octave-style negative column index - %TODO: Add support for Octave-style negative column indexes in table.sortrows input. - %TODO: Wrap this arg munging logic in a sortrows_matlabby() function - %TODO: Better error message when optArgs are is present. + #Convert Matlab-style 'descend' arg to Octave-style negative column index + #TODO: Add support for Octave-style negative column indexes in table.sortrows input. + #TODO: Wrap this arg munging logic in a sortrows_matlabby() function + #TODO: Better error message when optArgs are is present. if isequal (directions{iVar}, 'descend') [~, ix] = sortrows (varVal, -1 * (1:size (varVal, 2)), optArgs{:}); else @@ -1663,23 +1663,23 @@ function prettyprint (this) out = subsetrows (this, index); endif endfunction - + function out = issortedrows (this, varargin) - %ISSORTEDROWS Determine if table rows are sorted - % - % out = issortedrows (this, varargin) - % - % TODO: Document my signature. + #ISSORTEDROWS Determine if table rows are sorted + # + # out = issortedrows (this, varargin) + # + # TODO: Document my signature. [~, ix] = sortrows (this, varargin{:}); out = isequal (ix, 1:height (this)); endfunction - + function [out, ia] = topkrows (this, k, varargin) - %TOPKROWS Top rows in sorted order - % - % [out, ia] = topkrows (this, k, varargin) - % - % TODO: Document my signature. + #TOPKROWS Top rows in sorted order + # + # [out, ia] = topkrows (this, k, varargin) + # + # TODO: Document my signature. [sorted, ix] = sortrows (this, varargin); if k > height (sorted) out = sorted; @@ -1687,31 +1687,31 @@ function prettyprint (this) else out = sorted(1:k,:); ia = ix(1:k); - end + endif endfunction function [out, ia, ic] = unique (this, varargin) - %UNIQUE Unique row values - % - % [out, ia, ic] = unique (this) - % [out, ia, ic] = unique (..., 'first'/'last') - % [out, ia, ic] = unique (..., 'legacy') - % [out, ia, ic] = unique (..., 'stable'/'sorted') - % - % The 'legacy', 'stable', and 'sorted' flags are currently unsupported - % because Octave's core unique() function does not support them. If you use - % them, you will get an error with a possibly-obsure error message. - % - % You can also pass a 'rows' flag, but it is effectively ignored, because - % row-wise operation is the only mode supported for unique() on tables. + #UNIQUE Unique row values + # + # [out, ia, ic] = unique (this) + # [out, ia, ic] = unique (..., 'first'/'last') + # [out, ia, ic] = unique (..., 'legacy') + # [out, ia, ic] = unique (..., 'stable'/'sorted') + # + # The 'legacy', 'stable', and 'sorted' flags are currently unsupported + # because Octave's core unique() function does not support them. If you use + # them, you will get an error with a possibly-obsure error message. + # + # You can also pass a 'rows' flag, but it is effectively ignored, because + # row-wise operation is the only mode supported for unique() on tables. validFlags = {'rows', 'legacy', 'stable', 'sorted', 'first', 'last'}; redundantFlags = {'rows'}; - if ~iscellstr (varargin) + if !iscellstr (varargin) error ('table.unique: Invalid inputs: args 2 and later must be char flags'); endif flags = varargin; invalidFlags = setdiff (varargin, validFlags); - if ~isempty (invalidFlags) + if !isempty (invalidFlags) error ('table.unique: Invalid flags: %s', strjoin(invalidFlags, ', ')); endif tfRedundant = ismember (flags, redundantFlags); @@ -1721,7 +1721,7 @@ function prettyprint (this) [uPk, ia, ic] = unique (pk, 'rows', flags{:}); out = subsetrows (this, ia); endfunction - + ## -*- texinfo -*- ## @node table.join ## @deftypefn {Method} {[@var{C}, @var{ib}] =} join (@var{A}, @var{B}) @@ -1731,7 +1731,7 @@ function prettyprint (this) ## ## This is not a "real" relational join operation. It has the restrictions ## that: - ## 1) The key values in B must be unique. + ## 1) The key values in B must be unique. ## 2) Every key value in A must map to a key value in B. ## These are restrictions inherited from the Matlab definition of table.join. ## @@ -1742,9 +1742,9 @@ function prettyprint (this) ## ## @end deftypefn function [C, ib] = join (A, B, varargin) - % TODO: Implement options - - % Input munging + # TODO: Implement options + + # Input munging optNames = {'Keys', 'KeepOneCopy', 'LeftKeys', 'RightKeys', ... 'LeftVariables', 'RightVariables'}; opts = peelOffNameValueOptions (varargin, optNames); @@ -1761,8 +1761,8 @@ function prettyprint (this) if !istable (B) B = table (B); endif - - % Join logic + + # Join logic keyVarNames = intersect_stable (A.VariableNames, B.VariableNames); nonKeyVarsB = setdiff_stable (B.VariableNames, keyVarNames); if isempty (keyVarNames) @@ -1776,11 +1776,11 @@ function prettyprint (this) endif [pkA, pkB] = proxykeysForMatrixes (keysA, keysB); [tf, ib] = ismember (pkA, pkB, 'rows'); - if ~all (tf) + if !all (tf) error ('table.join: Some rows in A had no corresponding key values in B'); endif - % TODO: Once we've applied the key restrictions, can we just call - % realjoin() here? + # TODO: Once we've applied the key restrictions, can we just call + # realjoin() here? outA = A; nonKeysB = subsetvars (B, nonKeyVarsB); outB = subsetrows (nonKeysB, ib); @@ -1788,7 +1788,7 @@ function prettyprint (this) endfunction function out = resolveJoinKeysAndVars(A, B, opts) - %RESOLVEJOINKEYSANDVARS Internal implementation method + #RESOLVEJOINKEYSANDVARS Internal implementation method if isfield (opts, 'Keys') if isnumeric (opts.Keys) || islogical (opts.Keys) if islogical (opts.Keys) @@ -1847,7 +1847,7 @@ function prettyprint (this) elseif isfield (opts, 'RightKeys') error ('If option RightKeys is supplied, then LeftKeys must be, too.'); else - % Default keys are a natural join + # Default keys are a natural join commonCols = intersect (A.VariableNames, B.VariableNames); keyNamesA = commonCols; keyNamesB = commonCols; @@ -1927,8 +1927,8 @@ function prettyprint (this) ## @var{ixb} - Indexes into B for each row in out ## ## @end deftypefn - function [out, ixa, ixb] = innerjoin(A, B, varargin) - % Input munging + function [out, ixa, ixb] = innerjoin(A, B, varargin) + # Input munging optNames = {'Keys', 'LeftKeys', 'RightKeys', ... 'LeftVariables', 'RightVariables'}; opts = peelOffNameValueOptions (varargin, optNames); @@ -1938,35 +1938,35 @@ function prettyprint (this) if ! istable (B) B = table (B); endif - + [out, ix] = realjoin(A, B, varargin{:}); ixa = ix(:,1); ixb = ix(:,2); endfunction - + function [out, ixs] = realjoin(A, B, varargin) - %REALJOIN "Real" relational inner join, without key restrictions - % - % [out, ixs] = realjoin(A, B, varargin) - % - % Performs a "real" relational natural inner join between two tables, - % without the key restrictions that JOIN imposes. - % - % Currently does not support tables which have RowNames. This may be - % added in the future. - % - % This is an Octave extension. - % - % TODO: Document options. - % - % Returns: - % out - a table containing the result of joining A and B, with RowNames - % removed. - % ixs - an n-by-2 double matrix where ixs(i,:) is [ixA ixB], which are - % the indexes from A and B containing the input rows that resulted - % in this output row. - - % Input handling + #REALJOIN "Real" relational inner join, without key restrictions + # + # [out, ixs] = realjoin(A, B, varargin) + # + # Performs a "real" relational natural inner join between two tables, + # without the key restrictions that JOIN imposes. + # + # Currently does not support tables which have RowNames. This may be + # added in the future. + # + # This is an Octave extension. + # + # TODO: Document options. + # + # Returns: + # out - a table containing the result of joining A and B, with RowNames + # removed. + # ixs - an n-by-2 double matrix where ixs(i,:) is [ixA ixB], which are + # the indexes from A and B containing the input rows that resulted + # in this output row. + + # Input handling optNames = {'Keys', 'LeftKeys', 'RightKeys', ... 'LeftVariables', 'RightVariables'}; opts = peelOffNameValueOptions (varargin, optNames); @@ -1983,10 +1983,10 @@ function prettyprint (this) if hasrownames (B) error ('table.realjoin: Input B may not have row names'); endif - - % Join logic + + # Join logic if isempty (opts2.keyIxA) - % This degenerates to a cartesian product + # This degenerates to a cartesian product [out, ixs] = cartesian (A, B); return endif @@ -2002,7 +2002,7 @@ function prettyprint (this) out = [outA outB]; endfunction - + ## -*- texinfo -*- ## @node table.outerjoin ## @deftypefn {Method} {[@var{out}, @var{ixa}, @var{ixb}] =} outerjoin (@var{A}, @var{B}) @@ -2025,7 +2025,7 @@ function prettyprint (this) ## @end deftypefn function [out, ixa, ixb] = outerjoin (A, B, varargin) - % Input handling + # Input handling if !istable (A) A = table (A); endif @@ -2063,10 +2063,10 @@ function prettyprint (this) if hasrownames (B) error ('table.outerjoin: Input B may not have row names'); endif - - % Join logic + + # Join logic if isempty (opts2.keyIxA) - % This degenerates to a cartesian product + # This degenerates to a cartesian product [out, ixs] = cartesian (A, B); return endif @@ -2099,7 +2099,7 @@ function prettyprint (this) ixb = [ixb; ixUnmatchedB]; endif out = [outA outB]; - % We have to do a loop because Octave doesn't like a plain cat() here + # We have to do a loop because Octave doesn't like a plain cat() here for i = 1:numel (fillTables) out = [out; fillTables{i}]; endfor @@ -2125,7 +2125,7 @@ function prettyprint (this) endfor out = table (fillVals{:}, 'VariableNames', this.VariableNames); endfunction - + ## -*- texinfo -*- ## @node table.semijoin ## @deftypefn {Method} {[@var{outA}, @var{ixA}, @var{outB}, @var{ixB}] =} semijoin @ @@ -2147,24 +2147,24 @@ function prettyprint (this) ## ## @end deftypefn function [outA, ixA, outB, ixB] = semijoin (A, B) - - % Developer note: This is almost exactly the same as antijoin, just with - % inverted ismember() tests. See if the implementations can be refactored - % together. - - % Input handling + + # Developer note: This is almost exactly the same as antijoin, just with + # inverted ismember() tests. See if the implementations can be refactored + # together. + + # Input handling if !istable (A) A = table (A); endif if !istable (B) B = table (B); endif - - % Join logic + + # Join logic keyVarNames = intersect_stable (A.VariableNames, B.VariableNames); nonKeyVarsB = setdiff_stable (B.VariableNames, keyVarNames); if isempty (keyVarNames) - % The degenerate case of no common variable names is to keep all the rows. + # The degenerate case of no common variable names is to keep all the rows. outA = A; ixA = 1:height (A); outB = B; @@ -2181,7 +2181,7 @@ function prettyprint (this) outB = subsetrows (B, ixB); endif endfunction - + ## -*- texinfo -*- ## @node table.antijoin ## @deftypefn {Method} {[@var{outA}, @var{ixA}, @var{outB}, @var{ixB}] =} antijoin @ @@ -2200,20 +2200,20 @@ function prettyprint (this) ## ## @end deftypefn function [outA, ixA, outB, ixB] = antijoin (A, B) - - % Input handling + + # Input handling if !istable (A) A = table (A); endif if !istable (B) B = table (B); endif - - % Join logic + + # Join logic keyVarNames = intersect_stable (A.VariableNames, B.VariableNames); nonKeyVarsB = setdiff_stable (B.VariableNames, keyVarNames); if isempty (keyVarNames) - % The degenerate case when there are no common variable names is the empty set + # The degenerate case when there are no common variable names is the empty set outA = subsetrows (A, []); ixA = []; outB = subsetrows (B, []); @@ -2230,7 +2230,7 @@ function prettyprint (this) outB = subsetrows (B, ixB); endif endfunction - + ## -*- texinfo -*- ## @node table.cartesian ## @deftypefn {Method} {[@var{out}, @var{ixs}] =} cartesian (@var{A}, @var{B}) @@ -2255,22 +2255,22 @@ function prettyprint (this) ## The ordering of the rows in the output is not specified, and may be implementation- ## dependent. TODO: Determine if we can lock this behavior down to a fixed, ## defined ordering, without killing performance. - ## + ## ## @end deftypefn function [out, ixs] = cartesian (A, B) - - % Developer's note: The second argout, ixs, is for table's internal use, - % and is thus undocumented. - + + # Developer's note: The second argout, ixs, is for table's internal use, + # and is thus undocumented. + mustBeA (A, 'table'); mustBeA (B, 'table'); - + commonVars = intersect (A.VariableNames, B.VariableNames); - if ~isempty (commonVars) + if !isempty (commonVars) error ('table.cartesian: Inputs have variable names in common: %s', ... strjoin (commonVars, ', ')); endif - + nRowsA = height (A); nRowsB = height (B); ixA = (1:nRowsA)'; @@ -2282,7 +2282,7 @@ function prettyprint (this) outB = subsetrows (B, ixBOut); out = [outA outB]; endfunction - + ## -*- texinfo -*- ## @node table.groupby ## @deftypefn {Method} {[@var{out}] =} groupby (@var{obj}, @var{groupvars}, @var{aggcalcs}) @@ -2291,7 +2291,7 @@ function prettyprint (this) ## ## This works like an SQL @code{"SELECT ... GROUP BY ..."} statement. ## - ## @var{groupvars} (cellstr, numeric) is a list of the grouping variables, + ## @var{groupvars} (cellstr, numeric) is a list of the grouping variables, ## identified by name or index. ## ## @var{aggcalcs} is a specification of the aggregate calculations to perform @@ -2300,24 +2300,24 @@ function prettyprint (this) ## @var{fcn} (function handle) is the function to apply to produce it ## @var{in_vars} (cellstr) is a list of the input variables to pass to fcn ## - ## Returns a table. + ## Returns a table. ## - ## @end deftypefn + ## @end deftypefn function out = groupby (this, groupvars, aggcalcs) narginchk (2, 3); - if nargin < 3 || isempty (aggcalcs); aggcalcs = cell(0, 3); end + if nargin < 3 || isempty (aggcalcs); aggcalcs = cell(0, 3); endif mustBeA (aggcalcs, 'cell'); if size (aggcalcs, 2) != 3 error ('table.groupby: aggcalcs must be an 3-wide cell; got %d-wide', ... size (aggcalcs, 2)); endif - - % Resolve input vars once up front for speed + + # Resolve input vars once up front for speed n_aggs = size (aggcalcs, 1); for i = 1:n_aggs aggcalcs{i,4} = resolveVarRef (this, aggcalcs{i,3}); endfor - + agg_outs = cell (1, n_aggs); [group_id, groups_tbl] = findgroups (subsetvars (this, groupvars)); n_groups = size (groups_tbl, 1); @@ -2337,11 +2337,11 @@ function prettyprint (this) endif endfor endfor - + agg_out_tbl = table(agg_outs{:}, 'VariableNames', aggcalcs(:,1)); out = [groups_tbl agg_out_tbl]; endfunction - + ## -*- texinfo -*- ## @node table.grpstats ## @deftypefn {Method} {[@var{out}] =} grpstats (@var{obj}, @var{groupvar}) @@ -2372,8 +2372,8 @@ function prettyprint (this) data_vars = setdiff (this.VariableNames, groupvar_names); endif aggs = cell(0, 3); - - % TODO: Implement sem, gname, meanci, predci + + # TODO: Implement sem, gname, meanci, predci stat_map = { 'mean' @mean 'numel' @numel @@ -2383,7 +2383,7 @@ function prettyprint (this) 'max' @max 'range' @range }; - + for i_var = 1:numel (data_vars) for i_stat = 1:numel (whichstats) if ischar (whichstats{i_stat}) @@ -2401,10 +2401,10 @@ function prettyprint (this) aggs = [aggs; { out_var, stat_fcn, data_vars{i_var} }]; endfor endfor - + out = groupby (this, groupvar, aggs); endfunction - + ## -*- texinfo -*- ## @node table.splitapply ## @deftypefn {Method} {@var{out} =} splitapply (@var{func}, @var{obj}, @var{G}) @@ -2442,7 +2442,7 @@ function prettyprint (this) ## The variable names become a new variable named “OriginalVariableNames”. ## ## The row names are drawn from the column @var{VariableNamesSource} if it - ## is specified. Otherwise, if @var{obj} has row names, they are used. + ## is specified. Otherwise, if @var{obj} has row names, they are used. ## Otherwise, new variable names in the form “VarN” are generated. ## ## If all the variables in @var{obj} are of the same type, they are concatenated @@ -2453,7 +2453,7 @@ function prettyprint (this) function out = rows2vars (this, varargin) [opts, args] = peelOffNameValueOptions (varargin, {'VariableNamesSource', ... 'DataVariables'}); - + for i = 1:width (this) if size (this.VariableValues{i}, 2) > 1 error ('table.rows2vars: Table variables may not have more than 1 column'); @@ -2461,7 +2461,7 @@ function prettyprint (this) error ('table.rows2vars: Nested tables are not supported'); endif endfor - + if isfield (opts, 'VariableNamesSource') new_var_names = getvar (this, opts.VariableNamesSource); tbl = removevars (this, opts.VariableNamesSource); @@ -2480,7 +2480,7 @@ function prettyprint (this) endif OriginalVariableNames = tbl.VariableNames(:); tbl_original_var_names = table (OriginalVariableNames); - + col_types = cellfun (@(x) class(x), tbl.VariableValues); u_col_types = unique (col_types); if isscalar (u_col_types) @@ -2503,7 +2503,7 @@ function prettyprint (this) 'VariableNames', new_var_names); out = [tbl_original_var_names out]; endfunction - + ## -*- texinfo -*- ## @node table.congruentize ## @deftypefn {Method} {[@var{outA}, @var{outB}] =} congruentize (@var{A}, @var{B}) @@ -2523,7 +2523,7 @@ function prettyprint (this) ## ## @end deftypefn function [outA, outB] = congruentize (A, B) - + if !istable (A) A = table (A); endif @@ -2551,7 +2551,7 @@ function prettyprint (this) outB = B; [~,loc] = ismember (A.VariableNames, outB.VariableNames); outB = subsetvars (outB, loc); - + endfunction ## -*- texinfo -*- @@ -2569,16 +2569,16 @@ function prettyprint (this) ## @var{ib} - Row indexes into B of the rows from B included in C. ## ## @end deftypefn - function [C, ia, ib] = union (A, B) - % Input handling + function [C, ia, ib] = union (A, B) + # Input handling [A, B] = congruentize (A, B); - - % Set logic + + # Set logic [pkA, pkB] = proxykeysForMatrixes (A, B); [~, ia, ib] = union (pkA, pkB, 'rows'); - C = [subsetrows(A, ia); subsetrows(B, ib)]; + C = [subsetrows(A, ia); subsetrows(B, ib)]; endfunction - + ## -*- texinfo -*- ## @node table.intersect ## @deftypefn {Method} {[@var{C}, @var{ia}, @var{ib}] =} intersect (@var{A}, @var{B}) @@ -2595,22 +2595,22 @@ function prettyprint (this) ## ## @end deftypefn function [C, ia, ib] = intersect (A, B) - % Input handling + # Input handling [A, B] = congruentize (A, B); - - % Set logic + + # Set logic [pkA, pkB] = proxykeysForMatrixes (A, B); [~, ia, ib] = intersect (pkA, pkB, 'rows'); - C = [subsetrows(A, ia); subsetrows(B, ib)]; + C = [subsetrows(A, ia); subsetrows(B, ib)]; endfunction - + ## -*- texinfo -*- ## @node table.setxor ## @deftypefn {Method} {[@var{C}, @var{ia}, @var{ib}] =} setxor (@var{A}, @var{B}) ## ## Set exclusive OR. ## - ## Computes the setwise exclusive OR of two tables. The set XOR is defined to be + ## Computes the setwise exclusive OR of two tables. The set XOR is defined to be ## the unique row values which are present in one or the other of the two input ## tables, but not in both. ## @@ -2621,22 +2621,22 @@ function prettyprint (this) ## ## @end deftypefn function [C, ia, ib] = setxor (A, B) - % Input handling + # Input handling [A, B] = congruentize (A, B); - - % Set logic + + # Set logic [pkA, pkB] = proxykeysForMatrixes (A, B); [~, ia, ib] = setxor (pkA, pkB, 'rows'); - C = [subsetrows(A, ia); subsetrows(B, ib)]; + C = [subsetrows(A, ia); subsetrows(B, ib)]; endfunction - + ## -*- texinfo -*- ## @node table.setdiff ## @deftypefn {Method} {[@var{C}, @var{ia}] =} setdiff (@var{A}, @var{B}) ## ## Set difference. ## - ## Computes the set difference of two tables. The set difference is defined to be + ## Computes the set difference of two tables. The set difference is defined to be ## the unique row values which are present in table A that are not in table B. ## ## Returns: @@ -2645,15 +2645,15 @@ function prettyprint (this) ## ## @end deftypefn function [C, ia] = setdiff (A, B) - % Input handling + # Input handling [A, B] = congruentize (A, B); - - % Set logic + + # Set logic [pkA, pkB] = proxykeysForMatrixes (A, B); [~, ia] = setdiff (pkA, pkB, 'rows'); C = subsetrows (A, ia); endfunction - + ## -*- texinfo -*- ## @node table.ismember ## @deftypefn {Method} {[@var{tf}, @var{loc}] =} ismember (@var{A}, @var{B}) @@ -2667,17 +2667,17 @@ function prettyprint (this) ## @var{loc} - Indexes into B of rows that were found. ## ## @end deftypefn - function [tf, loc] = ismember (A, B) - % Input handling + function [tf, loc] = ismember (A, B) + # Input handling [A, B] = congruentize (A, B); - - % Set logic + + # Set logic [pkA, pkB] = proxykeysForMatrixes (A, B); [tf, loc] = ismember (pkA, pkB, 'rows'); endfunction - - % Missing values - + + # Missing values + ## -*- texinfo -*- ## @node table.ismissing ## @deftypefn {Method} {@var{out} =} ismissing (@var{obj}) @@ -2714,8 +2714,8 @@ function prettyprint (this) endfor endfunction - % Function application - + # Function application + ## -*- texinfo -*- ## @node table.varfun ## @deftypefn {Method} {@var{out} =} varfun (@var{fcn}, @var{obj}) @@ -2739,7 +2739,7 @@ function prettyprint (this) error ('table.varfun: Option %s is not yet implemented.', unimplementedOptions{i}); endif endfor - if ~isa (func, 'function_handle') + if !isa (func, 'function_handle') error ('table.varfun: func must be a function handle; got a %s', class (func)); endif outputFormat = 'table'; @@ -2747,26 +2747,26 @@ function prettyprint (this) outputFormat = opts.OutputFormat; endif validOutputFormats = {'table','uniform','cell'}; - if ~ismember (outputFormat, validOutputFormats); + if !ismember (outputFormat, validOutputFormats); error ('table.varfun: Invalid OutputFormat: %s. Must be one of: %s', ... outputFormat, strjoin (validOutputFormats, ', ')); endif errorHandler = []; if isfield (opts, 'ErrorHandler') - if ~isa (opts.ErrorHandler, 'function_handle') + if !isa (opts.ErrorHandler, 'function_handle') error ('table.varfun: ErrorHandler must be a function handle; got a %s', ... class (opts.ErrorHandler)); endif errorHandler = opts.ErrorHandler; endif - + tbl = A; if isfield (opts, 'InputVariables') ixInVars = resolveVarRef (tbl, opts.InputVariables); else ixInVars = 1:width (tbl); endif - + outVals = cell (1, numel (ixInVars)); for i = 1:numel (ixInVars) ixInVar = ixInVars(i); @@ -2790,8 +2790,8 @@ function prettyprint (this) out = table (outVals{:}, 'VariableNames', tbl.VariableNames); case 'uniform' tfScalar = cellfun('isscalar', outVals); - if ~all (tfScalar) - ixFirstBad = find(~tfScalar, 1); + if !all (tfScalar) + ixFirstBad = find(!tfScalar, 1); error (['table.varfun: For OutputFormat ''uniform'', all function ' ... 'outputs must be scalar; output %d was %d long'], ... ixFirstBad, numel (outVals{ixFirstBad})); @@ -2806,7 +2806,7 @@ function prettyprint (this) out = cat (2, outVals{:}); endswitch endfunction - + ## -*- texinfo -*- ## @node table.rowfun ## @deftypefn {Method} {@var{out} =} varfun (@var{func}, @var{obj}) @@ -2844,7 +2844,7 @@ function prettyprint (this) ## for that row. This is useful for converting raised errors to missing-value ## fill values, or logging warnings. ## @item 'ExtractCellContents' - ## Whether to “pop out” the contents of the elements of cell variables in + ## Whether to “pop out” the contents of the elements of cell variables in ## @var{obj}, or to leave them as cells. True/false; default is false. If ## you specify this option, then @var{obj} may not have any multi-column ## cell-valued variables. @@ -2854,7 +2854,7 @@ function prettyprint (this) ## @item 'GroupingVariables' ## Not yet implemented. ## @item 'OutputFormat' - ## The format of the output. May be @code{'table'} (the default), + ## The format of the output. May be @code{'table'} (the default), ## @code{'uniform'}, or @code{'cell'}. If it is @code{'uniform'} or @code{'cell'}, ## the output variables are returned in multiple output arguments from ## @code{'rowfun'}. @@ -2862,16 +2862,16 @@ function prettyprint (this) ## ## Returns a @code{table} whose variables are the collected output arguments ## of @var{func} if @var{OutputFormat} is @code{'table'}. Otherwise, returns - ## multiple output arguments of whatever type @var{func} returned (if + ## multiple output arguments of whatever type @var{func} returned (if ## @var{OutputFormat} is @code{'uniform'}) or cells (if @var{OutputFormat} ## is @code{'cell'}). ## ## @end deftypefn function varargout = rowfun (func, A, varargin) - % TODO: Document all the Name/Value options; there's a bunch of them. - % TODO: Implement the remaining options. - - % Input handling + # TODO: Document all the Name/Value options; there's a bunch of them. + # TODO: Implement the remaining options. + + # Input handling mustBeA (func, 'function_handle'); mustBeA (A, 'table'); validOptions = {'InputVariables', 'GroupingVariables', 'OutputFormat', ... @@ -2884,7 +2884,7 @@ function prettyprint (this) error ('table.rowfun: Option %s is not yet implemented.', unimplementedOptions{i}); endif endfor - if ~isa (func, 'function_handle') + if !isa (func, 'function_handle') error ('table.rowfun: func must be a function handle; got a %s', class (func)); endif output_format = 'table'; @@ -2892,13 +2892,13 @@ function prettyprint (this) output_format = opts.OutputFormat; endif validOutputFormats = {'table','uniform','cell'}; - if ~ismember (outputFormat, validOutputFormats); + if !ismember (outputFormat, validOutputFormats); error ('table.rowfun: Invalid OutputFormat: %s. Must be one of: %s', ... outputFormat, strjoin (validOutputFormats, ', ')); endif errorHandler = []; if isfield (opts, 'ErrorHandler') - if ~isa (opts.ErrorHandler, 'function_handle') + if !isa (opts.ErrorHandler, 'function_handle') error ('table.rowfun: ErrorHandler must be a function handle; got a %s', ... class (opts.ErrorHandler)); endif @@ -2945,8 +2945,8 @@ function prettyprint (this) if isfield (opts, 'InputVariables') this = subsetvars (this, opts.InputVariables); endif - - % Function application + + # Function application vars = this.VariableValues; n_vars = numel (vars); out_bufs = repmat ({cell(height(this), 1)}, [1 n_out_args]); @@ -2986,8 +2986,8 @@ function prettyprint (this) out_bufs{i_out_arg}{i_row} = argouts{i_out_arg}; endfor endfor - - % Output packaging + + # Output packaging switch output_format case 'table' out_vars = cellfun(@(c) cat(1, c{:}), out_bufs); @@ -3003,7 +3003,7 @@ function prettyprint (this) error ('table.rowfun: Invalid OutputFormat: ''%s''', output_format); endswitch endfunction - + ## -*- texinfo -*- ## @node table.findgroups ## @deftypefn {Method} {[@var{G}, @var{TID}] =} findgroups (@var{obj}) @@ -3019,16 +3019,16 @@ function prettyprint (this) ## ## @end deftypefn function [G, TID] = findgroups (this) - %FINDGROUPS Find groups within a table's row values and get group numbers - % - % [G, TID] = findgroups (this) - % - % Returns: - % G - A double column vector of group numbers created from this. - % TID - A table containing the row values corresponding to the group numbers. + #FINDGROUPS Find groups within a table's row values and get group numbers + # + # [G, TID] = findgroups (this) + # + # Returns: + # G - A double column vector of group numbers created from this. + # TID - A table containing the row values corresponding to the group numbers. [TID, ~, G] = unique (this); endfunction - + ## -*- texinfo -*- ## @node table.evalWithVars ## @deftypefn {Method} {@var{out} =} evalWithVars (@var{obj}, @var{expr}) @@ -3056,12 +3056,12 @@ function prettyprint (this) ## ## @end deftypefn function out = evalWithVars (this, expr) - if ~ischar (expr) + if !ischar (expr) error ('table.evalWithVars: expr must be char; got a %s', class (expr)); endif out = __eval_expr_with_table_vars_in_workspace__ (this, expr); endfunction - + ## -*- texinfo -*- ## @node table.restrict ## @deftypefn {Method} {@var{out} =} restrict (@var{obj}, @var{expr}) @@ -3078,7 +3078,7 @@ function prettyprint (this) ## If the argument is a char, then it is evaulated as an M-code expression, ## with all of this’ variables available as workspace variables, as with ## @code{evalWithVars}. The output of expr must be a numeric or logical index - ## vector (This form is a shorthand for + ## vector (This form is a shorthand for ## @code{out = subsetrows (this, evalWithVars (this, expr))}.) ## ## TODO: Decide whether to name this to "where" to be more like SQL instead @@ -3118,7 +3118,7 @@ function prettyprint (this) ## It is an error if any variables named in the first column of @var{renameMap} ## are not present in @var{obj}. ## - ## Renames + ## Renames ## @end deftypefn function out = renamevars (this, renameMap) if ! iscellstr (renameMap) || size (renameMap, 2) ~= 2 @@ -3127,37 +3127,38 @@ function prettyprint (this) endif [tf,loc] = ismember (renameMap(:,1), this.VariableNames); if ! all (tf) - error ('No such variables in this: %s', strjoin (renameMap(~tf,1), ', ')); + error ('No such variables in this: %s', strjoin (renameMap(!tf,1), ', ')); endif out = this; out.VariableNames(loc) = renameMap(:,2); endfunction - % Prohibited operations - + # Prohibited operations + function out = shiftdims (this, varargin) - %SHIFTDIMS Not supported + #SHIFTDIMS Not supported error ('Function shiftdims is not supported for tables'); - end + endfunction function out = reshape (this, varargin) - %RESHAPE Not supported + #RESHAPE Not supported error ('Function reshape is not supported for tables'); - end + endfunction function out = resize (this, varargin) - %RESIZE Not supported + #RESIZE Not supported error ('Function resize is not supported for tables'); - end + endfunction function out = vec (this, varargin) - %VEC Not supported + #VEC Not supported error ('Function vec is not supported for tables'); - end - end - + endfunction + + endmethods + methods (Access = private) - + ## -*- texinfo -*- ## @node table.resolveVarRef ## @deftypefn {Method} {[@var{ixVar}, @var{varNames}] =} resolveVarRef (@var{obj}, @var{varRef}) @@ -3181,11 +3182,11 @@ function prettyprint (this) ## ## @end deftypefn function [ixVar, varNames] = resolveVarRef (this, varRef, strictness) - %RESOLVEVARREF Resolve a reference to variables - % - % A varRef is a numeric or char/cellstr indicator of which variables within - % this table are being referenced. - if nargin < 3 || isempty (strictness); strictness = 'strict'; end + #RESOLVEVARREF Resolve a reference to variables + # + # A varRef is a numeric or char/cellstr indicator of which variables within + # this table are being referenced. + if nargin < 3 || isempty (strictness); strictness = 'strict'; endif mustBeMember (strictness, {'strict','lenient'}); if isnumeric (varRef) || islogical (varRef) ixVar = varRef; @@ -3200,11 +3201,11 @@ function prettyprint (this) varRef = cellstr (varRef); [tf, ixVar] = ismember (varRef, this.VariableNames); if isequal (strictness, 'strict') - if ~all (tf) - error ('table: No such variable in table: %s', strjoin (varRef(~tf), ', ')); + if !all (tf) + error ('table: No such variable in table: %s', strjoin (varRef(!tf), ', ')); endif else - ixVar(~tf) = 0; + ixVar(!tf) = 0; endif elseif isa (varRef, 'tblish.table.internal.vartype_filter') ixVar = []; @@ -3215,34 +3216,34 @@ function prettyprint (this) endfor else error ('table: Unsupported variable indexing operand type: %s', class (varRef)); - end + endif varNames = repmat ({''}, size (ixVar)); varNames(ixVar != 0) = this.VariableNames(ixVar(ixVar != 0)); - end + endfunction function [ixRow, ixVar] = resolveRowVarRefs (this, rowRef, varRef) - %RESOLVEROWVARREFS Internal implementation method - % - % This resolves both row and variable refs to indexes. + #RESOLVEROWVARREFS Internal implementation method + # + # This resolves both row and variable refs to indexes. if isnumeric (rowRef) || islogical (rowRef) ixRow = rowRef; elseif iscellstr (rowRef) if isempty (this.RowNames) error ('table: this table has no RowNames'); - end + endif [tf, ixRow] = ismember (rowRef, this.RowNames); - if ~all (tf) - error ('table: No such named row in table: %s', strjoin (rowRef(~tf), ', ')); - end + if !all (tf) + error ('table: No such named row in table: %s', strjoin (rowRef(!tf), ', ')); + endif elseif isequal (rowRef, ':') ixRow = 1:height (this); else error ('table: Unsupported row indexing operand type: %s', class (rowRef)); - end - + endif + ixVar = resolveVarRef (this, varRef); - end - + endfunction + ## -*- texinfo -*- ## @node table.subsetrows ## @deftypefn {Method} {@var{out} =} subsetrows (@var{obj}, @var{ixRows}) @@ -3256,23 +3257,23 @@ function prettyprint (this) ## @end deftypefn function out = subsetrows (this, ixRows) out = this; - if ~isnumeric (ixRows) && ~islogical (ixRows) - % TODO: Hmm. Maybe we ought not to do this check, but just defer to the - % individual variable values' indexing logic, so SUBSREF/SUBSINDX overrides - % are respected. Would produce worse error messages, but be more "right" - % type-wise. + if !isnumeric (ixRows) && !islogical (ixRows) + # TODO: Hmm. Maybe we ought not to do this check, but just defer to the + # individual variable values' indexing logic, so SUBSREF/SUBSINDX overrides + # are respected. Would produce worse error messages, but be more "right" + # type-wise. error ('table.subsetrows: ixRows must be numeric or logical; got a %s', ... class (ixRows)); endif s = struct ('type', '()', 'subs', {{ixRows,':'}}); for i = 1:width (this) out.VariableValues{i} = subsref (out.VariableValues{i}, s); - end - if ~isempty (this.RowNames) + endfor + if !isempty (this.RowNames) out.RowNames = out.RowNames(ixRows); - end - end - + endif + endfunction + ## -*- texinfo -*- ## @node table.subsetvars ## @deftypefn {Method} {@var{out} =} subsetvars (@var{obj}, @var{ixVars}) @@ -3290,27 +3291,27 @@ function prettyprint (this) ## The resulting table will have its variables reordered to match ixVars. ## ## @end deftypefn - function out = subsetvars (this, ixVars) + function out = subsetvars (this, ixVars) if ischar (ixVars) - if ~isequal (ixVars, ':') + if !isequal (ixVars, ':') ixVars = cellstr (ixVars); endif endif if iscellstr (ixVars) [tf,ix] = ismember (ixVars, this.VariableNames); - if ~all (tf) + if !all (tf) error ('table.subsetvars: no such variables in this table: %s', ... - strjoin (ixVars(~tf), ', ')); + strjoin (ixVars(!tf), ', ')); endif ixVars = ix; endif out = this; out.VariableNames = this.VariableNames(ixVars); out.VariableValues = this.VariableValues(ixVars); - end - + endfunction + function [outA, outB] = makeVarNamesUnique (A, B) - %MAKEVARNAMESUNIQUE Internal implementation method + #MAKEVARNAMESUNIQUE Internal implementation method seenNames = struct; namesA = A.VariableNames; for i = 1:numel (namesA) @@ -3346,10 +3347,10 @@ function prettyprint (this) outB = B; outB.VariableNames = newNamesB; endfunction - + function out = transpose_table (this) - %TRANSPOSE_TABLE This is for table's internal use - if ~hasrownames (this) + #TRANSPOSE_TABLE This is for table's internal use + if !hasrownames (this) error ('table.transpose: this must have RowNames, but it does not'); endif c = table2cell (this); @@ -3357,22 +3358,22 @@ function prettyprint (this) endfunction function mustBeAllSameVars (varargin) - %MUSTBEALLSAMEVARS Require that all inputs have the same-named columns + #MUSTBEALLSAMEVARS Require that all inputs have the same-named columns args = varargin; if isempty (args) return endif varNames = args{1}.VariableNames; for i = 2:numel (args) - if ~isequal (varNames, args{i}.VariableNames) + if !isequal (varNames, args{i}.VariableNames) error ('Inconsistent VariableNames.\n Input 1: %s\n Input %d: %s', ... strjoin (varNames, ', '), i, strjoin (args{i}.VariableNames, ', ')); endif endfor endfunction - + function mustBeAllColVectorVars (this) - %MUSTBEALLCOLVECTORVARS Require that all vars in this are vectors, not matrixes + #MUSTBEALLCOLVECTORVARS Require that all vars in this are vectors, not matrixes for i = 1:width (this) val = this.VariableValues{i}; if size (val, 2) ~= 1 @@ -3381,12 +3382,12 @@ function mustBeAllColVectorVars (this) endif endfor endfunction - + function out = getProperties (this) - %GETPROPERTIES Get object's properties as a struct - % - % This is just for the internal use of subsref/subsasgn for .Properties - % access support. + #GETPROPERTIES Get object's properties as a struct + # + # This is just for the internal use of subsref/subsasgn for .Properties + # access support. out = struct; out.VariableNames = this.VariableNames; out.VariableValues = this.VariableValues; @@ -3394,20 +3395,20 @@ function mustBeAllColVectorVars (this) out.DimensionNames = this.DimensionNames; endfunction endmethods - + methods function [pkA, pkB] = proxykeysForMatrixes (A, B) - %PROXYKEYSFORMATRIXES Compute row proxy keys for tables - % - % [pkA, pkB] = proxykeysForMatrixes (A, B) - % - % Note: This is called "proxykeysForMatrixes", not "proxyKeysForTables", because - % it overrides the generic proxykeysForMatrixes, and tables *are* matrixes. - + #PROXYKEYSFORMATRIXES Compute row proxy keys for tables + # + # [pkA, pkB] = proxykeysForMatrixes (A, B) + # + # Note: This is called "proxykeysForMatrixes", not "proxyKeysForTables", because + # it overrides the generic proxykeysForMatrixes, and tables *are* matrixes. + if nargin == 1 mustBeA (A, 'table'); pkA = proxykeysForOneTable (A); - else + else mustBeA (A, 'table'); mustBeA (B, 'table'); if width (A) != width (B) @@ -3420,7 +3421,7 @@ function mustBeAllColVectorVars (this) endmethods methods (Access = private) - + function out = proxykeysForOneTable (this) varProxyKeys = cell (size (this.VariableNames)); for iVar = 1:numel (this.VariableNames); @@ -3428,7 +3429,7 @@ function mustBeAllColVectorVars (this) endfor out = cat (2, varProxyKeys{:}); endfunction - + function [pkA, pkB] = proxykeysForTwoTables (A, B) varProxyKeysA = cell (size (A.VariableNames)); varProxyKeysB = cell (size (B.VariableNames)); @@ -3439,9 +3440,9 @@ function mustBeAllColVectorVars (this) pkA = cat (2, varProxyKeysA{:}); pkB = cat (2, varProxyKeysB{:}); endfunction - - % Summary stuff - + + # Summary stuff + function summary_impl (this, format) if nargin < 2 || isempty (format); format = 'compact'; endif infos = {}; @@ -3493,7 +3494,7 @@ function summary_impl (this, format) error ('table.summary: invalid format: ''%s''', format); endswitch endfunction - + function out = summary_for_variable (this, ix) out.name = this.VariableNames{ix}; x = this.VariableValues{ix}; diff --git a/inst/timezones.m b/inst/timezones.m index 136e3e04..44793648 100644 --- a/inst/timezones.m +++ b/inst/timezones.m @@ -44,22 +44,22 @@ ## @end deftypefn function out = timezones (area) - %TIMEZONES List time zones - % - % timezones - % timezones (area) - % out = (...) - % - % Lists all the time zones available on this system. - % - % If the return is captured, the list is returned as a table if your Octave - % has table support, or a struct if it does not. It will have fields/variables: - % Name - % Area - % - % Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in - % the output; these are currently unimplemented here. - + #TIMEZONES List time zones + # + # timezones + # timezones (area) + # out = (...) + # + # Lists all the time zones available on this system. + # + # If the return is captured, the list is returned as a table if your Octave + # has table support, or a struct if it does not. It will have fields/variables: + # Name + # Area + # + # Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in + # the output; these are currently unimplemented here. + tzdb = tblish.chrono.internal.tzinfo.TzDb; ids = tzdb.definedZones; ids = ids(:); @@ -72,7 +72,7 @@ endif areas{i} = area; endfor - + if nargin > 0 tf = strcmp (out.Area, area); ids = ids(tf); @@ -86,10 +86,10 @@ out.Name = ids; out.Area = areas; endif - + if nargout == 0 if octave_has_table - % This assumes you're using Tablicious's table implementation + # This assumes you're using Tablicious's table implementation prettyprint (out); else fmt = ' %-32s %-20s\n'; @@ -101,7 +101,7 @@ endif clear out endif - + endfunction function out = octave_has_table diff --git a/inst/vecfun.m b/inst/vecfun.m index 626019d4..b9f1a2e7 100644 --- a/inst/vecfun.m +++ b/inst/vecfun.m @@ -35,8 +35,8 @@ ## ## @end deftypefn function out = vecfun(fcn, x, dim) - + n_dims = ndims (x); - + error('vecfun: This function is not yet implemented. Sorry.'); endfunction diff --git a/inst/years.m b/inst/years.m index 18898309..03bace15 100644 --- a/inst/years.m +++ b/inst/years.m @@ -21,7 +21,7 @@ ## Create a @code{duration} @var{x} years long, or get the years in a @code{duration} ## @var{x}. ## -## If input is numeric, returns a @code{duration} array in units of fixed-length +## If input is numeric, returns a @code{duration} array in units of fixed-length ## years of 365.2425 days each. ## ## If input is a @code{duration}, converts the @code{duration} to a number of fixed-length @@ -35,20 +35,20 @@ ## @end deftypefn function out = years (x) - %YEARS Duration in years - % - % If input is numeric, returns a @duration array in units of fixed-length - % years of 365.2425 days each. - % - % If input is a duration, converts the duration to a number of fixed-length - % years as double. - % - % Note: years creates fixed-length years, which is probably not what you want. - % To create a duration of calendar years (which account for actual leap days), - % use calyears. + #YEARS Duration in years + # + # If input is numeric, returns a @duration array in units of fixed-length + # years of 365.2425 days each. + # + # If input is a duration, converts the duration to a number of fixed-length + # years as double. + # + # Note: years creates fixed-length years, which is probably not what you want. + # To create a duration of calendar years (which account for actual leap days), + # use calyears. if isnumeric (x) out = duration.ofDays (double (x) * 365.2425); else error ('Invalid input: expected numeric or duration; got %s', class (x)); - end -end + endif +endfunction