From 3b49cdc9890fa1e5462fb32a1e27122be774ee43 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Thu, 8 Sep 2022 13:09:14 +0300 Subject: [PATCH 01/98] Catch man page build errors and add the check to CI --- .github/workflows/main.yml | 2 ++ dev/mkman.sh | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3473f0019..d641279d9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -52,3 +52,5 @@ jobs: run: dev/test.sh shell: bash + - name: Check docs are build without errors + run: dev/mkman.sh diff --git a/dev/mkman.sh b/dev/mkman.sh index 7df60b6bc..5a441f00a 100755 --- a/dev/mkman.sh +++ b/dev/mkman.sh @@ -7,7 +7,10 @@ # - BUILD should be tmpdir and cleaned up afterwards # - parse_options should be moved to bin/ -set -e +# -e - exit on error +# -u - exit on undefined +# -o pipefail - exit on error in a pipe +set -eu -o pipefail VD=$(dirname $0)/.. MAN=$VD/visidata/man From 5ec8f78707c4cd362ddc060ed8e7c81ca555fd53 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Thu, 8 Sep 2022 13:02:16 +0300 Subject: [PATCH 02/98] dev/mkman.sh: clean and create /tmp dir automatically --- dev/mkman.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dev/mkman.sh b/dev/mkman.sh index 5a441f00a..3e6bf2b45 100755 --- a/dev/mkman.sh +++ b/dev/mkman.sh @@ -4,7 +4,6 @@ # builds vd(1) man page in src repo (to be checked in) # TODO: -# - BUILD should be tmpdir and cleaned up afterwards # - parse_options should be moved to bin/ # -e - exit on error @@ -14,7 +13,11 @@ set -eu -o pipefail VD=$(dirname $0)/.. MAN=$VD/visidata/man -BUILD=$VD/_build # should be tmpdir +BUILD=/tmp/visidata_manpages + +echo "Cleaning up $BUILD" +rm -rf "$BUILD" +mkdir "$BUILD" export PYTHONPATH=$VD:$VD/visidata export PATH=$VD/bin:$PATH @@ -40,3 +43,5 @@ echo '
' >> "$manh
 
 MAN_KEEP_FORMATTING=1 COLUMNS=1000 man "$MAN"/vd.1 | ul | aha --no-header >> "$manhtml"
 echo '
' >> "$manhtml" + +echo "Files are written to $BUILD" From e267ffa4c50c89abe5473ee5b802090a5bba29dc Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Thu, 8 Sep 2022 13:16:38 +0300 Subject: [PATCH 03/98] dev/mkman.sh requires `aha` to be installed --- .github/workflows/main.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d641279d9..59aa8dd79 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -52,5 +52,7 @@ jobs: run: dev/test.sh shell: bash - - name: Check docs are build without errors - run: dev/mkman.sh + - name: Check docs are built without errors + run: | + sudo apt install aha + dev/mkman.sh From 2cb5379f413dc9d7f0baae3e4f351bb7268efb32 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sat, 8 Oct 2022 10:52:21 -0700 Subject: [PATCH 04/98] [dev] bump to v2.11dev --- setup.py | 2 +- visidata/__init__.py | 2 +- visidata/main.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index ee73dfa81..e05ae5116 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ from setuptools import setup # tox can't actually run python3 setup.py: https://github.com/tox-dev/tox/issues/96 #from visidata import __version__ -__version__ = '2.10.2' +__version__ = '2.11dev' setup(name='visidata', version=__version__, diff --git a/visidata/__init__.py b/visidata/__init__.py index c1f5538ea..9f049d041 100644 --- a/visidata/__init__.py +++ b/visidata/__init__.py @@ -1,6 +1,6 @@ 'VisiData: a curses interface for exploring and arranging tabular data' -__version__ = '2.10.2' +__version__ = '2.11dev' __version_info__ = 'VisiData v' + __version__ __author__ = 'Saul Pwanson ' __status__ = 'Production/Stable' diff --git a/visidata/main.py b/visidata/main.py index cba4d7478..fae041924 100755 --- a/visidata/main.py +++ b/visidata/main.py @@ -2,7 +2,7 @@ # Usage: $0 [] [ ...] # $0 [] --play [--batch] [-w ] [-o ] [field=value ...] -__version__ = '2.10.2' +__version__ = '2.11dev' __version_info__ = 'saul.pw/VisiData v' + __version__ from copy import copy From f6052cec89819358e509431507b9fc105482ebac Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sat, 8 Oct 2022 16:50:05 -0700 Subject: [PATCH 05/98] [dev] remove --universal; we are not building for python 2 --- dev/checklists/release.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/checklists/release.md b/dev/checklists/release.md index db15f3b42..1401d820d 100644 --- a/dev/checklists/release.md +++ b/dev/checklists/release.md @@ -71,7 +71,7 @@ Push to pypi ``` - python3 setup.py sdist bdist_wheel --universal + python3 setup.py sdist bdist_wheel twine upload dist/* ``` From 2cf8721ae10e46892fc7e385f68d953e084933d8 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sat, 8 Oct 2022 16:39:00 -0700 Subject: [PATCH 06/98] [open-cell-file] warning when file or url in cell does not exist Closes #1540 --- visidata/_open.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/_open.py b/visidata/_open.py index 6bbc293e8..1953527fa 100644 --- a/visidata/_open.py +++ b/visidata/_open.py @@ -132,4 +132,4 @@ def loadInternalSheet(vd, cls, p, **kwargs): BaseSheet.addCommand('o', 'open-file', 'vd.push(openSource(inputFilename("open: "), create=True))', 'Open file or URL') -TableSheet.addCommand('zo', 'open-cell-file', 'vd.push(openSource(cursorDisplay))', 'Open file or URL from path in current cell') +TableSheet.addCommand('zo', 'open-cell-file', 'vd.push(openSource(cursorDisplay) or fail(f"file {cursorDisplay} does not exist"))', 'Open file or URL from path in current cell') From a487423ea2ef4906c3dd7514066b5e01b8a601a7 Mon Sep 17 00:00:00 2001 From: edupont Date: Wed, 26 Oct 2022 23:16:47 +0200 Subject: [PATCH 07/98] Typo (#1573) * Typo * Update customize.md Co-authored-by: Saul Pwanson --- docs/customize.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/customize.md b/docs/customize.md index 96245903b..91a8a84f3 100644 --- a/docs/customize.md +++ b/docs/customize.md @@ -90,7 +90,7 @@ vd.aggregator('irr', np.irr, type=float) Any numeric aggregator can be added! -Supply a space-separated list of aggreagator names to `options.describe_aggr` in your .visidatarc. +Supply a space-separated list of aggregator names to `options.describe_aggrs` in your .visidatarc. ``` options.describe_aggrs = 'mean stdev irr' From a22e9520069e9adaa4c557bf4ab3bd81dd167858 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Tue, 11 Oct 2022 19:56:02 -0700 Subject: [PATCH 08/98] [graph-] fail if no numeric xcols given --- visidata/graph.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/graph.py b/visidata/graph.py index 09e89b407..03ef9f4c6 100644 --- a/visidata/graph.py +++ b/visidata/graph.py @@ -37,7 +37,7 @@ class GraphSheet(InvertedCanvas): def __init__(self, *names, **kwargs): super().__init__(*names, **kwargs) - self.xcols or vd.fail('at least one key col necessary for x-axis') + vd.numericCols(self.xcols) or vd.fail('at least one numeric key col necessary for x-axis') self.ycols or vd.fail('%s is non-numeric' % '/'.join(yc.name for yc in kwargs.get('ycols'))) @asyncthread From e887f49ece059d3339fc3dbcb9962f8e5b99f81b Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Tue, 11 Oct 2022 21:03:38 -0700 Subject: [PATCH 09/98] [unzip-http-] fix extract --- visidata/loaders/unzip_http.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/visidata/loaders/unzip_http.py b/visidata/loaders/unzip_http.py index b734891bc..292d1ac84 100644 --- a/visidata/loaders/unzip_http.py +++ b/visidata/loaders/unzip_http.py @@ -28,7 +28,7 @@ import urllib.parse -__version__ = '0.5' +__version__ = '0.5.1' def error(s): @@ -177,19 +177,26 @@ def infoiter(self): rzi.parse_extra(extra) yield rzi - def extractall(self, path, members=None): - path = path or pathlib.Path('.') - for fn in members or self.namelist(): - outpath = path/fn + def extract(self, member, path=None, pwd=None): + if pwd: + raise NotImplementedError('Passwords not supported yet') + + path = path or pathlib.Path('.') + + outpath = path/member os.makedirs(outpath.parent, exist_ok=True) - with self.open(fn) as fpin: - with open(path/fn, mode='wb') as fpout: + with self.open(member) as fpin: + with open(path/member, mode='wb') as fpout: while True: r = fpin.read(65536) if not r: break fpout.write(r) + def extractall(self, path=None, members=None, pwd=None): + for fn in members or self.namelist(): + self.extract(fn, path, pwd=pwd) + def get_range(self, start, n): return self.http.request('GET', self.url, headers={'Range': f'bytes={start}-{start+n-1}'}, preload_content=False) From 062fb67467964ba7b3f024367dc5e9a8ccc4eeeb Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Fri, 14 Oct 2022 22:42:28 -0700 Subject: [PATCH 10/98] [deprected] refactor into deprecated_warn --- visidata/deprecated.py | 27 +++++++++++++++++---------- visidata/freeze.py | 2 +- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/visidata/deprecated.py b/visidata/deprecated.py index 859ebb96c..867476eeb 100644 --- a/visidata/deprecated.py +++ b/visidata/deprecated.py @@ -5,20 +5,26 @@ alias = visidata.BaseSheet.bindkey +def deprecated_warn(func, ver, instead): + import traceback + + msg = f'{func.__name__} deprecated since v{ver}' + if instead: + msg += f'; use {instead}' + + vd.warning(msg) + + if vd.options.debug: + for line in reversed(traceback.extract_stack(limit=7)[:-2]): + vd.warning(f' {line.name} at {line.filename}:{line.lineno}') + vd.warning(f'Deprecated call traceback (most recent last):') + + def deprecated(ver, instead=''): def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): - import traceback - - msg = f'{func.__name__} deprecated since v{ver}' - if instead: - msg += f'; use {instead}' - vd.warning(msg) - - for line in reversed(traceback.extract_stack(limit=6)[:-1]): - vd.warning(f' {line.name} at {line.filename}:{line.lineno}') - vd.warning(f'Deprecated call traceback (most recent last):') + deprecated_warn(func, ver, instead) return func(*args, **kwargs) return wrapper return decorator @@ -156,3 +162,4 @@ def load_tsv(fn): exceptionCaught = deprecated('2.6', 'vd.exceptionCaught')(vd.exceptionCaught) openSource = deprecated('2.6', 'vd.openSource')(vd.openSource) globalCommand = visidata.BaseSheet.addCommand +visidata.Sheet.StaticColumn = deprecated('2.11', 'Sheet.freeze_col')(visidata.Sheet.StaticColumn) diff --git a/visidata/freeze.py b/visidata/freeze.py index 82c68690e..9057fee59 100644 --- a/visidata/freeze.py +++ b/visidata/freeze.py @@ -8,7 +8,7 @@ def resetCache(col): @Sheet.api -def StaticColumn(sheet, col): +def freeze_col(sheet, col): frozencol = SettableColumn(col.name+'_frozen') state = col.__getstate__() state.pop('name') From 606d396299d8cc4abaaa63d8e5474e4557227cc9 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Fri, 14 Oct 2022 22:43:01 -0700 Subject: [PATCH 11/98] [api] Sheet.StaticColumn renamed to Sheet.freeze_col --- visidata/deprecated.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/deprecated.py b/visidata/deprecated.py index 867476eeb..32847d2bf 100644 --- a/visidata/deprecated.py +++ b/visidata/deprecated.py @@ -162,4 +162,4 @@ def load_tsv(fn): exceptionCaught = deprecated('2.6', 'vd.exceptionCaught')(vd.exceptionCaught) openSource = deprecated('2.6', 'vd.openSource')(vd.openSource) globalCommand = visidata.BaseSheet.addCommand -visidata.Sheet.StaticColumn = deprecated('2.11', 'Sheet.freeze_col')(visidata.Sheet.StaticColumn) +visidata.Sheet.StaticColumn = deprecated('2.11', 'Sheet.freeze_col')(visidata.Sheet.freeze_col) From f047e4c5487dffe4c869da8507eccf7ebcc34101 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 17 Oct 2022 22:06:42 -0700 Subject: [PATCH 12/98] [columns] SettableColumn now copied with sheet --- visidata/column.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/visidata/column.py b/visidata/column.py index 69b790b3a..19e0bf9b7 100644 --- a/visidata/column.py +++ b/visidata/column.py @@ -586,10 +586,6 @@ def expr(self, expr): class SettableColumn(Column): 'Column using rowid to store and retrieve values internally.' - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self._store = {} - def putValue(self, row, value): self._store[self.sheet.rowid(row)] = value @@ -597,6 +593,9 @@ def calcValue(self, row): return self._store.get(self.sheet.rowid(row), None) +SettableColumn.init('_store', dict, copy=True) + + # synonyms ColumnItem = ItemColumn ColumnAttr = AttrColumn From 924563a0b7eeede80834dc02d8c1f237fe1949c1 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Wed, 19 Oct 2022 22:53:04 -0700 Subject: [PATCH 13/98] [zip] multisave --- visidata/save.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/visidata/save.py b/visidata/save.py index 3fd393fb7..70808d708 100644 --- a/visidata/save.py +++ b/visidata/save.py @@ -145,6 +145,23 @@ def _savefiles(vsheets, givenpath, savefunc, filetype): return vd.execAsync(_savefiles, vsheets, givenpath, savefunc, filetype) +@VisiData.api +def save_zip(vd, p, *vsheets): + vd.clearCaches() + + import tempfile + import zipfile + with tempfile.TemporaryDirectory() as tmpdir: + with zipfile.ZipFile(str(p), 'w', zipfile.ZIP_DEFLATED, allowZip64=True, compresslevel=9) as zfp: + for vs in Progress(vsheets): + filetype = vs.options.save_filetype + tmpp = Path(f'{tmpdir}{vs.name}.{filetype}') + savefunc = getattr(vs, 'save_' + filetype, None) or getattr(vd, 'save_' + filetype, None) + savefunc(tmpp, vs) + zfp.write(tmpp, f'{vs.name}.{vs.options.save_filetype}') + vd.status('%s save finished' % p) + + @VisiData.api def save_txt(vd, p, *vsheets): with p.open_text(mode='w', encoding=vsheets[0].options.encoding) as fp: From 1653660372fa79c6eb57d5f48e1787f7002a4beb Mon Sep 17 00:00:00 2001 From: Wu Zhenyu Date: Sat, 5 Nov 2022 13:16:13 +0800 Subject: [PATCH 14/98] Fix #1583 --- dev/zsh-completion.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/zsh-completion.py b/dev/zsh-completion.py index efdca588e..d5c41ee11 100755 --- a/dev/zsh-completion.py +++ b/dev/zsh-completion.py @@ -33,13 +33,14 @@ def generate_completion(opt): completion += ":_files" elif opt.name in ["plugins_url", "motd_url"]: completion += ":_urls" - helpstr = opt.helpstr.replace("[", "\\[").replace("]", "\\]") + helpstr = opt.helpstr selections = pat_select.findall(helpstr) if len(selections): completion += f":{selections[0].replace('/', ' ')}" # TODO: use `zstyle ':completion:*' extra-verbose true` # to control the display of default value helpstr = helpstr + f" (default: {opt.value})" + helpstr = helpstr.replace("[", "\\[").replace("]", "\\]") return f"{prefix}'[{helpstr}]{completion}'" From 322bc43074fc331e2d1ae88da2fb6d0e457da0b6 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Sat, 5 Nov 2022 18:11:18 -0700 Subject: [PATCH 15/98] [describe- expr-] use vd.getGlobals() instead of globals() #1574 --- visidata/describe.py | 2 +- visidata/expr.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/visidata/describe.py b/visidata/describe.py index 880df3b7a..3c4974365 100644 --- a/visidata/describe.py +++ b/visidata/describe.py @@ -94,7 +94,7 @@ def reloadColumn(self, srccol): for func in [min, max, sum, median]: # use type d[func.__name__] = self.calcStatistic(d, func, vals) for aggrname in vd.options.describe_aggrs.split(): - func = globals()[aggrname] + func = vd.getGlobals()[aggrname] d[func.__name__] = self.calcStatistic(d, func, vals) def calcStatistic(self, d, func, *args, **kwargs): diff --git a/visidata/expr.py b/visidata/expr.py index c2dfc1164..2b5903280 100644 --- a/visidata/expr.py +++ b/visidata/expr.py @@ -21,7 +21,7 @@ def __call__(self, val, state): varnames = [] varnames.extend(sorted((base+col.name) for col in self.sheet.columns if col.name.startswith(partial))) - varnames.extend(sorted((base+x) for x in globals() if x.startswith(partial))) + varnames.extend(sorted((base+x) for x in vd.getGlobals() if x.startswith(partial))) # Remove duplicate tabbing suggestions varnames_dict = {var:None for var in varnames} From 2901f62706c50ed533460e437168ce77ec3c8f78 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Mon, 7 Nov 2022 22:29:54 -0800 Subject: [PATCH 16/98] [tests] add Python 3.11 to tests Closes #1585 --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3473f0019..9c1e05843 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9, "3.10"] + python-version: [3.6, 3.7, 3.8, 3.9, "3.10", "3.11"] runs-on: ubuntu-latest steps: From 5b227e4fb6e0867623071b2da1ecbe65884a2181 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Mon, 7 Nov 2022 22:30:43 -0800 Subject: [PATCH 17/98] [docs] update test badge to github actions and add discord badge Closes #1586 --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b25f7e84..b676efa67 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ -# VisiData v2.10.2 [![twitter @VisiData][1.1]][1] [![CircleCI](https://circleci.com/gh/saulpw/visidata/tree/stable.svg?style=svg)](https://circleci.com/gh/saulpw/visidata/tree/stable) [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/saulpw/visidata) +# VisiData v2.10.2 + +[![twitter @VisiData][1.1]][1] +[![Tests](https://github.com/saulpw/visidata/workflows/visidata-ci-build/badge.svg)](https://github.com/saulpw/visidata/actions/workflows/main.yml) +[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/saulpw/visidata) +[![discord](https://img.shields.io/discord/880915750007750737?label=discord)](https://visidata.org/chat) A terminal interface for exploring and arranging tabular data. From 25a412a1b2fca7dd0f8e8ef06cc05aaf83b70e80 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Thu, 10 Nov 2022 20:08:48 -0800 Subject: [PATCH 18/98] [dev] ensure setuptools files have appropriate perms #1591 --- dev/checklists/release.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/checklists/release.md b/dev/checklists/release.md index 1401d820d..17a98b2c2 100644 --- a/dev/checklists/release.md +++ b/dev/checklists/release.md @@ -72,6 +72,7 @@ Push to pypi ``` python3 setup.py sdist bdist_wheel + chmod -R a+rX . twine upload dist/* ``` From 085e9b39080875b6069b43e06b115fb8132e6512 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Tue, 15 Nov 2022 22:25:54 -0800 Subject: [PATCH 19/98] [dirsheet] add open-dir-parent (bound to `) --- visidata/shell.py | 1 + 1 file changed, 1 insertion(+) diff --git a/visidata/shell.py b/visidata/shell.py index 449b4a9e4..958bd39ea 100644 --- a/visidata/shell.py +++ b/visidata/shell.py @@ -218,6 +218,7 @@ def inputShell(vd): vd.warning('no $column in command') return cmd +DirSheet.addCommand('`', 'open-dir-parent', 'vd.push(openSource(source/".."))', 'open parent directory') BaseSheet.addCommand('', 'open-dir-current', 'vd.push(vd.currentDirSheet)', 'open Directory Sheet: browse properties of files in current directory') Sheet.addCommand('z;', 'addcol-sh', 'cmd=inputShell(); addShellColumns(cmd, sheet)', 'create new column from bash expression, with $columnNames as variables') From 29d3e5c0e56d51ae69e1150f888ef85ba57be16c Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Tue, 22 Nov 2022 12:51:39 -0800 Subject: [PATCH 20/98] [docs] update pipes doc --- docs/pipes.md | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/docs/pipes.md b/docs/pipes.md index a20f98655..26cbb96b9 100644 --- a/docs/pipes.md +++ b/docs/pipes.md @@ -7,16 +7,10 @@ Version: VisiData 2.0 --- -## STDOUT pipe/redirect +## stdin/stdout pipe/redirect -Visdata is pipe-friendly, it works well with other tools in a pipeline. Visidata can interactively filter stdin, and save the -results to stdout. - -Visdata is more convenient than standard Unix filtering commands because it allows interactive edits in the middle of a pipeline. -Visidata shines over other pickers like `fzf` with the ability to select lines based on values other than -the name of the items being selected. Visidata understands numeric, date, currency, and custom values. Visidata can -sort by file size, sort processes by memory usage, or last modification times. By first sorting or filtering by -this metadata, you can more easily find what file(s) or process(es) you want to choose. +VisiData works with other tools in a pipeline. VisiData will read any piped input from stdin as a sheet, and save the +results of any remaining sheets to stdout Visdata allows interactive edits in the middle of a pipeline. - Use it to manually update (sort, filter, edit) tabular data in a pipeline `mysql < query.sql | vd | awk 'awkity {awk}' - Use it to interactively pick processes to kill `ps -ef | vd | tail -n +2 | xargs --no-run-if-empty kill` From 057b449bd8c6da9ec5c45a39e918e0022b908306 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Tue, 22 Nov 2022 12:51:52 -0800 Subject: [PATCH 21/98] [docs] update viewtsv #1610 --- docs/viewtsv.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/viewtsv.md b/docs/viewtsv.md index 9ed307701..1a3dfff97 100644 --- a/docs/viewtsv.md +++ b/docs/viewtsv.md @@ -9,12 +9,12 @@ Version: 1.0 # viewtsv -[viewtsv](https://github.com/saulpw/visidata/blob/stable/bin/viewtsv) +[viewtsv.py](https://github.com/saulpw/visidata/blob/stable/bin/viewtsv.py) is a great example of a minimal VisiData application. This is an extremely functional utility in 25 lines of code, leveraging the essence of the VisiData architecture. Here it is in its entirety, with line by line annotations: #!/usr/bin/env python3 -VisiData 1.x requires Python 3.4+. +VisiData 2.x requires Python 3.6+. import sys from visidata import Sheet, ColumnItem, options, asyncthread, run @@ -55,10 +55,8 @@ The [`reload()`](/docs/loaders) function collects data from the source and puts For each line, strip the included newline character, and filter out any blank lines. Add each split tuple to `rows`. - self.columns = [ - ColumnItem(colname, i) - for i, colname in enumerate(self.rows[0]) - ] + for i, colname in enumerate(self.rows[0]): + self.addColumn(ColumnItem(colname, i)) The actual columns are set from the first (header) row. `ColumnItem` is a builtin, which creates a column to use getitem/setitem with the given key/index. @@ -69,7 +67,7 @@ The header row is removed from the list of rows. (Column names are displayed on run(*(TsvSheet(fn, source=fn) for fn in sys.argv[1:])) -`run(*sheets)` is the toplevel entry point for vdtui. +`run(*sheets)` is the toplevel entry point for a VisiData application. From 7af7d1faf3291c03787e60587846f3f997d69172 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 28 Nov 2022 09:41:15 -0800 Subject: [PATCH 22/98] [geojson-] move columns to class level --- visidata/loaders/geojson.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/visidata/loaders/geojson.py b/visidata/loaders/geojson.py index 5acb9e549..01fd4c69d 100644 --- a/visidata/loaders/geojson.py +++ b/visidata/loaders/geojson.py @@ -16,12 +16,13 @@ def putValue(self, row, val): properties = row.setdefault('properties', {}) properties[self.expr] = val + class GeoJSONSheet(PythonSheet): rowtype = 'shapes' + columns = [Column('json_row', width=0)] def iterload(self): self.colnames = {} - self.columns = [Column('json_row', width=0)] with self.source.open_text(encoding='utf-8') as fp: ret = json.load(fp) From f25a5b89da4d085ac16ddb39601e41dc44adbe4d Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 28 Nov 2022 09:43:01 -0800 Subject: [PATCH 23/98] [sqlite] allow any "INT" type abbrev --- visidata/loaders/sqlite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/loaders/sqlite.py b/visidata/loaders/sqlite.py index 6891d7f6f..a5373b513 100644 --- a/visidata/loaders/sqlite.py +++ b/visidata/loaders/sqlite.py @@ -43,7 +43,7 @@ def parse_sqlite_type(t): if not m: return anytype typename, _, i, _, f = m.groups() if typename == 'DATE': return date - if typename == 'INTEGER': return int + if 'INT' in typename: return int if typename == 'REAL': return float if typename == 'NUMBER': return int if f == '0' else float From d941c4433456a4201178e77bcc19c5364cbbafc4 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 28 Nov 2022 09:52:32 -0800 Subject: [PATCH 24/98] [freqtbl] dive-rows becomes dive-selected; to openRows --- visidata/deprecated.py | 1 + visidata/freqtbl.py | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/visidata/deprecated.py b/visidata/deprecated.py index 32847d2bf..81edd714f 100644 --- a/visidata/deprecated.py +++ b/visidata/deprecated.py @@ -126,6 +126,7 @@ def isNumeric(col): alias('add-sheet', 'open-new') alias('save-sheets-selected', 'save-selected') alias('join-sheets', 'join-selected') +alias('dive-rows', 'dive-selected') # v2.3 alias('show-aggregate', 'memo-aggregate') diff --git a/visidata/freqtbl.py b/visidata/freqtbl.py index d384020c7..0d6f03c02 100644 --- a/visidata/freqtbl.py +++ b/visidata/freqtbl.py @@ -1,4 +1,5 @@ from copy import copy +import itertools from visidata import vd, asyncthread, vlen, VisiData, Column, AttrColumn, Sheet, ColumnsSheet, ENTER from visidata.pivot import PivotSheet, PivotGroupRow @@ -81,6 +82,12 @@ def openRow(self, row): return vs vd.warning("no source rows") + def openRows(self, rows): + vs = copy(self.source) + vs.name += "_several" + vs.rows = list(itertools.chain.from_iterable(row.sourcerows for row in rows)) + return vs + def openCell(self, col, row): return Sheet.openCell(self, col, row) @@ -100,7 +107,7 @@ def reload(self): vd.addMenuItem('Data', 'Frequency table', 'current row', 'freq-row') FreqTableSheet.addCommand('gu', 'unselect-rows', 'unselect(selectedRows)', 'unselect all source rows grouped in current row') -FreqTableSheet.addCommand('g'+ENTER, 'dive-rows', 'vs = copy(source); vs.name += "_several"; vs.rows=list(itertools.chain.from_iterable(row.sourcerows for row in selectedRows)); vd.push(vs)', 'open copy of source sheet with rows that are grouped in selected rows') +FreqTableSheet.addCommand('g'+ENTER, 'dive-selected', 'vd.push(openRows(selectedRows))', 'open copy of source sheet with rows that are grouped in selected rows') vd.addGlobals({ 'FreqTableSheet': FreqTableSheet, From ad8b7f1b7eb55cf9dd986132b38cda5d57079962 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 28 Nov 2022 10:06:50 -0800 Subject: [PATCH 25/98] [aggregators] add 95 and 99 pctile --- visidata/aggregators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/aggregators.py b/visidata/aggregators.py index 623be7644..bf1e00e48 100644 --- a/visidata/aggregators.py +++ b/visidata/aggregators.py @@ -139,7 +139,7 @@ def quantiles(q, helpstr): # since bb29b6e, a record of every aggregator # is needed in vd.aggregators -for pct in (10, 20, 25, 30, 33, 40, 50, 60, 67, 70, 75, 80, 90): +for pct in (10, 20, 25, 30, 33, 40, 50, 60, 67, 70, 75, 80, 90, 95, 99): vd.aggregators[f'p{pct}'] = percentile(pct, f'{pct}th percentile') # returns keys of the row with the max value From 9c3d8e8a6e5c6be1ebe9c6e8788dc87751c73268 Mon Sep 17 00:00:00 2001 From: Ram Rachum Date: Sat, 24 Dec 2022 13:31:20 +0200 Subject: [PATCH 26/98] Fix exception causes in utils.py --- visidata/utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/visidata/utils.py b/visidata/utils.py index a3096c118..0198825a8 100644 --- a/visidata/utils.py +++ b/visidata/utils.py @@ -24,9 +24,9 @@ def __getattr__(self, k): if isinstance(v, dict) and not isinstance(v, AttrDict): v = AttrDict(v) return v - except KeyError: + except KeyError as e: if k.startswith("__"): - raise AttributeError + raise AttributeError from e return None def __setattr__(self, k, v): @@ -99,8 +99,8 @@ def __getattr__(self, k): 'to enable .fieldname' try: return self[self._fields.index(k)] - except ValueError: - raise AttributeError + except ValueError as e: + raise AttributeError from e def __setattr__(self, k, v): 'to enable .fieldname =' From 670eb00f2bf0a01422b3c20aba4a5739ec095eb1 Mon Sep 17 00:00:00 2001 From: Ram Rachum Date: Sat, 24 Dec 2022 20:25:08 +0200 Subject: [PATCH 27/98] Fix exception causes, remove invalid exception --- visidata/ddwplay.py | 6 ++---- visidata/sheets.py | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/visidata/ddwplay.py b/visidata/ddwplay.py index 4c112f5e9..cdb5b4a9d 100644 --- a/visidata/ddwplay.py +++ b/visidata/ddwplay.py @@ -13,11 +13,9 @@ def __getattr__(self, k): if isinstance(v, dict): v = AttrDict(v) return v - except AttributeError: - raise "eofo" - except KeyError: + except KeyError as e: if k.startswith("__"): - raise AttributeError + raise AttributeError from e return '' def __setattr__(self, k, v): self[k] = v diff --git a/visidata/sheets.py b/visidata/sheets.py index 5d2fcf509..58707d9b0 100644 --- a/visidata/sheets.py +++ b/visidata/sheets.py @@ -139,12 +139,12 @@ def __getitem__(self, colid): except ValueError: try: c = self._lcm[colid] - except (KeyError, AttributeError): + except (KeyError, AttributeError) as e: if colid == 'sheet': return self.sheet elif colid == 'row': c = self.row elif colid == 'col': c = self.col else: - raise KeyError(colid) + raise KeyError(colid) from e if not isinstance(c, Column): # columns calc in the context of the row of the cell being calc'ed return c From 75a88b4d34d4eab77c952563ec273e461afae37c Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Wed, 28 Dec 2022 14:45:25 -0800 Subject: [PATCH 28/98] [docs-] fix misspellings #1640 Co-author: Kian-Meng Ang --- dev/checklists/manual-tests.md | 2 +- dev/design/176-miscrules.md | 2 +- docs/columns.md | 4 ++-- docs/customize.md | 2 +- docs/formats.md | 2 +- docs/graphics.md | 2 +- docs/group.md | 2 +- docs/man.md | 2 +- plugins/vmailcap.py | 2 +- visidata/basesheet.py | 10 +++++----- visidata/column.py | 4 ++-- visidata/man/vd.1 | 2 +- visidata/man/visidata.1 | 2 +- visidata/modify.py | 2 +- visidata/pyobj.py | 2 +- visidata/selection.py | 4 ++-- visidata/sheets.py | 6 +++--- visidata/statusbar.py | 2 +- 18 files changed, 27 insertions(+), 27 deletions(-) diff --git a/dev/checklists/manual-tests.md b/dev/checklists/manual-tests.md index a883bcc08..c99997350 100644 --- a/dev/checklists/manual-tests.md +++ b/dev/checklists/manual-tests.md @@ -58,7 +58,7 @@ - columns sheet should remain where it is, and the source sheet below gets moved to the top of the other window - redo with opening the columns sheet on the other - bug - - when Shift+Z is done on bottom pane, its second sheet becomes the second sheet of the top stack, isntead of the first sheet of the top stack + - when Shift+Z is done on bottom pane, its second sheet becomes the second sheet of the top stack, instead of the first sheet of the top stack - test 3 - Shift+Z with only one file - Shift+Z with two panes, each pane's stack only has one file diff --git a/dev/design/176-miscrules.md b/dev/design/176-miscrules.md index 5cc1ec6fa..292b75442 100644 --- a/dev/design/176-miscrules.md +++ b/dev/design/176-miscrules.md @@ -1,4 +1,4 @@ -# Miscellanous rules discovered during implementation +# Miscellaneous rules discovered during implementation - Don't put an @asynccache on calcValue, unless you know the rowdef to be simple. asynccache will expand the entire row every time it is called, which can be more expensive than the actual calcValue. diff --git a/docs/columns.md b/docs/columns.md index 019e47e60..9f88872e8 100644 --- a/docs/columns.md +++ b/docs/columns.md @@ -187,7 +187,7 @@ The following example uses [benchmarks.csv](https://raw.githubusercontent.com/sa 1. Move cursor to **SKU** column. 2. Press `gs` to select all rows. -3. Type `g*` folowed by *food/nutri*. +3. Type `g*` followed by *food/nutri*. - tests/transform-cols.vd @@ -270,7 +270,7 @@ The following examples use the file [sample.tsv](https://raw.githubusercontent.c 4. Type `|` followed by `True` to select all rows where there were more than 10 **Units** sold. 5. Press `"` to open a duplicate sheet with only those selected rows. -**Question** I have a dateset with separate columns for **Year**, **Month** and **Day**. How can I concatenate them into a single date column? +**Question** I have a dataset with separate columns for **Year**, **Month** and **Day**. How can I concatenate them into a single date column? 1. Type `=` followed by `Year + '-' + Month + '-' + Day`. 2. Set the type of the new derived column by pressing `@` (date). diff --git a/docs/customize.md b/docs/customize.md index 91a8a84f3..dee72b32a 100644 --- a/docs/customize.md +++ b/docs/customize.md @@ -20,7 +20,7 @@ From within VisiData, type `z Ctrl+H` to open the **Commands Sheet**. This is a ### Setting/changing keybindings for existing commands -1. Learn the longname for a command. Longnames are usually 2-3 words, seperated by hyphens. The first word is usually a verb, and the second usually a noun. When a command is executed, its longname appears in the lower right status, next to its keystroke. Alternatively, you can `z Ctrl+H` to open the **Commands Sheet** and discover the longname for the command in question. +1. Learn the longname for a command. Longnames are usually 2-3 words, separated by hyphens. The first word is usually a verb, and the second usually a noun. When a command is executed, its longname appears in the lower right status, next to its keystroke. Alternatively, you can `z Ctrl+H` to open the **Commands Sheet** and discover the longname for the command in question. ![longname](/docs/assets/longname.png) diff --git a/docs/formats.md b/docs/formats.md index a4bb9a38b..e28c2ec3f 100644 --- a/docs/formats.md +++ b/docs/formats.md @@ -61,7 +61,7 @@ eleventyNavigation: ## tsv {#tsv} - loader-specific options - `delimiter` (default: '\t') field delimiter to use for tsv/usv filetype - - `row_delimiter` (default: '\n') row delimeter to use for tsv/usv filetype + - `row_delimiter` (default: '\n') row delimiter to use for tsv/usv filetype - `tsv_safe_newline` (default: '\u001e') replacement for newline character when saving to tsv - `tsv_safe_tab` (default: '\u001f') replacement for tab character when saving to tsv diff --git a/docs/graphics.md b/docs/graphics.md index 77dc0a22c..27d101e66 100644 --- a/docs/graphics.md +++ b/docs/graphics.md @@ -96,7 +96,7 @@ While the Plotter API requires literal integer values for `x`/`y` and `width`/`h #### `Canvas` methods -- `Canvas.polyline(vertexes, attr, row=None)` adds a multi-segment line from the list of (x,y) `vertexes`. One vertex draws a point; two vertexes draws a single line. Note that the vertexes are *not* Point objects (unlike parameters for other methods). +- `Canvas.polyline(vertices, attr, row=None)` adds a multi-segment line from the list of (x,y) `vertices`. One vertex draws a point; two vertices draws a single line. Note that the vertices are *not* Point objects (unlike parameters for other methods). - `Canvas.label(xy, text, attr, row=None)` adds `text` at `xy` (Point in canvas units). - `Canvas.fixPoint(xyplotter, xycanvas)` sets the position of the `visibleBox` so that `xycanvas` (Point in Canvas units) is plotted at `xyplotter` (Point in Plotter units). - `Canvas.zoomTo(bbox)` sets the visible bounds so the given canvas coordinates will fill the entire Plotter area. `aspectRatio` will still be obeyed. diff --git a/docs/group.md b/docs/group.md index 48981677a..3a176e979 100644 --- a/docs/group.md +++ b/docs/group.md @@ -48,7 +48,7 @@ This example uses the file [sample.tsv](https://raw.githubusercontent.com/saulpw 1. Press `!` on the independent variable to set it as a key column. -2. Press `+` on a second column to add an *aggregrate*. This configures which column is to be composed in relation to others. +2. Press `+` on a second column to add an *aggregate*. This configures which column is to be composed in relation to others. 3. Optional: Set the type for the column being aggregated by pressing `~` (string), `#` (int), `%` (float), `$` (currency), or `@` (date). 4. Press `Shift+W` on the dependent categorical variable to pivot on it. diff --git a/docs/man.md b/docs/man.md index 6fd937edc..b5daa9750 100644 --- a/docs/man.md +++ b/docs/man.md @@ -252,7 +252,7 @@ vd(1) ^G show cursor position and bounds of current sheet on status line ^V show version and copyright information on status line ^P open Status History - m keystroke first, begin recording macro; second, prompt for keystroke , and complete recording. Macro can then be executed everytime provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. + m keystroke first, begin recording macro; second, prompt for keystroke , and complete recording. Macro can then be executed every time provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. gm open an index of all existing macros. Can be directly viewed with Enter, and then modified with ^S. ^Y z^Y g^Y open current row/cell/sheet as Python object diff --git a/plugins/vmailcap.py b/plugins/vmailcap.py index 90cb68e60..910f28ee1 100644 --- a/plugins/vmailcap.py +++ b/plugins/vmailcap.py @@ -2,7 +2,7 @@ Plugin for viewing files with appropriate mailcap-specified application. Add mailcap-view and mailcap-view-selected commands to DirSheet. -mimetype can be given explicity with `mimetype` option; will be guessed by filename otherwise. +mimetype can be given explicitly with `mimetype` option; will be guessed by filename otherwise. Usage: 1. copy to plugins dir diff --git a/visidata/basesheet.py b/visidata/basesheet.py index 80b649461..a371e8499 100644 --- a/visidata/basesheet.py +++ b/visidata/basesheet.py @@ -245,11 +245,11 @@ def reload(self): @property def cursorRow(self): - 'The row object at the row cursor. Overrideable.' + 'The row object at the row cursor. Overridable.' return None def checkCursor(self): - 'Check cursor and fix if out-of-bounds. Overrideable.' + 'Check cursor and fix if out-of-bounds. Overridable.' pass def checkCursorNoExceptions(self): @@ -264,17 +264,17 @@ def evalExpr(self, expr, **kwargs): @property def sidebar(self): - 'Default implementation just returns set value. Overrideable.' + 'Default implementation just returns set value. Overridable.' return self._sidebar @sidebar.setter def sidebar(self, v): - 'Default implementation just sets value. Overrideable.' + 'Default implementation just sets value. Overridable.' self._sidebar = v @property def sidebar_title(self): - 'Default implementation returns fixed value. Overrideable.' + 'Default implementation returns fixed value. Overridable.' return 'sidebar' diff --git a/visidata/column.py b/visidata/column.py index 19e0bf9b7..f9fbf67f6 100644 --- a/visidata/column.py +++ b/visidata/column.py @@ -387,7 +387,7 @@ def getDisplayValue(self, row): return self.getCell(row).display def putValue(self, row, val): - 'Change value for *row* in this column to *val* immediately. Does not check the type. Overrideable; by default calls ``.setter(row, val)``.' + 'Change value for *row* in this column to *val* immediately. Does not check the type. Overridable; by default calls ``.setter(row, val)``.' return self.setter(self, row, val) def setValue(self, row, val): @@ -478,7 +478,7 @@ def setattrdeep(obj, attr, val, getter=getattr, setter=setattr): try: obj = getter(obj, a) except Exception as e: - obj = obj[a] = type(obj)() # assume homogenous nesting + obj = obj[a] = type(obj)() # assume homogeneous nesting setter(obj, attrs[-1], val) diff --git a/visidata/man/vd.1 b/visidata/man/vd.1 index 0a6e2df77..01534fe22 100644 --- a/visidata/man/vd.1 +++ b/visidata/man/vd.1 @@ -499,7 +499,7 @@ show version and copyright information on status line .It Ic " ^P" .No open Sy Status History .It "m" Ar keystroke -.No first, begin recording macro; second, prompt for Ar keystroke No , and complete recording. Macro can then be executed everytime provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. +.No first, begin recording macro; second, prompt for Ar keystroke No , and complete recording. Macro can then be executed every time provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. .It "gm" .No open an index of all existing macros. Can be directly viewed with Sy Enter Ns , and then modified with Sy ^S Ns . . diff --git a/visidata/man/visidata.1 b/visidata/man/visidata.1 index 0a6e2df77..01534fe22 100644 --- a/visidata/man/visidata.1 +++ b/visidata/man/visidata.1 @@ -499,7 +499,7 @@ show version and copyright information on status line .It Ic " ^P" .No open Sy Status History .It "m" Ar keystroke -.No first, begin recording macro; second, prompt for Ar keystroke No , and complete recording. Macro can then be executed everytime provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. +.No first, begin recording macro; second, prompt for Ar keystroke No , and complete recording. Macro can then be executed every time provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. .It "gm" .No open an index of all existing macros. Can be directly viewed with Sy Enter Ns , and then modified with Sy ^S Ns . . diff --git a/visidata/modify.py b/visidata/modify.py index 15bb60d19..d36e9ffa8 100644 --- a/visidata/modify.py +++ b/visidata/modify.py @@ -213,7 +213,7 @@ def deleteSourceRow(sheet, row): @asyncthread @Sheet.api def putChanges(sheet): - 'Commit changes to ``sheet.source``. May overwrite source completely without confirmation. Overrideable.' + 'Commit changes to ``sheet.source``. May overwrite source completely without confirmation. Overridable.' sheet.commitAdds() sheet.commitMods() sheet.commitDeletes() diff --git a/visidata/pyobj.py b/visidata/pyobj.py index c3a97eab9..37a38722e 100644 --- a/visidata/pyobj.py +++ b/visidata/pyobj.py @@ -208,7 +208,7 @@ def AttrColumns(attrnames): def SheetList(*names, **kwargs): - 'Creates a Sheet from a list of homogenous dicts or namedtuples.' + 'Creates a Sheet from a list of homogeneous dicts or namedtuples.' src = kwargs.get('source', None) if not src: diff --git a/visidata/selection.py b/visidata/selection.py index 9c51ed510..32c285d0f 100644 --- a/visidata/selection.py +++ b/visidata/selection.py @@ -44,13 +44,13 @@ def unselect_row(self, row): @Sheet.api def selectRow(self, row): - 'Add *row* to set of selected rows. May be called multiple times in one command. Overrideable.' + 'Add *row* to set of selected rows. May be called multiple times in one command. Overridable.' self._selectedRows[self.rowid(row)] = row @Sheet.api def unselectRow(self, row): - 'Remove *row* from set of selected rows. Return True if row was previously selected. Overrideable.' + 'Remove *row* from set of selected rows. Return True if row was previously selected. Overridable.' if self.rowid(row) in self._selectedRows: del self._selectedRows[self.rowid(row)] return True diff --git a/visidata/sheets.py b/visidata/sheets.py index 58707d9b0..3c2df2215 100644 --- a/visidata/sheets.py +++ b/visidata/sheets.py @@ -263,7 +263,7 @@ def addRow(self, row, index=None): return row def newRow(self): - 'Return new blank row compatible with this sheet. Overrideable.' + 'Return new blank row compatible with this sheet. Overridable.' return type(self)._rowtype() @drawcache_property @@ -363,7 +363,7 @@ def evalExpr(self, expr, row=None, col=None): return eval(expr, vd.getGlobals(), contexts) def rowid(self, row): - 'Return a unique and stable hash of the *row* object. Must be fast. Overrideable.' + 'Return a unique and stable hash of the *row* object. Must be fast. Overridable.' return id(row) @property @@ -1186,7 +1186,7 @@ def _async_deepcopy(newlist, oldlist): # when diving into a sheet, remove the index unless it is precious IndexSheet.addCommand('g^R', 'reload-selected', 'reloadSheets(selectedRows or rows)', 'reload all selected sheets') SheetsSheet.addCommand('gC', 'columns-selected', 'vd.push(ColumnsSheet("all_columns", source=selectedRows))', 'open Columns Sheet with all visible columns from selected sheets') -SheetsSheet.addCommand('gI', 'describe-selected', 'vd.push(DescribeSheet("describe_all", source=selectedRows))', 'open Describe Sheet with all visble columns from selected sheets') +SheetsSheet.addCommand('gI', 'describe-selected', 'vd.push(DescribeSheet("describe_all", source=selectedRows))', 'open Describe Sheet with all visible columns from selected sheets') SheetsSheet.addCommand('z^C', 'cancel-row', 'cancelThread(*cursorRow.currentThreads)', 'abort async thread for current sheet') SheetsSheet.addCommand('gz^C', 'cancel-rows', 'for vs in selectedRows: cancelThread(*vs.currentThreads)', 'abort async threads for selected sheets') SheetsSheet.addCommand(ENTER, 'open-row', 'dest=cursorRow; vd.sheets.remove(sheet) if not sheet.precious else None; vd.push(openRow(dest))', 'open sheet referenced in current row') diff --git a/visidata/statusbar.py b/visidata/statusbar.py index 89d81f12c..07a2a07ce 100644 --- a/visidata/statusbar.py +++ b/visidata/statusbar.py @@ -159,7 +159,7 @@ def drawLeftStatus(vd, scr, vs): @VisiData.api def rightStatus(vd, sheet): - 'Return right side of status bar. Overrideable.' + 'Return right side of status bar. Overridable.' return MissingAttrFormatter().format(sheet.options.disp_rstatus_fmt, sheet=sheet, vd=vd) From a99e5e70fc35bddc8c4f1d4f32faef3c1311efbc Mon Sep 17 00:00:00 2001 From: David Baynard Date: Tue, 20 Dec 2022 19:45:02 +0000 Subject: [PATCH 29/98] Store nulls as empty strings in save_xlsx Before this change, nulls in the input would result in `None` in the saved xlsx files. --- visidata/loaders/xlsx.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/visidata/loaders/xlsx.py b/visidata/loaders/xlsx.py index 742408bc6..6ce01db10 100644 --- a/visidata/loaders/xlsx.py +++ b/visidata/loaders/xlsx.py @@ -138,7 +138,9 @@ def save_xlsx(vd, p, *sheets): row = [] for col, v in dispvals.items(): - if col.type == date: + if v is None: + v = "" + elif col.type == date: v = datetime.datetime.fromtimestamp(int(v.timestamp())) elif not vd.isNumeric(col): v = str(v) From be8acbe31ce91031414625b03b3d44db7d4896ed Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Wed, 28 Dec 2022 22:19:45 -0800 Subject: [PATCH 30/98] [freqtbl] add HistogramColumn to allow overrides #1621 To replace the histogram function, use: @HistogramColumn.api def calcValue(col:Column, row) -> str: ... --- visidata/freqtbl.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/visidata/freqtbl.py b/visidata/freqtbl.py index 0d6f03c02..49cad4756 100644 --- a/visidata/freqtbl.py +++ b/visidata/freqtbl.py @@ -19,6 +19,12 @@ def valueNames(vd, discrete_vals, numeric_vals): return '+'.join(ret) +class HistogramColumn(Column): + def calcValue(col, row): + histogram = col.sheet.options.disp_histogram + histolen = col.sheet.options.disp_histolen + return histogram*(histolen*len(row.sourcerows)//col.sheet.largest) + class FreqTableSheet(PivotSheet): 'Generate frequency-table sheet on currently selected column.' @@ -53,12 +59,7 @@ def reload(self): self.addColumn(c) if self.options.disp_histolen and self.options.disp_histogram: - def histogram(col, row): - histogram = col.sheet.options.disp_histogram - histolen = col.sheet.options.disp_histolen - return histogram*(histolen*len(row.sourcerows)//col.sheet.largest) - - c = Column('histogram', type=str, getter=histogram, width=self.options.disp_histolen+2) + c = HistogramColumn('histogram', type=str, width=self.options.disp_histolen+2) self.addColumn(c) # two more threads From 56d8a8f1cc08ff47277c32ea335229d14454fdc0 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Thu, 29 Dec 2022 15:30:41 -0800 Subject: [PATCH 31/98] [path-] fix missing import --- visidata/path.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/visidata/path.py b/visidata/path.py index bf6a12bd7..47a044a82 100644 --- a/visidata/path.py +++ b/visidata/path.py @@ -5,14 +5,14 @@ import codecs import pathlib from urllib.parse import urlparse, urlunparse -from functools import wraps +from functools import wraps, lru_cache from visidata import * vd.option('encoding', 'utf-8', 'encoding passed to codecs.open', replay=True) vd.option('encoding_errors', 'surrogateescape', 'encoding_errors passed to codecs.open', replay=True) -@functools.lru_cache() +@lru_cache() def vstat(path, force=False): try: return os.stat(path) @@ -131,7 +131,7 @@ def __init__(self, given, fp=None, fptext=None, lines=None, filesize=None): self.filesize = filesize self.rfile = None - @functools.lru_cache() + @lru_cache() def stat(self, force=False): return self._path.stat() @@ -289,7 +289,7 @@ def __str__(self): return str(self._path) @wraps(pathlib.Path.stat) - @functools.lru_cache() + @lru_cache() def stat(self, force=False): 'Return Path.stat() if relevant.' try: From 900e9b6070529c2afe850cbf419897a63b3c71c7 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Thu, 29 Dec 2022 19:54:39 -0800 Subject: [PATCH 32/98] [build] drop testing support for Python 3.6 Related to: https://github.com/actions/setup-python/issues/543 --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9c1e05843..4246dbca4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9, "3.10", "3.11"] + python-version: [3.7, 3.8, 3.9, "3.10", "3.11"] runs-on: ubuntu-latest steps: From fffc9dca4147ddd1ee8b38d2e47bb5c7172affa4 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Thu, 29 Dec 2022 20:51:45 -0800 Subject: [PATCH 33/98] [freeze] add missing import --- visidata/freeze.py | 1 + 1 file changed, 1 insertion(+) diff --git a/visidata/freeze.py b/visidata/freeze.py index 9057fee59..58dd23a59 100644 --- a/visidata/freeze.py +++ b/visidata/freeze.py @@ -1,4 +1,5 @@ from visidata import * +import collections @Column.api From fb1efca2b8ccfa36515896a598504a3ca9e7948d Mon Sep 17 00:00:00 2001 From: anjakefala Date: Thu, 29 Dec 2022 22:03:29 -0800 Subject: [PATCH 34/98] [tests] fix typo in column name --- visidata/tests/test_commands.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/visidata/tests/test_commands.py b/visidata/tests/test_commands.py index 15d102fd0..49b8a6dfc 100644 --- a/visidata/tests/test_commands.py +++ b/visidata/tests/test_commands.py @@ -43,11 +43,11 @@ def isTestableCommand(longname, cmdlist): 'unselect-col-regex': '.', 'unselect-cols-regex': '.', 'edit-cell': '', # no change should not error - 'go-col-regex': 'Unit', # column name in sample + 'go-col-regex': 'Units', # column name in sample 'go-col-number': '2', 'go-row-number': '5', # go to row 5 'addcol-bulk': '1', - 'addcol-expr': 'Unit', # just copy the column + 'addcol-expr': 'Units', # just copy the column 'addcol-incr-step': '2', 'setcol-incr-step': '2', 'setcol-format-enum': '1=cat', From d10bdf683972ec3b8cf9eefc07fa880118ad32ff Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Fri, 30 Dec 2022 00:19:55 -0800 Subject: [PATCH 35/98] [api] add vd.launchExternalEditorPath --- visidata/editor.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/visidata/editor.py b/visidata/editor.py index 475d3ed26..63783f38a 100644 --- a/visidata/editor.py +++ b/visidata/editor.py @@ -46,10 +46,11 @@ def launchExternalEditor(vd, v, linenum=0): with tempfile.NamedTemporaryFile() as temp: with open(temp.name, 'w') as fp: fp.write(v) - return launchExternalEditorPath(visidata.Path(temp.name), linenum) + return vd.launchExternalEditorPath(visidata.Path(temp.name), linenum) -def launchExternalEditorPath(path, linenum=0): +@visidata.VisiData.api +def launchExternalEditorPath(vd, path, linenum=0): 'Launch $EDITOR to edit *path* starting on line *linenum*.' if linenum: visidata.vd.launchEditor(path, '+%s' % linenum) From 4ad4b92a48e87b3f4f9a5909386754e2407ed839 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Fri, 30 Dec 2022 00:22:29 -0800 Subject: [PATCH 36/98] [sysedit-selected] edit rows in $EDITOR #1596 - edit rows - save to temp file in given format (default tsv) - edit in $EDITOR - load values in temp sheet - setValuesTyped on existing sheet - only handles cell modifications, not added/deleted rows/cols - bound to gCtrl+O for now --- visidata/__init__.py | 1 + visidata/sysedit.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 visidata/sysedit.py diff --git a/visidata/__init__.py b/visidata/__init__.py index 9f049d041..c406b5c62 100644 --- a/visidata/__init__.py +++ b/visidata/__init__.py @@ -71,6 +71,7 @@ def getGlobals(): import visidata.cmdlog import visidata.save import visidata.clipboard +import visidata.sysedit import visidata.slide import visidata.search import visidata.expr diff --git a/visidata/sysedit.py b/visidata/sysedit.py new file mode 100644 index 000000000..2a1a4a026 --- /dev/null +++ b/visidata/sysedit.py @@ -0,0 +1,42 @@ +from copy import copy +from visidata import vd, asyncthread, Path, Sheet, IndexSheet + + +@Sheet.api +def syseditCells(sheet, cols, rows, filetype=None): + filetype = filetype or vd.input("edit %d %s as filetype: " % (len(rows), sheet.rowtype), value=sheet.options.save_filetype or 'tsv') + vd.sync(sheet.syseditCells_async(cols, rows, filetype)) + + +@Sheet.api +@asyncthread +def syseditCells_async(sheet, cols, rows, filetype=None): + vs = copy(sheet) + vs.rows = rows or vd.fail('no %s selected' % sheet.rowtype) + vs.columns = cols + + import tempfile + with tempfile.NamedTemporaryFile() as temp: + p = Path(temp.name+'.'+filetype) + + vd.status(f'copying {vs.nRows} {vs.rowtype} to {p} as {filetype}') + vd.sync(vd.saveSheets(p, vs)) + + tempvs = vd.openSource(p, filetype=filetype) + + vd.launchExternalEditorPath(p) + tempvs.source = p + vd.sync(tempvs.ensureLoaded()) + + while isinstance(tempvs, IndexSheet): + tempvs.ensureLoaded() + tempvs = tempvs.rows[0] + + for col in sheet.visibleCols: + tempcol = tempvs.colsByName.get(col.name) + if not tempcol: # column not in edited version + continue + col.setValuesTyped(rows, *[tempcol.getTypedValue(r) for r in tempvs.rows]) + + +Sheet.addCommand('g^O', 'sysedit-selected', 'syseditCells(visibleCols, onlySelectedRows)', 'edit rows in $EDITOR') From 5eff8bd18574ecae27af8fe4520186f07204c217 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sun, 1 Jan 2023 20:17:56 -0800 Subject: [PATCH 37/98] [dev] update CHANGELOG --- CHANGELOG.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ae404831..5aa561be5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,38 @@ # VisiData version history +# vX.X.X (2023-XX-XX) + +- drop support for Python 3.6 + - related to https://github.com/actions/setup-python/issues/543 + +- [dirsheet] add `open-dir-parent` (bound to `\``) +- [loaders zip] add multisave for `.zip` + - saves all sheets into one `.zip` +- [sysedit] add `sysedit-selected` (default: `g Ctrl+O`) (requested by @Delapouite #1596) + - edit cells in multiple rows in `$EDITOR` + - only handles cell modifications + +## Improvements + +- [aggregators] add 95 and 99 percentile +- [frequency table] `dive-rows` becomes `dive-selected` +- [graph] fail if no numeric xcols are given +- [open-cell-files] warn when file or url in cell does not exist (requested by @geekscrapy #1540) +- [tests] add testing support for Python 3.11 (#1585) + +## Bugfixes + +- [describe] fix custom describe aggregators (reported by @edupont #1574) +- [install] ensure setuptools files have appropriate permissions (reported by @icp1994 #1591) +- [loaders xlsx] store `Null` as empty string in `save_xlsx` (reported and PR by @dbaynard #1626 #1629) +- [unzip-http] fix extraction +- [zsh-completion] fixed (reported by @pigmonkey #1583; PR by @Freed-Wu #1646) + +## API + +- fix Exception causes in utils.py (PR by @cool-RR #1633) +- add `HistogramColumn` to allow overrides (requested by @andycraig #1621) + # v2.10.2 (2022-10-XX) - add .vdx, a simplified new cmdlog format From 79b944c275d6e8573c05cf9004c6505b2b422f0b Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sun, 1 Jan 2023 20:23:49 -0800 Subject: [PATCH 38/98] [dev] update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5aa561be5..ad15c177f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ ## Bugfixes +- [columns] `dup-sheet` now carries over attributes of columns added by `add-column` - [describe] fix custom describe aggregators (reported by @edupont #1574) - [install] ensure setuptools files have appropriate permissions (reported by @icp1994 #1591) - [loaders xlsx] store `Null` as empty string in `save_xlsx` (reported and PR by @dbaynard #1626 #1629) From 83efd4271d8bbe6137247436ccdbfb29b932ea81 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sun, 1 Jan 2023 20:24:06 -0800 Subject: [PATCH 39/98] [dev] drop support for v3.6 --- README.md | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b676efa67..006701be1 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ VisiData supports tsv, csv, sqlite, json, xlsx (Excel), hdf5, and [many other fo ## Platform requirements - Linux, OS/X, or Windows (with WSL) -- Python 3.6+ +- Python 3.7+ - additional Python modules are required for certain formats and sources ## Install diff --git a/setup.py b/setup.py index e05ae5116..d458931d9 100755 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ long_description=open('README.md').read(), long_description_content_type='text/markdown', author='Saul Pwanson', - python_requires='>=3.6', + python_requires='>=3.7', author_email='visidata@saul.pw', url='https://visidata.org', download_url='https://github.com/saulpw/visidata/tarball/' + __version__, From 7e603974b851ded669c5cc958acfea78a926f296 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Sun, 1 Jan 2023 15:20:40 -0800 Subject: [PATCH 40/98] [formats] rename "VisiData loader" column to "loader" --- dev/formats.jsonl | 92 +++++++++++++++++++++++------------------------ dev/formats.vd | 4 +-- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/dev/formats.jsonl b/dev/formats.jsonl index 6683442a0..563db998c 100644 --- a/dev/formats.jsonl +++ b/dev/formats.jsonl @@ -1,46 +1,46 @@ -{"filetype": "csv", "filetype_url": "#csv", "aliases": "", "requirements": "", "format": "Comma-Separated Values", "VisiData loader": "yes", "VisiData saver": "displayed text", "version_added": "0.28", "created": "1972", "creator": "", "description": "not recommended for new data", "open format": "prehistory", "nestable": "", "plottable": "", "format_url": "https://en.wikipedia.org/wiki/Comma-separated_values"} -{"filetype": "json", "filetype_url": "#json", "aliases": "", "requirements": "", "format": "Javascript Object Notation (JSON)", "VisiData loader": "yes", "VisiData saver": "typed", "version_added": "0.28", "created": "2001", "creator": "Douglas Crockford", "description": "widespread", "open format": "yes", "nestable": "nestable", "plottable": "", "format_url": "http://json.org/"} -{"filetype": "tsv", "filetype_url": "#tsv", "aliases": "txt", "requirements": "", "format": "Tab-Separated Values", "VisiData loader": "yes", "VisiData saver": "displayed text", "version_added": "0.28", "created": "", "creator": "", "description": "", "open format": "prehistory", "nestable": "", "plottable": "", "format_url": "http://jkorpela.fi/TSV.html"} -{"filetype": "xlsx", "aliases": "", "requirements": "openpyxl", "format": "Excel spreadsheets", "VisiData loader": "yes", "VisiData saver": "", "version_added": "0.28", "created": "1987", "creator": "Microsoft", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": "https://msdn.microsoft.com/en-us/library/office/cc313154(v=office.12).aspx"} -{"filetype": "zip", "format": "ZIP archive format", "VisiData loader": "yes", "VisiData saver": " ", "version_added": "0.28", "created": "1989", "creator": "PKWARE", "open format": "yes", "format_url": "https://support.pkware.com/home/pkzip/developer-tools/appnote"} -{"filetype": "hdf5", "aliases": "h5", "requirements": "h5py", "format": "Hierarchical Data Format", "VisiData loader": "yes", "VisiData saver": "", "version_added": "0.28", "created": "199x", "creator": "NCSA", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://support.hdfgroup.org/HDF5/"} -{"filetype": "sqlite", "filetype_url": "#sqlite", "aliases": "db", "requirements": "", "format": "sqlite", "VisiData loader": "yes", "VisiData saver": "", "version_added": "0.42", "created": "2000", "creator": "D. Richard Hipp", "description": "full SQL relational database; the most used database engine in the world", "open format": "public domain", "nestable": "", "plottable": "", "format_url": "https://sqlite.org/"} -{"filetype": "xls", "aliases": "", "requirements": "xlrd", "format": "Excel spreadsheets", "VisiData loader": "yes", "VisiData saver": "", "version_added": "0.42", "created": "1987", "creator": "Microsoft", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": "https://msdn.microsoft.com/en-us/library/office/cc313154(v=office.12).aspx"} -{"filetype": "fixed", "filetype_url": "#fixed", "aliases": "", "requirements": "", "format": "fixed width text", "VisiData loader": "yes", "VisiData saver": "displayed text (as of 2.1)", "version_added": "0.97", "created": "", "creator": "", "description": "not recommended for new data", "open format": "prehistory", "nestable": "", "plottable": "", "format_url": "https://stackoverflow.com/questions/7666780/why-are-fixed-width-file-formats-still-in-use"} -{"filetype": "postgres", "filetype_url": "#postgres", "aliases": "", "requirements": "", "format": "PostgreSQL database", "VisiData loader": "yes", "VisiData saver": "", "version_added": "0.97", "created": "1996", "creator": "", "description": "", "open format": "", "nestable": "", "plottable": "", "format_url": ""} -{"filetype": "vd", "filetype_url": "#vd", "aliases": "vdj", "requirements": "", "format": "VisiData command log", "VisiData loader": "yes", "VisiData saver": "yes", "version_added": "0.97", "created": "2017", "creator": "VisiData", "description": "replayable", "open format": "yes", "nestable": "", "plottable": "", "format_url": "http://visidata.org/docs/save-restore/"} -{"filetype": "vds", "format": "VisiData Sheet", "VisiData loader": "yes", "VisiData saver": "yes", "version_added": "2.2", "created": "2021", "creator": "VisiData", "description": "save column properties and data for multiple sheets in one file", "open format": "yes"} -{"filetype": "mbtiles", "filetype_url": "#mbtiles", "aliases": "", "requirements": "mapbox-vector-tile", "format": "MapBox Tileset", "VisiData loader": "yes", "VisiData saver": "", "version_added": "0.98", "created": "2011", "creator": "MapBox", "description": "based on sqlite", "open format": "yes", "nestable": "", "plottable": "plottable", "format_url": "https://docs.mapbox.com/help/glossary/mbtiles/"} -{"filetype": "pbf", "aliases": "", "requirements": "", "format": "Protocolbuffer Binary Format", "VisiData loader": "yes", "VisiData saver": "", "version_added": "0.98", "created": "2011", "creator": "OpenStreetMap", "description": "OpenStreetMap data file", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://wiki.openstreetmap.org/wiki/PBF_Format"} -{"filetype": "shp", "filetype_url": "#shp", "aliases": "dbf", "requirements": "pyshp", "format": "Shapefile geographic data", "VisiData loader": "yes", "VisiData saver": "", "version_added": "0.98", "created": "1993", "creator": "ESRI", "description": "open format created by ESRI", "open format": "yes", "nestable": "", "plottable": "plottable", "format_url": "https://en.wikipedia.org/wiki/Shapefile"} -{"filetype": "html", "filetype_url": "#html", "aliases": "htm", "requirements": "lxml", "format": "HTML tables", "VisiData loader": "yes", "VisiData saver": "displayed text", "version_added": "0.99", "created": "1996", "creator": "Dave Raggett", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://www.w3.org/TR/html401/struct/tables.html"} -{"filetype": "md", "aliases": "", "requirements": "", "format": "markdown table", "VisiData loader": " ", "VisiData saver": "displayed text", "version_added": "1.1", "created": "2008", "creator": "", "description": "used in many minimalist web pages", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://help.github.com/articles/organizing-information-with-tables/"} -{"filetype": "png", "filetype_url": "#png", "aliases": "", "requirements": "pypng", "format": "Portable Network Graphics (PNG) image", "VisiData loader": "yes", "VisiData saver": "from png", "version_added": "1.1", "created": "1996", "creator": "PNG Development Group", "description": "lossless bitmap image format", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://www.w3.org/TR/PNG/"} -{"filetype": "ttf", "filetype_url": "#ttf", "aliases": "otf", "requirements": "fonttools", "format": "TrueType Font", "VisiData loader": "yes", "VisiData saver": "", "version_added": "1.1", "created": "1991", "creator": "Apple", "description": "", "open format": "yes", "nestable": "", "plottable": "plottable", "format_url": "https://en.wikipedia.org/wiki/TrueType"} -{"filetype": "dot", "filetype_url": "#pcap", "aliases": "", "requirements": "", "format": "Graphviz diagram", "VisiData loader": " ", "VisiData saver": "from pcap", "version_added": "1.2", "created": "1991", "creator": "", "description": "output for pcap only", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://graphviz.gitlab.io/_pages/doc/info/lang.html"} -{"filetype": "dta", "aliases": "", "requirements": "pandas", "format": "Stata", "VisiData loader": "yes", "VisiData saver": "", "version_added": "1.2", "created": "1985", "creator": "StataCorp", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": "https://www.loc.gov/preservation/digital/formats/fdd/fdd000471.shtml"} -{"filetype": "geojson", "filetype_url": "#shp", "aliases": "", "requirements": "", "format": "Geographic JSON", "VisiData loader": "yes", "VisiData saver": "yes (from shp and geojson)", "version_added": "2.2", "created": "2008", "creator": "", "description": "derivative of JSON", "open format": "yes", "nestable": "", "plottable": "plottable", "format_url": "http://geojson.org/"} -{"filetype": "sas7bdat", "aliases": "", "requirements": "sas7bdat", "format": "Statistical Analysis System (SAS)", "VisiData loader": "yes", "VisiData saver": "", "version_added": "1.2", "created": "1976", "creator": "SAS Institute", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": "https://stackoverflow.com/questions/26532606/how-to-convert-sas7bdat-file-to-csv"} -{"filetype": "sav", "aliases": "", "requirements": "", "format": "SPSS statistics", "VisiData loader": "yes", "VisiData saver": "", "version_added": "1.2", "created": "1968", "creator": "SPSS Inc", "description": "", "open format": "IBM", "nestable": "", "plottable": "", "format_url": "https://www.dummies.com/education/math/statistics/the-spss-file-format/"} -{"filetype": "spss", "aliases": "", "requirements": "savReaderWriter", "format": "SPSS statistics", "VisiData loader": "yes", "VisiData saver": "", "version_added": "1.2", "created": "1968", "creator": "SPSS Inc", "description": "", "open format": "IBM", "nestable": "", "plottable": "", "format_url": "https://www.dummies.com/education/math/statistics/the-spss-file-format/"} -{"filetype": "xpt", "aliases": "", "requirements": "xport", "format": "Statistical Analysis System (SAS)", "VisiData loader": "yes", "VisiData saver": "", "version_added": "1.2", "created": "1976", "creator": "SAS Institute", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": "https://stackoverflow.com/questions/26532606/how-to-convert-sas7bdat-file-to-csv"} -{"filetype": "jsonl", "filetype_url": "#json", "aliases": "ndjson ldjson", "requirements": "", "format": "JSON Lines", "VisiData loader": "yes", "VisiData saver": "typed", "version_added": "1.3", "created": "2013", "creator": "Ian Ward", "description": "JSON derivative; streamable", "open format": "yes", "nestable": "nestable", "plottable": "", "format_url": "http://jsonlines.org/ http://ndjson.org"} -{"filetype": "pandas", "filetype_url": "#pandas", "aliases": "", "requirements": "pandas", "format": "all formats supported by pandas library", "VisiData loader": "yes", "VisiData saver": "", "version_added": "1.3", "created": "2008", "creator": "Wes McKinney", "description": "special adapter for the Python pandas library; anything pandas supports for loading", "open format": "", "nestable": "", "plottable": "", "format_url": "http://pandas-docs.github.io/pandas-docs-travis/user_guide/io.html"} -{"filetype": "pcap", "filetype_url": "#pcap", "aliases": "cap pcapng ntar", "requirements": "dpkt dnslib", "format": "network packet capture", "VisiData loader": "yes", "VisiData saver": "", "version_added": "1.3", "created": "1988", "creator": "LBNL", "description": "", "open format": "BSD", "nestable": "", "plottable": "", "format_url": "https://en.wikipedia.org/wiki/Pcap"} -{"filetype": "pyprof", "aliases": "", "requirements": "", "format": "Python Profile data", "VisiData loader": "yes", "VisiData saver": "", "version_added": "1.3", "created": "", "creator": "", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://stackoverflow.com/questions/1896032/using-cprofile-results-with-kcachegrind"} -{"filetype": "xml", "filetype_url": "#xml", "aliases": "", "requirements": "lxml", "format": "eXtensible Markup Language (XML)", "VisiData loader": "yes", "VisiData saver": "from xml", "version_added": "1.3", "created": "1998", "creator": "W3C", "description": "", "open format": "yes", "nestable": "nestable", "plottable": "", "format_url": "https://www.w3.org/TR/REC-xml/"} -{"filetype": "yaml", "aliases": "yml", "requirements": "PyYAML", "format": "YAML Ain't Markup Language (YAML)", "VisiData loader": "yes", "VisiData saver": "", "version_added": "1.3", "created": "2001", "creator": "Clark Evans", "description": "minimal text syntax", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://yaml.org/"} -{"filetype": "frictionless", "aliases": "", "requirements": "datapackage", "format": "Frictionless Data", "VisiData loader": "yes", "VisiData saver": "", "version_added": "2.0", "created": "", "creator": "OpenKnowledge Institute", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://frictionlessdata.io/"} -{"filetype": "jira", "aliases": "", "requirements": "", "format": "JIRA/Confluence table markup", "VisiData loader": " ", "VisiData saver": "displayed text", "version_added": "2.0", "created": "", "creator": "Atlassian", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html#ConfluenceWikiMarkup-Tables"} -{"filetype": "npy", "aliases": "npz", "requirements": "numpy", "format": "NumPy array format", "VisiData loader": "yes", "VisiData saver": "typed", "version_added": "2.0", "created": "", "creator": "", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://numpy.org/doc/stable/reference/generated/numpy.lib.format.html"} -{"filetype": "tar", "aliases": "tbz2 tgz txz", "format": "Unix Tape Archive", "VisiData loader": "yes", "VisiData saver": "", "version_added": "2.0", "open format": "yes"} -{"filetype": "usv", "aliases": "", "requirements": "", "format": "Unicode-Separated Value", "VisiData loader": "yes", "VisiData saver": "displayed text", "version_added": "2.0", "created": "1993", "creator": "Unicode", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://codepoints.net/U+241E"} -{"filetype": "xlsb", "aliases": "", "requirements": "xlrd", "format": "Excel binary format", "VisiData loader": "yes", "VisiData saver": "", "version_added": "2.0", "created": "", "creator": "Microsoft", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": ""} -{"filetype": "mysql", "requirements": "MySQLdb", "format": "MySQL", "VisiData loader": "yes", "version_added": "2.0", "created": "1995", "creator": "MySQL AB", "open format": "yes", "format_url": "https://github.com/mysql/mysql-server"} -{"filetype": "pdf", "requirements": "pdfminer.six", "format": "Portable Document Format", "VisiData loader": "yes", "VisiData saver": "", "version_added": "2.0", "created": "1993", "creator": "Adobe", "description": "", "open format": "yes", "format_url": "https://en.wikipedia.org/wiki/PDF"} -{"filetype": "vcf", "format": "Virtual Contact File (vCard)", "VisiData loader": "yes", "version_added": "2.0", "created": "1995", "creator": "Versit Consortium", "open format": "yes", "format_url": "https://tools.ietf.org/html/rfc6350"} -{"filetype": "rec", "format": "recutils database file", "VisiData loader": "yes", "VisiData saver": "displayed text", "version_added": "2.0", "created": "2010", "creator": "Jose E. Marchesi", "description": "human-editable, plain text database", "open format": "yes", "format_url": "https://www.gnu.org/software/recutils/"} -{"filetype": "eml", "format": "Multipurpose Internet Mail Extensions (MIME)", "VisiData loader": "yes", "version_added": "2.0", "created": "1996", "creator": "Nathaniel Borenstein and Ned Freed", "open format": "yes", "format_url": "https://tools.ietf.org/html/rfc2045"} -{"filetype": "arrow", "requirements": "pyarrow", "format": "Arrow IPC file format", "VisiData loader": "yes", "version_added": "2.9", "created": "2016", "creator": "Apache Software Foundation", "open format": "yes", "format_url": "https://arrow.apache.org/docs/format/Columnar.html"} -{"filetype": "arrows", "requirements": "pyarrow", "format": "Arrow IPC streaming format", "VisiData loader": "yes", "version_added": "2.9", "created": "2016", "creator": "Apache Software Foundation", "open format": "yes", "format_url": "https://arrow.apache.org/docs/format/Columnar.html"} -{"filetype": "parquet", "requirements": "pyarrow or pandas", "format": "Apache Parquet", "VisiData loader": "yes", "version_added": "1.3", "created": "2013", "creator": "Apache Software Foundation", "open format": "yes", "format_url": "https://parquet.apache.org/"} +{"filetype": "csv", "filetype_url": "#csv", "aliases": "", "requirements": "", "format": "Comma-Separated Values", "loader": "yes", "VisiData saver": "displayed text", "version_added": "0.28", "created": "1972", "creator": "", "description": "not recommended for new data", "open format": "prehistory", "nestable": "", "plottable": "", "format_url": "https://en.wikipedia.org/wiki/Comma-separated_values"} +{"filetype": "json", "filetype_url": "#json", "aliases": "", "requirements": "", "format": "Javascript Object Notation (JSON)", "loader": "yes", "VisiData saver": "typed", "version_added": "0.28", "created": "2001", "creator": "Douglas Crockford", "description": "widespread", "open format": "yes", "nestable": "nestable", "plottable": "", "format_url": "http://json.org/"} +{"filetype": "tsv", "filetype_url": "#tsv", "aliases": "txt", "requirements": "", "format": "Tab-Separated Values", "loader": "yes", "VisiData saver": "displayed text", "version_added": "0.28", "created": "", "creator": "", "description": "", "open format": "prehistory", "nestable": "", "plottable": "", "format_url": "http://jkorpela.fi/TSV.html"} +{"filetype": "xlsx", "aliases": "", "requirements": "openpyxl", "format": "Excel spreadsheets", "loader": "yes", "VisiData saver": "", "version_added": "0.28", "created": "1987", "creator": "Microsoft", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": "https://msdn.microsoft.com/en-us/library/office/cc313154(v=office.12).aspx"} +{"filetype": "zip", "format": "ZIP archive format", "loader": "yes", "VisiData saver": " ", "version_added": "0.28", "created": "1989", "creator": "PKWARE", "open format": "yes", "format_url": "https://support.pkware.com/home/pkzip/developer-tools/appnote"} +{"filetype": "hdf5", "aliases": "h5", "requirements": "h5py", "format": "Hierarchical Data Format", "loader": "yes", "VisiData saver": "", "version_added": "0.28", "created": "199x", "creator": "NCSA", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://support.hdfgroup.org/HDF5/"} +{"filetype": "sqlite", "filetype_url": "#sqlite", "aliases": "db", "requirements": "", "format": "sqlite", "loader": "yes", "VisiData saver": "", "version_added": "0.42", "created": "2000", "creator": "D. Richard Hipp", "description": "full SQL relational database; the most used database engine in the world", "open format": "public domain", "nestable": "", "plottable": "", "format_url": "https://sqlite.org/"} +{"filetype": "xls", "aliases": "", "requirements": "xlrd", "format": "Excel spreadsheets", "loader": "yes", "VisiData saver": "", "version_added": "0.42", "created": "1987", "creator": "Microsoft", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": "https://msdn.microsoft.com/en-us/library/office/cc313154(v=office.12).aspx"} +{"filetype": "fixed", "filetype_url": "#fixed", "aliases": "", "requirements": "", "format": "fixed width text", "loader": "yes", "VisiData saver": "displayed text (as of 2.1)", "version_added": "0.97", "created": "", "creator": "", "description": "not recommended for new data", "open format": "prehistory", "nestable": "", "plottable": "", "format_url": "https://stackoverflow.com/questions/7666780/why-are-fixed-width-file-formats-still-in-use"} +{"filetype": "postgres", "filetype_url": "#postgres", "aliases": "", "requirements": "", "format": "PostgreSQL database", "loader": "yes", "VisiData saver": "", "version_added": "0.97", "created": "1996", "creator": "", "description": "", "open format": "", "nestable": "", "plottable": "", "format_url": ""} +{"filetype": "vd", "filetype_url": "#vd", "aliases": "vdj", "requirements": "", "format": "VisiData command log", "loader": "yes", "VisiData saver": "yes", "version_added": "0.97", "created": "2017", "creator": "VisiData", "description": "replayable", "open format": "yes", "nestable": "", "plottable": "", "format_url": "http://visidata.org/docs/save-restore/"} +{"filetype": "vds", "format": "VisiData Sheet", "loader": "yes", "VisiData saver": "yes", "version_added": "2.2", "created": "2021", "creator": "VisiData", "description": "save column properties and data for multiple sheets in one file", "open format": "yes"} +{"filetype": "mbtiles", "filetype_url": "#mbtiles", "aliases": "", "requirements": "mapbox-vector-tile", "format": "MapBox Tileset", "loader": "yes", "VisiData saver": "", "version_added": "0.98", "created": "2011", "creator": "MapBox", "description": "based on sqlite", "open format": "yes", "nestable": "", "plottable": "plottable", "format_url": "https://docs.mapbox.com/help/glossary/mbtiles/"} +{"filetype": "pbf", "aliases": "", "requirements": "", "format": "Protocolbuffer Binary Format", "loader": "yes", "VisiData saver": "", "version_added": "0.98", "created": "2011", "creator": "OpenStreetMap", "description": "OpenStreetMap data file", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://wiki.openstreetmap.org/wiki/PBF_Format"} +{"filetype": "shp", "filetype_url": "#shp", "aliases": "dbf", "requirements": "pyshp", "format": "Shapefile geographic data", "loader": "yes", "VisiData saver": "", "version_added": "0.98", "created": "1993", "creator": "ESRI", "description": "open format created by ESRI", "open format": "yes", "nestable": "", "plottable": "plottable", "format_url": "https://en.wikipedia.org/wiki/Shapefile"} +{"filetype": "html", "filetype_url": "#html", "aliases": "htm", "requirements": "lxml", "format": "HTML tables", "loader": "yes", "VisiData saver": "displayed text", "version_added": "0.99", "created": "1996", "creator": "Dave Raggett", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://www.w3.org/TR/html401/struct/tables.html"} +{"filetype": "md", "aliases": "", "requirements": "", "format": "markdown table", "loader": " ", "VisiData saver": "displayed text", "version_added": "1.1", "created": "2008", "creator": "", "description": "used in many minimalist web pages", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://help.github.com/articles/organizing-information-with-tables/"} +{"filetype": "png", "filetype_url": "#png", "aliases": "", "requirements": "pypng", "format": "Portable Network Graphics (PNG) image", "loader": "yes", "VisiData saver": "from png", "version_added": "1.1", "created": "1996", "creator": "PNG Development Group", "description": "lossless bitmap image format", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://www.w3.org/TR/PNG/"} +{"filetype": "ttf", "filetype_url": "#ttf", "aliases": "otf", "requirements": "fonttools", "format": "TrueType Font", "loader": "yes", "VisiData saver": "", "version_added": "1.1", "created": "1991", "creator": "Apple", "description": "", "open format": "yes", "nestable": "", "plottable": "plottable", "format_url": "https://en.wikipedia.org/wiki/TrueType"} +{"filetype": "dot", "filetype_url": "#pcap", "aliases": "", "requirements": "", "format": "Graphviz diagram", "loader": " ", "VisiData saver": "from pcap", "version_added": "1.2", "created": "1991", "creator": "", "description": "output for pcap only", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://graphviz.gitlab.io/_pages/doc/info/lang.html"} +{"filetype": "dta", "aliases": "", "requirements": "pandas", "format": "Stata", "loader": "yes", "VisiData saver": "", "version_added": "1.2", "created": "1985", "creator": "StataCorp", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": "https://www.loc.gov/preservation/digital/formats/fdd/fdd000471.shtml"} +{"filetype": "geojson", "filetype_url": "#shp", "aliases": "", "requirements": "", "format": "Geographic JSON", "loader": "yes", "VisiData saver": "yes (from shp and geojson)", "version_added": "2.2", "created": "2008", "creator": "", "description": "derivative of JSON", "open format": "yes", "nestable": "", "plottable": "plottable", "format_url": "http://geojson.org/"} +{"filetype": "sas7bdat", "aliases": "", "requirements": "sas7bdat", "format": "Statistical Analysis System (SAS)", "loader": "yes", "VisiData saver": "", "version_added": "1.2", "created": "1976", "creator": "SAS Institute", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": "https://stackoverflow.com/questions/26532606/how-to-convert-sas7bdat-file-to-csv"} +{"filetype": "sav", "aliases": "", "requirements": "", "format": "SPSS statistics", "loader": "yes", "VisiData saver": "", "version_added": "1.2", "created": "1968", "creator": "SPSS Inc", "description": "", "open format": "IBM", "nestable": "", "plottable": "", "format_url": "https://www.dummies.com/education/math/statistics/the-spss-file-format/"} +{"filetype": "spss", "aliases": "", "requirements": "savReaderWriter", "format": "SPSS statistics", "loader": "yes", "VisiData saver": "", "version_added": "1.2", "created": "1968", "creator": "SPSS Inc", "description": "", "open format": "IBM", "nestable": "", "plottable": "", "format_url": "https://www.dummies.com/education/math/statistics/the-spss-file-format/"} +{"filetype": "xpt", "aliases": "", "requirements": "xport", "format": "Statistical Analysis System (SAS)", "loader": "yes", "VisiData saver": "", "version_added": "1.2", "created": "1976", "creator": "SAS Institute", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": "https://stackoverflow.com/questions/26532606/how-to-convert-sas7bdat-file-to-csv"} +{"filetype": "jsonl", "filetype_url": "#json", "aliases": "ndjson ldjson", "requirements": "", "format": "JSON Lines", "loader": "yes", "VisiData saver": "typed", "version_added": "1.3", "created": "2013", "creator": "Ian Ward", "description": "JSON derivative; streamable", "open format": "yes", "nestable": "nestable", "plottable": "", "format_url": "http://jsonlines.org/ http://ndjson.org"} +{"filetype": "pandas", "filetype_url": "#pandas", "aliases": "", "requirements": "pandas", "format": "all formats supported by pandas library", "loader": "yes", "VisiData saver": "", "version_added": "1.3", "created": "2008", "creator": "Wes McKinney", "description": "special adapter for the Python pandas library; anything pandas supports for loading", "open format": "", "nestable": "", "plottable": "", "format_url": "http://pandas-docs.github.io/pandas-docs-travis/user_guide/io.html"} +{"filetype": "pcap", "filetype_url": "#pcap", "aliases": "cap pcapng ntar", "requirements": "dpkt dnslib", "format": "network packet capture", "loader": "yes", "VisiData saver": "", "version_added": "1.3", "created": "1988", "creator": "LBNL", "description": "", "open format": "BSD", "nestable": "", "plottable": "", "format_url": "https://en.wikipedia.org/wiki/Pcap"} +{"filetype": "pyprof", "aliases": "", "requirements": "", "format": "Python Profile data", "loader": "yes", "VisiData saver": "", "version_added": "1.3", "created": "", "creator": "", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://stackoverflow.com/questions/1896032/using-cprofile-results-with-kcachegrind"} +{"filetype": "xml", "filetype_url": "#xml", "aliases": "", "requirements": "lxml", "format": "eXtensible Markup Language (XML)", "loader": "yes", "VisiData saver": "from xml", "version_added": "1.3", "created": "1998", "creator": "W3C", "description": "", "open format": "yes", "nestable": "nestable", "plottable": "", "format_url": "https://www.w3.org/TR/REC-xml/"} +{"filetype": "yaml", "aliases": "yml", "requirements": "PyYAML", "format": "YAML Ain't Markup Language (YAML)", "loader": "yes", "VisiData saver": "", "version_added": "1.3", "created": "2001", "creator": "Clark Evans", "description": "minimal text syntax", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://yaml.org/"} +{"filetype": "frictionless", "aliases": "", "requirements": "datapackage", "format": "Frictionless Data", "loader": "yes", "VisiData saver": "", "version_added": "2.0", "created": "", "creator": "OpenKnowledge Institute", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://frictionlessdata.io/"} +{"filetype": "jira", "aliases": "", "requirements": "", "format": "JIRA/Confluence table markup", "loader": " ", "VisiData saver": "displayed text", "version_added": "2.0", "created": "", "creator": "Atlassian", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html#ConfluenceWikiMarkup-Tables"} +{"filetype": "npy", "aliases": "npz", "requirements": "numpy", "format": "NumPy array format", "loader": "yes", "VisiData saver": "typed", "version_added": "2.0", "created": "", "creator": "", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://numpy.org/doc/stable/reference/generated/numpy.lib.format.html"} +{"filetype": "tar", "aliases": "tbz2 tgz txz", "format": "Unix Tape Archive", "loader": "yes", "VisiData saver": "", "version_added": "2.0", "open format": "yes"} +{"filetype": "usv", "aliases": "", "requirements": "", "format": "Unicode-Separated Value", "loader": "yes", "VisiData saver": "displayed text", "version_added": "2.0", "created": "1993", "creator": "Unicode", "description": "", "open format": "yes", "nestable": "", "plottable": "", "format_url": "https://codepoints.net/U+241E"} +{"filetype": "xlsb", "aliases": "", "requirements": "xlrd", "format": "Excel binary format", "loader": "yes", "VisiData saver": "", "version_added": "2.0", "created": "", "creator": "Microsoft", "description": "", "open format": "no", "nestable": "", "plottable": "", "format_url": ""} +{"filetype": "mysql", "requirements": "MySQLdb", "format": "MySQL", "loader": "yes", "version_added": "2.0", "created": "1995", "creator": "MySQL AB", "open format": "yes", "format_url": "https://github.com/mysql/mysql-server"} +{"filetype": "pdf", "requirements": "pdfminer.six", "format": "Portable Document Format", "loader": "yes", "VisiData saver": "", "version_added": "2.0", "created": "1993", "creator": "Adobe", "description": "", "open format": "yes", "format_url": "https://en.wikipedia.org/wiki/PDF"} +{"filetype": "vcf", "format": "Virtual Contact File (vCard)", "loader": "yes", "version_added": "2.0", "created": "1995", "creator": "Versit Consortium", "open format": "yes", "format_url": "https://tools.ietf.org/html/rfc6350"} +{"filetype": "rec", "format": "recutils database file", "loader": "yes", "VisiData saver": "displayed text", "version_added": "2.0", "created": "2010", "creator": "Jose E. Marchesi", "description": "human-editable, plain text database", "open format": "yes", "format_url": "https://www.gnu.org/software/recutils/"} +{"filetype": "eml", "format": "Multipurpose Internet Mail Extensions (MIME)", "loader": "yes", "version_added": "2.0", "created": "1996", "creator": "Nathaniel Borenstein and Ned Freed", "open format": "yes", "format_url": "https://tools.ietf.org/html/rfc2045"} +{"filetype": "arrow", "requirements": "pyarrow", "format": "Arrow IPC file format", "loader": "yes", "version_added": "2.9", "created": "2016", "creator": "Apache Software Foundation", "open format": "yes", "format_url": "https://arrow.apache.org/docs/format/Columnar.html"} +{"filetype": "arrows", "requirements": "pyarrow", "format": "Arrow IPC streaming format", "loader": "yes", "version_added": "2.9", "created": "2016", "creator": "Apache Software Foundation", "open format": "yes", "format_url": "https://arrow.apache.org/docs/format/Columnar.html"} +{"filetype": "parquet", "requirements": "pyarrow or pandas", "format": "Apache Parquet", "loader": "yes", "version_added": "1.3", "created": "2013", "creator": "Apache Software Foundation", "open format": "yes", "format_url": "https://parquet.apache.org/"} diff --git a/dev/formats.vd b/dev/formats.vd index e8be11fd6..9b3e5a82b 100644 --- a/dev/formats.vd +++ b/dev/formats.vd @@ -4,8 +4,8 @@ sheet col row longname input keystrokes comment formats aliases hide-col - hide current column formats requirements rename-col PyPI dependencies ^ edit name of current column formats PyPI dependencies slide-rightmost gL slide current column all the way to the right of sheet -formats VisiData loader 0 select-equal-cell , select rows matching current cell in current column -formats VisiData loader setcol-expr version_added g= set current column for selected rows to result of Python expression +formats loader 0 select-equal-cell , select rows matching current cell in current column +formats loader setcol-expr version_added g= set current column for selected rows to result of Python expression formats unselect-rows gu unselect all rows formats version_added hide-col - hide current column formats description hide-col - hide current column From 56753382910d7e80a277d92d2d8edecec9255397 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 2 Jan 2023 14:33:17 -0800 Subject: [PATCH 41/98] [join append] simple append for sheets of same type #1598 Using `append` join with sheets of the same type copies the first sheet and creates a new rowset with a concatenation the original rows, instead of creating a special ConcatSheet. --- visidata/join.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/visidata/join.py b/visidata/join.py index 4f887d6ec..59c5499e5 100644 --- a/visidata/join.py +++ b/visidata/join.py @@ -8,7 +8,18 @@ @VisiData.api def ensureLoaded(vd, sheets): threads = [vs.ensureLoaded() for vs in sheets] - vd.status('loading %d sheets' % len([t for t in threads if t])) + threads = [t for t in threads if t] + vd.status('loading %d sheets' % len(threads)) + return threads + + +@asyncthread +def _appendRowsAfterLoading(joinsheet, origsheets): + if vd.ensureLoaded(origsheets): + vd.sync() + + for vs in origsheets: + joinsheet.rows.extend(vs.rows) @Sheet.api @@ -18,7 +29,19 @@ def openJoin(sheet, others, jointype=''): sheets[1:] or vd.fail("join requires more than 1 sheet") if jointype == 'append': - return ConcatSheet('&'.join(vs.name for vs in sheets), source=sheets) + name = '&'.join(vs.name for vs in sheets) + sheettypes = set(type(vs) for vs in sheets) + if len(sheettypes) == 1: # only one type of sheet #1598 + joinsheet = copy(sheet) + joinsheet.name = name + joinsheet.rows = [] + joinsheet.source = sheets + + _appendRowsAfterLoading(joinsheet, sheets) + + return joinsheet + + return ConcatSheet(name, source=sheets) for s in sheets: s.keyCols or vd.fail(f'{s.name} has no key cols to join') From 7d95f06153756194e55c84bd90b5fdfc4fdf400c Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 2 Jan 2023 17:11:07 -0800 Subject: [PATCH 42/98] [html] make relative links absolute #1599 --- visidata/loaders/html.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/visidata/loaders/html.py b/visidata/loaders/html.py index 8bbd273e4..79bce17c1 100644 --- a/visidata/loaders/html.py +++ b/visidata/loaders/html.py @@ -1,4 +1,5 @@ import html +import urllib.parse import copy import itertools @@ -12,6 +13,7 @@ def open_html(vd, p): VisiData.open_htm = VisiData.open_html + class HtmlTablesSheet(IndexSheet): rowtype = 'sheets' # rowdef: HtmlTableSheet (sheet.html = lxml.html.HtmlElement) columns = IndexSheet.columns + [ @@ -74,7 +76,7 @@ def iterload(self): row = copy.copy(r.attrib) row['__element__'] = r if row.get('href'): - row['href'] = canonicalize_url(row.get('href'), self.source.URL) + row['href'] = urllib.parse.urljoin(self.source.URL, row.get('href')) yield row @@ -107,7 +109,7 @@ def iterload(self): colspan = int(cell.attrib.get('colspan', 1)) rowspan = int(cell.attrib.get('rowspan', 1)) cellval = ' '.join(x.strip() for x in cell.itertext()) # text only without markup - links = [x.get('href') for x in cell.iter('a')] + links = [urllib.parse.urljoin(self.source.base_url, x.get('href')) for x in cell.iter('a')] maxlinks[colnum] = max(maxlinks.get(colnum, 0), len(links)) if is_header(cell): From d9a53e3d0a494a61a468242554d0a3f07f739d1d Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 2 Jan 2023 17:27:33 -0800 Subject: [PATCH 43/98] [macros-] override CLI parsing options for MacrosSheet #1607 --- visidata/_open.py | 2 +- visidata/macros.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/visidata/_open.py b/visidata/_open.py index 1953527fa..7b9c727e4 100644 --- a/visidata/_open.py +++ b/visidata/_open.py @@ -121,7 +121,7 @@ def open_txt(vd, p): @VisiData.api def loadInternalSheet(vd, cls, p, **kwargs): - 'Load internal sheet of given class. Internal sheets are always tsv.' + 'Load internal sheet of given class.' vs = cls(p.name, source=p, **kwargs) options._set('encoding', 'utf8', vs) if p.exists(): diff --git a/visidata/macros.py b/visidata/macros.py index 0f2258644..a7bb93ac3 100644 --- a/visidata/macros.py +++ b/visidata/macros.py @@ -6,10 +6,11 @@ vd.macroMode = None vd.macrobindings = {} + @VisiData.lazy_property def macrosheet(vd): macrospath = Path(os.path.join(options.visidata_dir, 'macros.tsv')) - macrosheet = vd.loadInternalSheet(TsvSheet, macrospath, columns=(ColumnItem('command', 0), ColumnItem('filename', 1))) or vd.error('error loading macros') + macrosheet = vd.loadInternalSheet(VisiDataMetaSheet, macrospath, columns=(ColumnItem('command', 0), ColumnItem('filename', 1))) or vd.error('error loading macros') real_macrosheet = IndexSheet('user_macros', rows=[], source=macrosheet) for ks, fn in macrosheet.rows: From 7974c2ef3243a1bf181ec0ebee4b84e42e6afb1d Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 2 Jan 2023 21:32:14 -0800 Subject: [PATCH 44/98] [join-] add new "concat" jointype to act like "append" but keep first sheet type and columns #1598 - changed the descriptions of jointypes to be more regular - new "concat" jointype is misnamed; probably "concat" and "append" should swap semantics --- visidata/join.py | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/visidata/join.py b/visidata/join.py index 59c5499e5..7a6f6fd79 100644 --- a/visidata/join.py +++ b/visidata/join.py @@ -18,8 +18,14 @@ def _appendRowsAfterLoading(joinsheet, origsheets): if vd.ensureLoaded(origsheets): vd.sync() + colnames = {c.name:c for c in joinsheet.visibleCols} for vs in origsheets: joinsheet.rows.extend(vs.rows) + for c in vs.visibleCols: + if c.name not in colnames: + newcol = copy(c) + colnames[c.name] = newcol + joinsheet.addColumn(newcol) @Sheet.api @@ -28,19 +34,23 @@ def openJoin(sheet, others, jointype=''): sheets[1:] or vd.fail("join requires more than 1 sheet") - if jointype == 'append': + if jointype == 'concat': name = '&'.join(vs.name for vs in sheets) sheettypes = set(type(vs) for vs in sheets) - if len(sheettypes) == 1: # only one type of sheet #1598 - joinsheet = copy(sheet) - joinsheet.name = name - joinsheet.rows = [] - joinsheet.source = sheets + if len(sheettypes) != 1: # only one type of sheet #1598 + vd.fail(f'only same sheet types can be concat-joined; use "append"') - _appendRowsAfterLoading(joinsheet, sheets) + joinsheet = copy(sheet) + joinsheet.name = name + joinsheet.rows = [] + joinsheet.source = sheets - return joinsheet + _appendRowsAfterLoading(joinsheet, sheets) + return joinsheet + + elif jointype == 'append': + name = '&'.join(vs.name for vs in sheets) return ConcatSheet(name, source=sheets) for s in sheets: @@ -56,12 +66,13 @@ def openJoin(sheet, others, jointype=''): vd.jointypes = [{'key': k, 'desc': v} for k, v in { - 'inner': 'only rows which match keys on all sheets', - 'outer': 'all rows from first selected sheet', + 'inner': 'only rows with matching keys on all sheets', + 'outer': 'only rows with matching keys on first selected sheet', 'full': 'all rows from all sheets (union)', 'diff': 'only rows NOT in all sheets', - 'append': 'columns all sheets; extend with rows from all sheets', - 'extend': 'only rows from first sheet; extend with columns from all sheets', + 'append': 'all rows from all sheets; columns from all sheets', + 'concat': 'all rows from all sheets; columns and type from first sheet', + 'extend': 'only rows from first sheet; type from first sheet; columns from all sheets', 'merge': 'merge differences from other sheets into first sheet', }.items()] From 5633fcd24512cfec0a8e5a56dcda6e8bac49fea9 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Mon, 2 Jan 2023 21:30:36 -0800 Subject: [PATCH 45/98] [sheets] sort all sheets on global Sheets Sheet Global Sheets Sheet only has precious sheets, so it is not self-referential. This means the standard sheet sort applies to it, it does not need to skip the reference to itself like the standard Sheets Sheet does. Closes #1620 --- visidata/sheets.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/visidata/sheets.py b/visidata/sheets.py index 3c2df2215..d1799a71b 100644 --- a/visidata/sheets.py +++ b/visidata/sheets.py @@ -1011,6 +1011,10 @@ def reload(self): def sort(self): self.rows[1:] = sorted(self.rows[1:], key=self.sortkey) +class GlobalSheetsSheet(SheetsSheet): #1620 + def sort(self): + IndexSheet.sort(self) + @VisiData.property @drawcache def _evalcontexts(vd): @@ -1067,7 +1071,7 @@ def push(vd, vs, pane=0, load=True): @VisiData.lazy_property def allSheetsSheet(vd): - return SheetsSheet("sheets_all", source=vd.allSheets) + return GlobalSheetsSheet("sheets_all", source=vd.allSheets) @VisiData.lazy_property def sheetsSheet(vd): From ec1065cf95ab25faf50b06cb164d6a0032b1b0aa Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Tue, 3 Jan 2023 13:56:03 -0800 Subject: [PATCH 46/98] [LazyChainMap-] add get() method #1317 --- visidata/basesheet.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/visidata/basesheet.py b/visidata/basesheet.py index a371e8499..5bd413463 100644 --- a/visidata/basesheet.py +++ b/visidata/basesheet.py @@ -25,6 +25,11 @@ def __contains__(self, k): def keys(self): return list(self.objs.keys()) # sum(set(dir(obj)) for obj in self.objs)) + def get(self, key, default=None, /): + if key in self.locals: + return self.locals[key] + return self.objs.get(key, default) + def clear(self): self.locals.clear() From 250fa3fdeafa234af2d747147b221ec93c3ecc1c Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Tue, 3 Jan 2023 14:00:52 -0800 Subject: [PATCH 47/98] [LazyChainMap-] remove / from get() method #1317 --- visidata/basesheet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/basesheet.py b/visidata/basesheet.py index 5bd413463..c00050219 100644 --- a/visidata/basesheet.py +++ b/visidata/basesheet.py @@ -25,7 +25,7 @@ def __contains__(self, k): def keys(self): return list(self.objs.keys()) # sum(set(dir(obj)) for obj in self.objs)) - def get(self, key, default=None, /): + def get(self, key, default=None): if key in self.locals: return self.locals[key] return self.objs.get(key, default) From 46061960c9355cd90df77c3f422acf75449f6361 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Tue, 3 Jan 2023 14:46:11 -0800 Subject: [PATCH 48/98] [macros-] remove extra debug status --- visidata/macros.py | 1 - 1 file changed, 1 deletion(-) diff --git a/visidata/macros.py b/visidata/macros.py index a7bb93ac3..209d28ded 100644 --- a/visidata/macros.py +++ b/visidata/macros.py @@ -22,7 +22,6 @@ def macrosheet(vd): else: vd.warning(f'failed to load macro {fn}') continue - vd.status(f"setting {ks}") setMacro(ks, vs) real_macrosheet.addRow(vs) From 5e31831b029b1a1646ad26be96ef0fe6e4a5c5ec Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Tue, 3 Jan 2023 14:58:14 -0800 Subject: [PATCH 49/98] [cliptext] show disp_oddspace for surrogate escapes #1544 --- visidata/cliptext.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/cliptext.py b/visidata/cliptext.py index 6e9273728..ad28e172f 100644 --- a/visidata/cliptext.py +++ b/visidata/cliptext.py @@ -71,7 +71,7 @@ def _dispch(c, oddspacech=None, combch=None, modch=None): if ccat in ['Mn', 'Sk', 'Lm']: if unicodedata.name(c).startswith('MODIFIER'): return modch, 1 - elif c != ' ' and ccat in ('Cc', 'Zs', 'Zl'): # control char, space, line sep + elif c != ' ' and ccat in ('Cc', 'Zs', 'Zl', 'Cs'): # control char, space, line sep, surrogate return oddspacech, 1 elif c in ZERO_WIDTH_CF: return combch, 1 From ac89423404dd0ec3d9b34ba7442d12089ddf3fc0 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Tue, 3 Jan 2023 15:24:37 -0800 Subject: [PATCH 50/98] [hdf5-] load array of scalars #1602 - handled differently than array of compound datatype --- visidata/loaders/hdf5.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/visidata/loaders/hdf5.py b/visidata/loaders/hdf5.py index 636456d26..64f2010dc 100644 --- a/visidata/loaders/hdf5.py +++ b/visidata/loaders/hdf5.py @@ -1,4 +1,4 @@ -from visidata import VisiData, vd, Sheet, Path, Column, ColumnItem, BaseSheet +from visidata import VisiData, vd, Sheet, Path, Column, ItemColumn, BaseSheet @VisiData.api def open_h5(vd, p): @@ -27,19 +27,24 @@ def iterload(self): yield Hdf5ObjSheet(self.name, k, source=v) elif isinstance(source, h5py.Dataset): if len(source.shape) == 1: - for i, colname in enumerate(source.dtype.names or [0]): - self.addColumn(ColumnItem(colname, colname), index=i) - yield from source # copy + if source.dtype.names: + for i, colname in enumerate(source.dtype.names): + self.addColumn(ItemColumn(colname, colname), index=i) + yield from source # copy + else: + self.addColumn(ItemColumn(source.name, 0)) + for v in source: + yield [v] elif len(source.shape) == 2: # matrix ncols = source.shape[1] for i in range(ncols): - self.addColumn(ColumnItem('', i, width=8), index=i) + self.addColumn(ItemColumn('', i, width=8), index=i) self.recalc() yield from source # copy else: - vd.status('too many dimensions in shape %s' % str(source.shape)) + vd.fail('too many dimensions in shape %s' % str(source.shape)) else: - vd.status('unknown h5 object type %s' % type(source)) + vd.fail('unknown h5 object type %s' % type(source)) def openRow(self, row): From 4aa3ae2974e96f17045fc761bb0b627a0b639eb4 Mon Sep 17 00:00:00 2001 From: midichef <67946319+midichef@users.noreply.github.com> Date: Thu, 5 Jan 2023 02:49:51 -0800 Subject: [PATCH 51/98] Fix typo --- visidata/layout.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/layout.py b/visidata/layout.py index d4bf3d69d..744c20f63 100644 --- a/visidata/layout.py +++ b/visidata/layout.py @@ -33,7 +33,7 @@ def unhide_cols(vd, cols, rows): Sheet.addCommand('_', 'resize-col-max', 'cursorCol.toggleWidth(cursorCol.getMaxWidth(visibleRows))', 'toggle width of current column between full and default width'), Sheet.addCommand('z_', 'resize-col-input', 'width = int(input("set width= ", value=cursorCol.width)); cursorCol.setWidth(width)', 'adjust width of current column to N') -Sheet.addCommand('g_', 'resize-cols-max', 'for c in visibleCols: c.setWidth(c.getMaxWidth(visibleRows))', 'toggle widths of all visible clumns between full and default width'), +Sheet.addCommand('g_', 'resize-cols-max', 'for c in visibleCols: c.setWidth(c.getMaxWidth(visibleRows))', 'toggle widths of all visible columns between full and default width'), Sheet.addCommand('gz_', 'resize-cols-input', 'width = int(input("set width= ", value=cursorCol.width)); Fanout(visibleCols).setWidth(width)', 'adjust widths of all visible columns to N') Sheet.addCommand('-', 'hide-col', 'cursorCol.hide()', 'Hide current column') From fd05f128027b897cbb5458643ad8e1c0e973d882 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Thu, 5 Jan 2023 15:24:40 -0800 Subject: [PATCH 52/98] [dirsheet-] use internal PathLike.name instead of reconstructing #1571 --- visidata/shell.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/shell.py b/visidata/shell.py index 958bd39ea..a40b215b2 100644 --- a/visidata/shell.py +++ b/visidata/shell.py @@ -82,7 +82,7 @@ class DirSheet(Sheet): getter=lambda col,row: str(row.parent) if str(row.parent) == '.' else str(row.parent) + '/', setter=lambda col,row,val: col.sheet.moveFile(row, val)), Column('filename', - getter=lambda col,row: row.name + ''.join(row.suffixes), + getter=lambda col,row: row._path.name, setter=lambda col,row,val: col.sheet.renameFile(row, val)), Column('abspath', width=0, type=str, getter=lambda col,row: row, From c7a0eae8679af94a48bd002ef49db3afe0f7d40d Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Thu, 5 Jan 2023 16:08:44 -0800 Subject: [PATCH 53/98] [columns-] SettableColumn should not be deferred #1568 - add Column.defer attribute - non-deferred columns are set immediately, even on deferred sheets - columns added during load share sheet.defer; user-added columns are not deferred - goes with f047e4c54 --- visidata/column.py | 7 ++++--- visidata/sheets.py | 10 +++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/visidata/column.py b/visidata/column.py index f9fbf67f6..c6682e92b 100644 --- a/visidata/column.py +++ b/visidata/column.py @@ -103,6 +103,7 @@ def __init__(self, name=None, *, type=anytype, cache=False, **kwargs): self.keycol = 0 # keycol index (or 0 if not key column) self.expr = None # Column-type-dependent parameter self.formatter = '' + self.defer = False self.setCache(cache) for k, v in kwargs.items(): @@ -296,7 +297,7 @@ def _calcIntoCache(self, row): def getValue(self, row): 'Return value for *row* in this column, calculating if not cached.' - if self.sheet.defer: + if self.defer: try: row, rowmods = self.sheet._deferredMods[self.sheet.rowid(row)] return rowmods[self] @@ -391,8 +392,8 @@ def putValue(self, row, val): return self.setter(self, row, val) def setValue(self, row, val): - 'Change value for *row* in this column to *val*. Call ``putValue`` immediately if parent ``sheet.defer`` is False, otherwise cache until later ``putChanges``. Caller must add undo function.' - if self.sheet.defer: + 'Change value for *row* in this column to *val*. Call ``putValue`` immediately if not a deferred column (added to deferred parent at load-time); otherwise cache until later ``putChanges``. Caller must add undo function.' + if self.defer: self.cellChanged(row, val) else: self.putValue(row, val) diff --git a/visidata/sheets.py b/visidata/sheets.py index d1799a71b..f6cdab024 100644 --- a/visidata/sheets.py +++ b/visidata/sheets.py @@ -494,13 +494,21 @@ def cursorRight(self, n=1): self.calcColLayout() def addColumn(self, *cols, index=None): - 'Insert all *cols* into columns at *index*, or append to end of columns if *index* is None. Return first column. Mark sheet as modified if *index* is not None.' + '''Insert all *cols* into columns at *index*, or append to end of columns if *index* is None. + If *index* is None, columns are being added by loader, instead of by user. + If added by user, mark sheet as modified. + Columns added by loader share sheet's defer status. + Columns added by user are not marked as deferred. + Return first column.''' if not cols: vd.warning('no columns to add') return if index is not None: self.setModified() + else: + for col in cols: + col.defer = self.defer for i, col in enumerate(cols): col.name = self.maybeClean(col.name) From 3f97a8b08de81053490559a5d345bdcf36f6ff50 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Thu, 5 Jan 2023 20:13:23 -0800 Subject: [PATCH 54/98] [unzip-http-] handle files smaller than 64k #1567 --- visidata/loaders/unzip_http.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/loaders/unzip_http.py b/visidata/loaders/unzip_http.py index 292d1ac84..478aaaa15 100644 --- a/visidata/loaders/unzip_http.py +++ b/visidata/loaders/unzip_http.py @@ -146,7 +146,7 @@ def infoiter(self): if cdir_start < 0 or cdir_start >= self.zip_size: error('cannot find central directory') - filehdr_index = 65536 - (self.zip_size - cdir_start) + filehdr_index = len(resp.data) - (self.zip_size - cdir_start) if filehdr_index < 0: resp = self.get_range(cdir_start, self.zip_size - cdir_start) From bdef0dba482861544ba26f23f0f4870029a425aa Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Thu, 5 Jan 2023 21:14:23 -0800 Subject: [PATCH 55/98] [sqlite] add passthrough options for connect() #1622 Query parameters from https://www.sqlite.org/uri.html are like `options.sqlite_param_mode`, for the `mode` parameter. Connection kwargs from https://docs.python.org/3/library/sqlite3.html#sqlite3.connect are like `options.sqlite_connect_isolation_level` for the `isolation_level` argument. For example, `options.sqlite_param_immutable=1` to indicate the medium is immutable, so it won't create .wal files even in readonly mode. --- visidata/loaders/sqlite.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/visidata/loaders/sqlite.py b/visidata/loaders/sqlite.py index a5373b513..8fc380aa1 100644 --- a/visidata/loaders/sqlite.py +++ b/visidata/loaders/sqlite.py @@ -3,6 +3,16 @@ from visidata import VisiData, vd, Sheet, options, Column, Progress, anytype, date, ColumnItem, asyncthread, TypedExceptionWrapper, TypedWrapper, IndexSheet, copy, currency, clean_to_id +def requery(url, **kwargs): + 'Return *url* with added or replaced query parameters from *kwargs*.' + from urllib.parse import urlencode, urlparse, parse_qsl, urlunparse + url_parts = list(urlparse(url)) + query = dict(parse_qsl(url_parts[4])) + query.update(kwargs) + url_parts[4] = urlencode(query) + return urlunparse(url_parts) + + @VisiData.api def open_sqlite(vd, p): return SqliteIndexSheet(p.name, source=p) @@ -26,7 +36,11 @@ def resolve(self): def conn(self): import sqlite3 - con = sqlite3.connect(str(self.resolve())) + pathname = str(self.resolve()) + url = pathname if '://' in pathname else f'file:{pathname}' + url = requery(url, **self.options.getall('sqlite_param_')) + + con = sqlite3.connect(url, uri=True, **self.options.getall('sqlite_connect_')) con.text_factory = lambda s, enc=self.options.encoding, encerrs=self.options.encoding_errors: s.decode(enc, encerrs) return con From 62caa353a8b793734497b96afd6f82670d4c2cb2 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Thu, 5 Jan 2023 22:32:44 -0800 Subject: [PATCH 56/98] [open_txt] check if file exists before probing for tsv --- visidata/_open.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/visidata/_open.py b/visidata/_open.py index 7b9c727e4..eb3a24761 100644 --- a/visidata/_open.py +++ b/visidata/_open.py @@ -110,13 +110,14 @@ def openSource(vd, p, filetype=None, create=False, **kwargs): @VisiData.api def open_txt(vd, p): 'Create sheet from `.txt` file at Path `p`, checking whether it is TSV.' - with p.open_text(encoding=vd.options.encoding) as fp: - try: - if options.delimiter in next(fp): # peek at the first line - return vd.open_tsv(p) # TSV often have .txt extension - except StopIteration: - return Sheet(p.name, columns=[SettableColumn()], source=p) - return TextSheet(p.name, source=p) + if p.exists(): #1611 + with p.open_text(encoding=vd.options.encoding) as fp: + try: + if options.delimiter in next(fp): # peek at the first line + return vd.open_tsv(p) # TSV often have .txt extension + except StopIteration: + return Sheet(p.name, columns=[SettableColumn()], source=p) + return TextSheet(p.name, source=p) @VisiData.api From 2f2c93cca406a80d070cef8b8dbf2cdfa4a4bc65 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Thu, 5 Jan 2023 22:36:40 -0800 Subject: [PATCH 57/98] [tests] since #1611 (62caa353a) tests do not need a .visidatarc --- .github/workflows/main.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2eef176be..95d79829d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,9 +24,6 @@ jobs: uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - - - name: Create .visidatarc - run: touch ~/.visidatarc - name: Set up Environment run: | From 9122c935eb0ff38437a57e8f444663876c16eebb Mon Sep 17 00:00:00 2001 From: midichef <67946319+midichef@users.noreply.github.com> Date: Fri, 6 Jan 2023 18:08:12 -0800 Subject: [PATCH 58/98] Speed up fill for sheets with many empty cells (#1657) --- visidata/fill.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/fill.py b/visidata/fill.py index 06c3889e2..ac390abc0 100644 --- a/visidata/fill.py +++ b/visidata/fill.py @@ -9,7 +9,7 @@ def fillNullValues(vd, col, rows): oldvals = [] # for undo isNull = col.sheet.isNullFunc() n = 0 - rowsToFill = [id(r) for r in rows] + rowsToFill = {id(r) for r in rows} for r in Progress(col.sheet.rows, 'filling'): # loop over all rows try: val = col.getValue(r) From 6553b8a5ec148f250f20a84018b25e51d0fd0237 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Fri, 6 Jan 2023 19:29:32 -0800 Subject: [PATCH 59/98] [tests] add smoketests for replaying macros #1652 --- .github/workflows/main.yml | 9 +++++++++ tests/macros/macro.vdj | 9 +++++++++ tests/macros/macros.tsv | 2 ++ tests/macros/test_macro.vd | 3 +++ 4 files changed, 23 insertions(+) create mode 100644 tests/macros/macro.vdj create mode 100644 tests/macros/macros.tsv create mode 100644 tests/macros/test_macro.vd diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 95d79829d..ca7839b22 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -49,7 +49,16 @@ jobs: run: dev/test.sh shell: bash + - name: Test macros + run: | + mkdir -p ~/.visidata + cp tests/macro* ~/.visidata/ + vd -p --batch tests/macros/test_macro.vd --output test_macro.tsv + git --no-pager diff --numstat tests/ + git --no-page diff --exit-code tests/ + - name: Check docs are built without errors run: | sudo apt install aha dev/mkman.sh + diff --git a/tests/macros/macro.vdj b/tests/macros/macro.vdj new file mode 100644 index 000000000..43963155c --- /dev/null +++ b/tests/macros/macro.vdj @@ -0,0 +1,9 @@ +#!vd -p +{"sheet": "", "col": "", "row": "", "longname": "macro-record", "input": "", "keystrokes": "m", "comment": "record macro"} +{"sheet": "", "col": "", "row": "", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} +{"sheet": "", "col": "", "row": "", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} +{"sheet": "", "col": "", "row": "", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} +{"sheet": "", "col": "", "row": "", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} +{"sheet": "", "col": "", "row": "", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} +{"sheet": "", "col": "", "row": "", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} +{"sheet": "", "col": "", "row": "", "longname": "dup-selected", "input": "", "keystrokes": "\"", "comment": "open duplicate sheet with only selected rows"} diff --git a/tests/macros/macros.tsv b/tests/macros/macros.tsv new file mode 100644 index 000000000..10ca3afa1 --- /dev/null +++ b/tests/macros/macros.tsv @@ -0,0 +1,2 @@ +command filename +1 ~/.visidata/macro.vdj diff --git a/tests/macros/test_macro.vd b/tests/macros/test_macro.vd new file mode 100644 index 000000000..5525e3e2b --- /dev/null +++ b/tests/macros/test_macro.vd @@ -0,0 +1,3 @@ +sheet col row longname input keystrokes comment + open-file sample_data/sample.tsv o open input in VisiData + macro 1 From 12668ddb4e80c5c74f8b89dd81058fa28b31ccd0 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Fri, 6 Jan 2023 19:38:01 -0800 Subject: [PATCH 60/98] [tests] fix github actions --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ca7839b22..4bd49d875 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -52,7 +52,7 @@ jobs: - name: Test macros run: | mkdir -p ~/.visidata - cp tests/macro* ~/.visidata/ + cp tests/macros/macro* ~/.visidata/ vd -p --batch tests/macros/test_macro.vd --output test_macro.tsv git --no-pager diff --numstat tests/ git --no-page diff --exit-code tests/ From 86f60dbb058bd442de1df97ee082682cb74dfc1e Mon Sep 17 00:00:00 2001 From: anjakefala Date: Fri, 6 Jan 2023 19:42:33 -0800 Subject: [PATCH 61/98] [tests] a .vd* must follow -p --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4bd49d875..189950b1e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -53,7 +53,7 @@ jobs: run: | mkdir -p ~/.visidata cp tests/macros/macro* ~/.visidata/ - vd -p --batch tests/macros/test_macro.vd --output test_macro.tsv + vd --batch -p tests/macros/test_macro.vd --output test_macro.tsv git --no-pager diff --numstat tests/ git --no-page diff --exit-code tests/ From 4966fb94c6d0cf3459eb5307523212f22b378756 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Fri, 6 Jan 2023 19:49:18 -0800 Subject: [PATCH 62/98] [tests] update golden --- .github/workflows/main.yml | 4 +-- tests/macros/golden/test_macro.tsv | 44 ++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 tests/macros/golden/test_macro.tsv diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 189950b1e..b9c39dafa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -53,9 +53,9 @@ jobs: run: | mkdir -p ~/.visidata cp tests/macros/macro* ~/.visidata/ - vd --batch -p tests/macros/test_macro.vd --output test_macro.tsv + vd --batch -p tests/macros/test_macro.vd --output tests/macros/golden/test_macro.tsv git --no-pager diff --numstat tests/ - git --no-page diff --exit-code tests/ + git --no-pager diff --exit-code tests/ - name: Check docs are built without errors run: | diff --git a/tests/macros/golden/test_macro.tsv b/tests/macros/golden/test_macro.tsv new file mode 100644 index 000000000..daf50fecd --- /dev/null +++ b/tests/macros/golden/test_macro.tsv @@ -0,0 +1,44 @@ +OrderDate Region Rep Item Units Unit_Cost Total +2016-01-06 East Jones Pencil 95 1.99 189.05 +2016-01-23 Central Kivell Binder 50 19.99 999.50 +2016-02-09 Central Jardine Pencil 36 4.99 179.64 +2016-02-26 Central Gill Pen 27 19.99 539.73 +2016-03-15 West Sorvino Pencil 56 2.99 167.44 +2016-04-01 East Jones Binder 60 4.99 299.40 +2016-04-18 Central Andrews Pencil 75 1.99 149.25 +2016-05-05 Central Jardine Pencil 90 4.99 449.10 +2016-05-22 West Thompson Pencil 32 1.99 63.68 +2016-06-08 East Jones Binder 60 8.99 539.40 +2016-06-25 Central Morgan Pencil 90 4.99 449.10 +2016-07-12 East Howard Binder 29 1.99 57.71 +2016-07-29 East Parent Binder 81 19.99 1619.19 +2016-08-15 East Jones Pencil 35 4.99 174.65 +2016-09-01 Central Smith Desk 2 125.00 250.00 +2016-09-18 East Jones Pen Set 16 15.99 255.84 +2016-10-05 Central Morgan Binder 28 8.99 251.72 +2016-10-22 East Jones Pen 64 8.99 575.36 +2016-11-08 East Parent Pen 15 19.99 299.85 +2016-11-25 Central Kivell Pen Set 96 4.99 479.04 +2016-12-12 Central Smith Pencil 67 1.29 86.43 +2016-12-29 East Parent Pen Set 74 15.99 1183.26 +2017-01-15 Central Gill Binder 46 8.99 413.54 +2017-02-01 Central Smith Binder 87 15.00 1305.00 +2017-02-18 East Jones Binder 4 4.99 19.96 +2017-03-07 West Sorvino Binder 7 19.99 139.93 +2017-03-24 Central Jardine Pen Set 50 4.99 249.50 +2017-04-10 Central Andrews Pencil 66 1.99 131.34 +2017-04-27 East Howard Pen 96 4.99 479.04 +2017-05-14 Central Gill Pencil 53 1.29 68.37 +2017-05-31 Central Gill Binder 80 8.99 719.20 +2017-06-17 Central Kivell Desk 5 125.00 625.00 +2017-07-04 East Jones Pen Set 62 4.99 309.38 +2017-07-21 Central Morgan Pen Set 55 12.49 686.95 +2017-08-07 Central Kivell Pen Set 42 23.95 1005.90 +2017-08-24 West Sorvino Desk 3 275.00 825.00 +2017-09-10 Central Gill Pencil 7 1.29 9.03 +2017-09-27 West Sorvino Pen 76 1.99 151.24 +2017-10-14 West Thompson Binder 57 19.99 1139.43 +2017-10-31 Central Andrews Pencil 14 1.29 18.06 +2017-11-17 Central Jardine Binder 11 4.99 54.89 +2017-12-04 Central Jardine Binder 94 19.99 1879.06 +2017-12-21 Central Andrews Binder 28 4.99 139.72 From e5a8428fd0f98d8188374172351b0096d06ee311 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Fri, 6 Jan 2023 19:54:35 -0800 Subject: [PATCH 63/98] [macros] try-again if keystroke already in use by a macro Closes #1658 --- visidata/macros.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/visidata/macros.py b/visidata/macros.py index 209d28ded..a188f348f 100644 --- a/visidata/macros.py +++ b/visidata/macros.py @@ -65,6 +65,8 @@ def afterExecSheet(cmdlog, sheet, escaped, err): def startMacro(cmdlog): if vd.macroMode: ks = vd.input('save macro for keystroke: ') + while ks in vd.macrobindings: + ks = vd.input(f'{ks} already in use; save macro for keystroke: ') vd.cmdlog.saveMacro(vd.macroMode.rows, ks) vd.macroMode = None else: From 53155ae65ae600efc7ddbf888362a3214f50bfcf Mon Sep 17 00:00:00 2001 From: anjakefala Date: Fri, 6 Jan 2023 21:35:26 -0800 Subject: [PATCH 64/98] [macros] do not include nonLogged commands in macro #1569 --- tests/macros/macro.vdj | 1 - visidata/macros.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/macros/macro.vdj b/tests/macros/macro.vdj index 43963155c..007585f17 100644 --- a/tests/macros/macro.vdj +++ b/tests/macros/macro.vdj @@ -1,5 +1,4 @@ #!vd -p -{"sheet": "", "col": "", "row": "", "longname": "macro-record", "input": "", "keystrokes": "m", "comment": "record macro"} {"sheet": "", "col": "", "row": "", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} {"sheet": "", "col": "", "row": "", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} {"sheet": "", "col": "", "row": "", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} diff --git a/visidata/macros.py b/visidata/macros.py index a188f348f..e243245de 100644 --- a/visidata/macros.py +++ b/visidata/macros.py @@ -52,7 +52,7 @@ def saveMacro(self, rows, ks): @CommandLogJsonl.api @wraps(CommandLogJsonl.afterExecSheet) def afterExecSheet(cmdlog, sheet, escaped, err): - if vd.macroMode and (vd.activeCommand is not None) and (vd.activeCommand is not UNLOADED): + if vd.macroMode and (vd.activeCommand is not None) and (vd.activeCommand is not UNLOADED) and (vd.isLoggableCommand(vd.activeCommand.longname)): cmd = copy(vd.activeCommand) cmd.row = cmd.col = cmd.sheet = '' vd.macroMode.addRow(cmd) From 246fe0cc294c7ec5479dbde127d8f43be42ca5f7 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Thu, 29 Dec 2022 15:28:01 -0800 Subject: [PATCH 65/98] [api] addGlobals can also take kwargs --- visidata/__init__.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/visidata/__init__.py b/visidata/__init__.py index c406b5c62..58b97fe9c 100644 --- a/visidata/__init__.py +++ b/visidata/__init__.py @@ -12,10 +12,12 @@ class EscapeException(BaseException): pass -def addGlobals(g): - '''Update the VisiData globals dict with items from *g*, which is a mapping of names to functions. +def addGlobals(*args, **kwargs): + '''Update the VisiData globals dict with items from *args* and *kwargs*, which are mappings of names to functions. Importers can call ``addGlobals(globals())`` to have their globals accessible to execstrings.''' - globals().update(g) + for g in args: + globals().update(g) + globals().update(kwargs) def getGlobals(): From e2a9bd0dad300e09f0a585155979111956420691 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Thu, 29 Dec 2022 15:13:16 -0800 Subject: [PATCH 66/98] [api] easier external numeric types #1394 - add vd.numericTypes mutable list - add @vd.numericType() decorator for external types - refactor floatsi into visidata.type_floatsi - refactor date into visidata.type_date - refactor currency into visidata.type_currency Now you can make e.g. `log10` a valid numeric type for a column: @vd.numericType('/') def log10(*args): if not args: return 0 return math.log10(*args) if args[0] > 0 else -10 Sheet.addCommand('', 'type-log10', 'cursorCol.type = log10') which might make it nicer to work with. --- visidata/__init__.py | 4 + visidata/_input.py | 1 - visidata/_types.py | 165 ++++------------------------------- visidata/canvas.py | 4 +- visidata/customdate.py | 3 +- visidata/help.py | 2 + visidata/loaders/archive.py | 4 +- visidata/loaders/arrow.py | 9 +- visidata/loaders/graphviz.py | 4 +- visidata/loaders/npy.py | 6 +- visidata/loaders/sqlite.py | 11 ++- visidata/loaders/xlsx.py | 4 +- visidata/save.py | 2 + visidata/sheets.py | 3 - visidata/shell.py | 3 +- visidata/type_currency.py | 16 ++++ visidata/type_date.py | 111 +++++++++++++++++++++++ visidata/type_floatsi.py | 35 ++++++++ 18 files changed, 219 insertions(+), 168 deletions(-) create mode 100644 visidata/type_currency.py create mode 100644 visidata/type_date.py create mode 100644 visidata/type_floatsi.py diff --git a/visidata/__init__.py b/visidata/__init__.py index 58b97fe9c..99ad187c7 100644 --- a/visidata/__init__.py +++ b/visidata/__init__.py @@ -63,6 +63,10 @@ def getGlobals(): import visidata._input import visidata.movement +import visidata.type_currency +import visidata.type_date +import visidata.type_floatsi + import visidata._urlcache import visidata.selection import visidata.loaders.tsv diff --git a/visidata/_input.py b/visidata/_input.py index 30a45a355..9181c086f 100644 --- a/visidata/_input.py +++ b/visidata/_input.py @@ -1,5 +1,4 @@ from contextlib import suppress -import collections import curses import visidata diff --git a/visidata/_types.py b/visidata/_types.py index d84e0f982..00874f358 100644 --- a/visidata/_types.py +++ b/visidata/_types.py @@ -1,24 +1,14 @@ -# VisiData uses Python native int, float, str, and adds simple date, currency, and anytype. +# VisiData uses Python native int, float, str, and adds simple anytype. -import collections -import functools -import datetime import locale from visidata import options, TypedWrapper, vd, VisiData #__all__ = ['anytype', 'vdtype', ] -vd.option('disp_currency_fmt', '%.02f', 'default fmtstr to format for currency values', replay=True) vd.option('disp_float_fmt', '{:.02f}', 'default fmtstr to format for float values', replay=True) vd.option('disp_int_fmt', '{:.0f}', 'default fmtstr to format for int values', replay=True) -vd.option('disp_date_fmt','%Y-%m-%d', 'default fmtstr to strftime for date values', replay=True) -try: - from dateutil.parser import parse as date_parse -except ImportError: - def date_parse(r=''): - vd.warning('install python-dateutil for date type') - return r +vd.numericTypes = [int,float] # VisiDataType .typetype are e.g. int, float, str, and used internally in these ways: # @@ -38,7 +28,8 @@ def anytype(r=None): anytype.__name__ = '' -def numericFormatter(fmtstr, typedval): +@VisiData.global_api +def numericFormatter(vd, fmtstr, typedval): try: fmtstr = fmtstr or options['disp_'+type(typedval).__name__+'_fmt'] if fmtstr[0] == '%': @@ -49,38 +40,20 @@ def numericFormatter(fmtstr, typedval): return str(typedval) -vd.si_prefixes='p n u m . kK M G T P Q'.split() - -def floatsi(*args): - if not args: - return 0.0 - if not isinstance(args[0], str): - return args[0] - - s=args[0].strip() - for i, p in enumerate(vd.si_prefixes): - if s[-1] in p: - return float(s[:-1]) * (1000 ** (i-4)) - - return float(s) - - -def SIFormatter(fmtstr, val): - level = 4 - if val != 0: - while abs(val) > 1000: - val /= 1000 - level += 1 - while abs(val) < 0.001: - val *= 1000 - level -= 1 - - return numericFormatter(fmtstr, val) + (vd.si_prefixes[level][0] if level != 4 else '') +@VisiData.api +def numericType(vd, icon='', fmtstr='', formatter=vd.numericFormatter): + '''Decorator for numeric types.''' + def _decorator(f): + vd.addType(f, icon=icon, fmtstr=fmtstr, formatter=formatter) + vd.numericTypes.append(f) + vd.addGlobals({f.__name__: f}) + return f + return _decorator class VisiDataType: 'Register *typetype* in the typemap.' - def __init__(self, typetype=None, icon=None, fmtstr='', formatter=numericFormatter, key='', name=None): + def __init__(self, typetype=None, icon=None, fmtstr='', formatter=vd.numericFormatter, key='', name=None): self.typetype = typetype or anytype # int or float or other constructor self.name = name or getattr(typetype, '__name__', str(typetype)) self.icon = icon # show in rightmost char of column @@ -89,7 +62,7 @@ def __init__(self, typetype=None, icon=None, fmtstr='', formatter=numericFormatt self.key = key @VisiData.api -def addType(vd, typetype=None, icon=None, fmtstr='', formatter=numericFormatter, key='', name=None): +def addType(vd, typetype=None, icon=None, fmtstr='', formatter=vd.numericFormatter, key='', name=None): '''Add type to type map. - *typetype*: actual type class *TYPE* above @@ -104,6 +77,7 @@ def addType(vd, typetype=None, icon=None, fmtstr='', formatter=numericFormatter, vdtype = vd.addType + # typemap [vtype] -> VisiDataType vd.typemap = {} @@ -121,17 +95,11 @@ def getType(vd, typetype): @VisiData.api def isNumeric(vd, col): - return col.type in (int,vlen,float,currency,date,floatsi,floatlocale) + return col.type in vd.numericTypes ## -floatchars='+-0123456789.' -def currency(*args): - 'dirty float (strip non-numeric characters)' - if args and isinstance(args[0], str): - args = [''.join(ch for ch in args[0] if ch in floatchars)] - return float(*args) - +@vd.numericType('%') def floatlocale(*args): 'Calculate float() using system locale set in LC_NUMERIC.' if not args: @@ -140,6 +108,7 @@ def floatlocale(*args): return locale.atof(*args) +@vd.numericType('♯', fmtstr='%.0f') class vlen(int): def __new__(cls, v=0): if isinstance(v, (vlen, int, float)): @@ -149,99 +118,3 @@ def __new__(cls, v=0): def __len__(self): return self - - -class date(datetime.datetime): - 'datetime wrapper, constructed from time_t or from str with dateutil.parse' - - def __new__(cls, *args, **kwargs): - 'datetime is immutable so needs __new__ instead of __init__' - if not args: - return datetime.datetime.now() - elif len(args) > 1: - return super().__new__(cls, *args, **kwargs) - - s = args[0] - if isinstance(s, int) or isinstance(s, float): - r = datetime.datetime.fromtimestamp(s) - elif isinstance(s, str): - r = date_parse(s) - elif isinstance(s, (datetime.datetime, datetime.date)): - r = s - else: - raise Exception('invalid type for date %s' % type(s).__name__) - - t = r.timetuple() - ms = getattr(r, 'microsecond', 0) - tzinfo = getattr(r, 'tzinfo', None) - return super().__new__(cls, *t[:6], microsecond=ms, tzinfo=tzinfo, **kwargs) - - def __lt__(self, b): - if isinstance(b, datetime.datetime): return datetime.datetime.__lt__(self, b) - elif isinstance(b, datetime.date): return not self.date().__eq__(b) and self.date().__lt__(b) - return NotImplemented - - def __gt__(self, b): - if isinstance(b, datetime.datetime): return datetime.datetime.__gt__(self, b) - elif isinstance(b, datetime.date): return not self.date().__eq__(b) and self.date().__gt__(b) - return NotImplemented - - def __le__(self, b): - if isinstance(b, datetime.datetime): return datetime.datetime.__le__(self, b) - elif isinstance(b, datetime.date): return self.date().__le__(b) - return NotImplemented - - def __ge__(self, b): - if isinstance(b, datetime.datetime): return datetime.datetime.__ge__(self, b) - elif isinstance(b, datetime.date): return self.date().__ge__(b) - return NotImplemented - - def __eq__(self, b): - if isinstance(b, datetime.datetime): return datetime.datetime.__eq__(self, b) - elif isinstance(b, datetime.date): return self.date().__eq__(b) - return NotImplemented - - def __str__(self): - return self.strftime(options.disp_date_fmt) - - def __hash__(self): - return super().__hash__() - - def __float__(self): - return self.timestamp() - - def __radd__(self, n): - return self.__add__(n) - - def __add__(self, n): - 'add n days (int or float) to the date' - if isinstance(n, (int, float)): - n = datetime.timedelta(days=n) - return date(super().__add__(n)) - - def __sub__(self, n): - 'subtract n days (int or float) from the date. or subtract another date for a timedelta' - if isinstance(n, (int, float)): - n = datetime.timedelta(days=n) - elif isinstance(n, (date, datetime.datetime)): - return datedelta(super().__sub__(n).total_seconds()/(24*60*60)) - return super().__sub__(n) - -class datedelta(datetime.timedelta): - def __float__(self): - return self.total_seconds() - -vdtype(vlen, '♯', '%.0f') -vdtype(floatlocale, '%') -vdtype(date, '@', '', formatter=lambda fmtstr,val: val.strftime(fmtstr or options.disp_date_fmt)) -vdtype(currency, '$') -vdtype(floatsi, '‱', formatter=SIFormatter) - -# simple constants, for expressions like 'timestamp+15*minutes' -years=365.25 -months=30.0 -weeks=7.0 -days=1.0 -hours=days/24 -minutes=days/(24*60) -seconds=days/(24*60*60) diff --git a/visidata/canvas.py b/visidata/canvas.py index 9b1a90bc5..bd783c234 100644 --- a/visidata/canvas.py +++ b/visidata/canvas.py @@ -1,7 +1,7 @@ import math import random -from collections import defaultdict, Counter +from collections import defaultdict, Counter, OrderedDict from visidata import * from visidata.bezier import bezier @@ -327,7 +327,7 @@ def __init__(self, *names, **kwargs): self.polylines = [] # list of ([(canvas_x, canvas_y), ...], attr, row) self.gridlabels = [] # list of (grid_x, grid_y, label, attr, row) - self.legends = collections.OrderedDict() # txt: attr (visible legends only) + self.legends = OrderedDict() # txt: attr (visible legends only) self.plotAttrs = {} # key: attr (all keys, for speed) self.reset() diff --git a/visidata/customdate.py b/visidata/customdate.py index befefd38f..b90e784ba 100644 --- a/visidata/customdate.py +++ b/visidata/customdate.py @@ -1,5 +1,6 @@ import time -from visidata import vd, date, Sheet, ColumnsSheet +from visidata import vd, Sheet, ColumnsSheet +from visidata.type_date import date @Sheet.api diff --git a/visidata/help.py b/visidata/help.py index a9ffc88a3..e43437ff3 100644 --- a/visidata/help.py +++ b/visidata/help.py @@ -1,3 +1,5 @@ +import functools +import collections from pkg_resources import resource_filename from visidata import * diff --git a/visidata/loaders/archive.py b/visidata/loaders/archive.py index 6e6073dda..8697192bd 100644 --- a/visidata/loaders/archive.py +++ b/visidata/loaders/archive.py @@ -1,10 +1,12 @@ import pathlib import tarfile import zipfile +import datetime from visidata.loaders import unzip_http from visidata import vd, VisiData, asyncthread, Sheet, Progress, Menu, options -from visidata import ColumnAttr, Column, date, datetime, Path +from visidata import ColumnAttr, Column, Path +from visidata.type_date import date @VisiData.api def open_zip(vd, p): diff --git a/visidata/loaders/arrow.py b/visidata/loaders/arrow.py index c346694f6..c6fe41898 100644 --- a/visidata/loaders/arrow.py +++ b/visidata/loaders/arrow.py @@ -1,6 +1,6 @@ from collections import defaultdict -from visidata import Sheet, VisiData, TypedWrapper, anytype, date, floatsi, currency, vlen, floatlocale, Column, vd +from visidata import Sheet, VisiData, TypedWrapper, anytype, date, vlen, Column, vd @@ -89,13 +89,14 @@ def save_arrow(vd, p, sheet, streaming=False): int: pa.int64(), vlen: pa.int64(), float: pa.float64(), - floatlocale: pa.float64(), - floatsi: pa.float64(), - currency: pa.float64(), str: pa.string(), date: pa.date64(), } + for t in vd.numericTypes: + if t not in typemap: + typemap[t] = pa.float64() + databycol = defaultdict(list) # col -> [values] for typedvals in sheet.iterdispvals(format=False): diff --git a/visidata/loaders/graphviz.py b/visidata/loaders/graphviz.py index a23b69958..3a05622ea 100644 --- a/visidata/loaders/graphviz.py +++ b/visidata/loaders/graphviz.py @@ -1,5 +1,5 @@ from visidata import vd, options, TypedWrapper, asyncthread, Progress -from visidata import wrapply, clean_to_id, VisiData, SIFormatter +from visidata import wrapply, clean_to_id, VisiData vd.option('graphviz_edge_labels', True, 'whether to include edge labels on graphviz diagrams') @@ -38,7 +38,7 @@ def save_dot(vd, p, vs): assignedColors[edgetype] = color if options.graphviz_edge_labels: - nodelabels = [wrapply(SIFormatter, '%0.1f', c.getTypedValue(row)) for c in vs.nonKeyVisibleCols if vd.isNumeric(c)] + nodelabels = [wrapply(vd.SIFormatter, '%0.1f', c.getTypedValue(row)) for c in vs.nonKeyVisibleCols if vd.isNumeric(c)] label = '/'.join(str(x) for x in nodelabels if is_valid(x)) else: label = '' diff --git a/visidata/loaders/npy.py b/visidata/loaders/npy.py index 86402de11..ae3618fe3 100644 --- a/visidata/loaders/npy.py +++ b/visidata/loaders/npy.py @@ -1,4 +1,4 @@ -from visidata import VisiData, vd, Sheet, date, anytype, options, Column, Progress, ColumnItem, vlen, PyobjSheet, currency, floatlocale, TypedWrapper, InferColumnsSheet +from visidata import VisiData, vd, Sheet, date, anytype, options, Column, Progress, ColumnItem, vlen, PyobjSheet, TypedWrapper, InferColumnsSheet 'Loaders for .npy and .npz. Save to .npy. Depends on the zip loader.' @@ -69,10 +69,10 @@ def save_npy(vd, p, sheet): for col in Progress(sheet.visibleCols): if col.type in (int, vlen): dt = 'i8' - elif col.type in (float, currency, floatlocale): - dt = 'f8' elif col.type is date: dt = 'datetime64[s]' + elif col.type in vd.numericTypes: + dt = 'f8' else: # if col.type in (str, anytype): width = col.getMaxWidth(sheet.rows) diff --git a/visidata/loaders/sqlite.py b/visidata/loaders/sqlite.py index 8fc380aa1..1e01a6599 100644 --- a/visidata/loaders/sqlite.py +++ b/visidata/loaders/sqlite.py @@ -1,7 +1,7 @@ import re -from visidata import VisiData, vd, Sheet, options, Column, Progress, anytype, date, ColumnItem, asyncthread, TypedExceptionWrapper, TypedWrapper, IndexSheet, copy, currency, clean_to_id - +from visidata import VisiData, vd, Sheet, options, Column, Progress, anytype, ColumnItem, asyncthread, TypedExceptionWrapper, TypedWrapper, IndexSheet, copy, clean_to_id, vlen +from visidata.type_date import date def requery(url, **kwargs): 'Return *url* with added or replaced query parameters from *kwargs*.' @@ -212,10 +212,15 @@ def save_sqlite(vd, p, *vsheets): sqltypes = { int: 'INTEGER', + vlen: 'INTEGER', float: 'REAL', - currency: 'REAL' + date: 'DATE', } + for t in vd.numericTypes: + if t not in sqltypes: + sqltypes[t] = 'REAL' + for vs in vsheets: vs.ensureLoaded() vd.sync() diff --git a/visidata/loaders/xlsx.py b/visidata/loaders/xlsx.py index 6ce01db10..a7bc87753 100644 --- a/visidata/loaders/xlsx.py +++ b/visidata/loaders/xlsx.py @@ -1,7 +1,9 @@ import itertools import copy +import datetime -from visidata import VisiData, vd, Sheet, Column, Progress, IndexSheet, ColumnAttr, SequenceSheet, AttrDict, AttrColumn, date, datetime +from visidata import VisiData, vd, Sheet, Column, Progress, IndexSheet, ColumnAttr, SequenceSheet, AttrDict, AttrColumn +from visidata.type_date import date vd.option('xlsx_meta_columns', False, 'include columns for cell objects, font colors, and fill colors', replay=True) diff --git a/visidata/save.py b/visidata/save.py index 70808d708..2ee0a0ad6 100644 --- a/visidata/save.py +++ b/visidata/save.py @@ -1,3 +1,5 @@ +import collections + from visidata import * diff --git a/visidata/sheets.py b/visidata/sheets.py index f6cdab024..232723cf2 100644 --- a/visidata/sheets.py +++ b/visidata/sheets.py @@ -1187,12 +1187,9 @@ def _async_deepcopy(newlist, oldlist): Sheet.addCommand('z~', 'type-any', 'cursorCol.type = anytype', 'set type of current column to anytype') Sheet.addCommand('~', 'type-string', 'cursorCol.type = str', 'set type of current column to str') -Sheet.addCommand('@', 'type-date', 'cursorCol.type = date', 'set type of current column to date') Sheet.addCommand('#', 'type-int', 'cursorCol.type = int', 'set type of current column to int') Sheet.addCommand('z#', 'type-len', 'cursorCol.type = vlen', 'set type of current column to len') -Sheet.addCommand('$', 'type-currency', 'cursorCol.type = currency', 'set type of current column to currency') Sheet.addCommand('%', 'type-float', 'cursorCol.type = float', 'set type of current column to float') -Sheet.addCommand('z%', 'type-floatsi', 'cursorCol.type = floatsi', 'set type of current column to SI float') Sheet.addCommand('', 'type-floatlocale', 'cursorCol.type = floatlocale', 'set type of current column to float using system locale set in LC_NUMERIC') # when diving into a sheet, remove the index unless it is precious diff --git a/visidata/shell.py b/visidata/shell.py index a40b215b2..a05fe274d 100644 --- a/visidata/shell.py +++ b/visidata/shell.py @@ -10,8 +10,9 @@ pass # pwd,grp modules not available on Windows from visidata import Column, Sheet, LazyComputeRow, asynccache, BaseSheet, vd -from visidata import Path, ENTER, date, asyncthread, FileExistsError, VisiData +from visidata import Path, ENTER, asyncthread, FileExistsError, VisiData from visidata import modtime, filesize, vstat, Progress, TextSheet +from visidata.type_date import date vd.option('dir_recurse', False, 'walk source path recursively on DirSheet') diff --git a/visidata/type_currency.py b/visidata/type_currency.py new file mode 100644 index 000000000..2c1a46974 --- /dev/null +++ b/visidata/type_currency.py @@ -0,0 +1,16 @@ +from visidata import vd, Sheet + +vd.option('disp_currency_fmt', '%.02f', 'default fmtstr to format for currency values', replay=True) + + +floatchars='+-0123456789.' + +@vd.numericType('$') +def currency(*args): + 'dirty float (strip non-numeric characters)' + if args and isinstance(args[0], str): + args = [''.join(ch for ch in args[0] if ch in floatchars)] + return float(*args) + + +Sheet.addCommand('$', 'type-currency', 'cursorCol.type = currency', 'set type of current column to currency') diff --git a/visidata/type_date.py b/visidata/type_date.py new file mode 100644 index 000000000..f83d984dd --- /dev/null +++ b/visidata/type_date.py @@ -0,0 +1,111 @@ +import datetime + +from visidata import vd, Sheet + +try: + from dateutil.parser import parse as date_parse +except ImportError: + def date_parse(r=''): + vd.warning('install python-dateutil for date type') + return r + + +vd.option('disp_date_fmt','%Y-%m-%d', 'default fmtstr to strftime for date values', replay=True) + + +@vd.numericType('@', '', formatter=lambda fmtstr,val: val.strftime(fmtstr or vd.options.disp_date_fmt)) +class date(datetime.datetime): + 'datetime wrapper, constructed from time_t or from str with dateutil.parse' + + def __new__(cls, *args, **kwargs): + 'datetime is immutable so needs __new__ instead of __init__' + if not args: + return datetime.datetime.now() + elif len(args) > 1: + return super().__new__(cls, *args, **kwargs) + + s = args[0] + if isinstance(s, int) or isinstance(s, float): + r = datetime.datetime.fromtimestamp(s) + elif isinstance(s, str): + r = date_parse(s) + elif isinstance(s, (datetime.datetime, datetime.date)): + r = s + else: + raise Exception('invalid type for date %s' % type(s).__name__) + + t = r.timetuple() + ms = getattr(r, 'microsecond', 0) + tzinfo = getattr(r, 'tzinfo', None) + return super().__new__(cls, *t[:6], microsecond=ms, tzinfo=tzinfo, **kwargs) + + def __lt__(self, b): + if isinstance(b, datetime.datetime): return datetime.datetime.__lt__(self, b) + elif isinstance(b, datetime.date): return not self.date().__eq__(b) and self.date().__lt__(b) + return NotImplemented + + def __gt__(self, b): + if isinstance(b, datetime.datetime): return datetime.datetime.__gt__(self, b) + elif isinstance(b, datetime.date): return not self.date().__eq__(b) and self.date().__gt__(b) + return NotImplemented + + def __le__(self, b): + if isinstance(b, datetime.datetime): return datetime.datetime.__le__(self, b) + elif isinstance(b, datetime.date): return self.date().__le__(b) + return NotImplemented + + def __ge__(self, b): + if isinstance(b, datetime.datetime): return datetime.datetime.__ge__(self, b) + elif isinstance(b, datetime.date): return self.date().__ge__(b) + return NotImplemented + + def __eq__(self, b): + if isinstance(b, datetime.datetime): return datetime.datetime.__eq__(self, b) + elif isinstance(b, datetime.date): return self.date().__eq__(b) + return NotImplemented + + def __str__(self): + return self.strftime(vd.options.disp_date_fmt) + + def __hash__(self): + return super().__hash__() + + def __float__(self): + return self.timestamp() + + def __radd__(self, n): + return self.__add__(n) + + def __add__(self, n): + 'add n days (int or float) to the date' + if isinstance(n, (int, float)): + n = datetime.timedelta(days=n) + return date(super().__add__(n)) + + def __sub__(self, n): + 'subtract n days (int or float) from the date. or subtract another date for a timedelta' + if isinstance(n, (int, float)): + n = datetime.timedelta(days=n) + elif isinstance(n, (date, datetime.datetime)): + return datedelta(super().__sub__(n).total_seconds()/(24*60*60)) + return super().__sub__(n) + + +class datedelta(datetime.timedelta): + def __float__(self): + return self.total_seconds() + + +# simple constants, for expressions like 'timestamp+15*minutes' +vd.addGlobals( + years=365.25, + months=30.0, + weeks=7.0, + days=1.0, + hours=1.0/24, + minutes=1.0/(24*60), + seconds=1.0/(24*60*60), + datedelta=datedelta) + + +Sheet.addCommand('@', 'type-date', 'cursorCol.type = date', 'set type of current column to date') diff --git a/visidata/type_floatsi.py b/visidata/type_floatsi.py new file mode 100644 index 000000000..f02874654 --- /dev/null +++ b/visidata/type_floatsi.py @@ -0,0 +1,35 @@ +from visidata import VisiData, vd, Sheet + +vd.si_prefixes='p n u m . kK M G T P Q'.split() + + +@VisiData.api +def SIFormatter(vd, fmtstr, val): + level = 4 + if val != 0: + while abs(val) > 1000: + val /= 1000 + level += 1 + while abs(val) < 0.001: + val *= 1000 + level -= 1 + + return vd.numericFormatter(fmtstr, val) + (vd.si_prefixes[level][0] if level != 4 else '') + + +@vd.numericType('‱', formatter=vd.SIFormatter) +def floatsi(*args): + if not args: + return 0.0 + if not isinstance(args[0], str): + return args[0] + + s=args[0].strip() + for i, p in enumerate(vd.si_prefixes): + if s[-1] in p: + return float(s[:-1]) * (1000 ** (i-4)) + + return float(s) + + +Sheet.addCommand('z%', 'type-floatsi', 'cursorCol.type = floatsi', 'set type of current column to SI float') From 1ee0a0a7565365ecaec5839bead040ca6ca7582b Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Thu, 29 Dec 2022 18:11:15 -0800 Subject: [PATCH 67/98] [customdate-] add to numericTypes; set fmtstr on existing cols #1613 --- visidata/customdate.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/visidata/customdate.py b/visidata/customdate.py index b90e784ba..5062a7910 100644 --- a/visidata/customdate.py +++ b/visidata/customdate.py @@ -12,10 +12,12 @@ def __new__(cls, *args, **kwargs): return super().__new__(cls, *time.strptime(args[0], fmtstr)[:6]) return super().__new__(cls, *args, **kwargs) - vd.addType(_customdate, '@', '', formatter=lambda fmt,val: val.strftime(fmt or sheet.options.disp_date_fmt)) _customdate.__name__ = 'customdate(%s)' % fmtstr + + vd.addType(_customdate, '@', '', formatter=lambda fmt,val: val.strftime(fmt or sheet.options.disp_date_fmt)) + vd.numericTypes.append(_customdate) return _customdate -Sheet.addCommand('z@', 'type-customdate', 'cursorCol.type=customdate(input("date format: ", type="fmtstr"))', 'set type of current column to custom date format') -ColumnsSheet.addCommand('gz@', 'type-customdate-selected', 'onlySelectedRows.type=customdate(input("date format: ", type="fmtstr"))', 'set type of selected columns to date') +Sheet.addCommand('z@', 'type-customdate', 'fmt=input("date format: ", type="fmtstr"); cursorCol.type=customdate(fmt); cursorCol.fmtstr=fmt', 'set type of current column to custom date format') +ColumnsSheet.addCommand('gz@', 'type-customdate-selected', 'fmt=input("date format: ", type="fmtstr"); onlySelectedRows.type=customdate(fmt); onlySelectedRows.fmtstr=fmt', 'set type of selected columns to date') From 1bf82a42a473067d07fdd655b7682702076e267c Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Fri, 6 Jan 2023 21:04:37 -0800 Subject: [PATCH 68/98] [keys-] add kDN/kUP to translation table #1336 --- visidata/keys.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/visidata/keys.py b/visidata/keys.py index 94387749b..0318ef84b 100644 --- a/visidata/keys.py +++ b/visidata/keys.py @@ -18,6 +18,8 @@ 'KEY_PPAGE': 'PgUp', 'KEY_NPAGE': 'PgDn', + 'kUP': 'Shift+Up', + 'kDN': 'Shift+Down', 'kUP5': 'Ctrl+Up', 'kDN5': 'Ctrl+Down', 'kLFT5': 'Ctrl+Left', From dc05e8e76edf1306f98136f234d7a2d86866b290 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Sat, 7 Jan 2023 21:59:23 -0800 Subject: [PATCH 69/98] [mouse-] look for registered onMouse on all screens #1625 --- visidata/mainloop.py | 49 +++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/visidata/mainloop.py b/visidata/mainloop.py index cb89daf69..dda3a6fb8 100644 --- a/visidata/mainloop.py +++ b/visidata/mainloop.py @@ -180,17 +180,9 @@ def runresult(vd): @VisiData.api def parseMouse(vd, **kwargs): - devid, x, y, z, bstate = curses.getmouse() + 'Return list of mouse interactions (clicktype, y, x, name, scr) for curses screens given in kwargs as name:scr.' - found = False - for winname, winscr in kwargs.items(): - py, px = winscr.getparyx() - mh, mw = winscr.getmaxyx() - if py <= y < py+mh and px <= x < px+mw: - y, x, = y-py, x-px - found = True - # vd.status('clicked at (%s, %s) in %s' % (y, x, winname)) - break + devid, x, y, z, bstate = curses.getmouse() clicktype = '' if bstate & curses.BUTTON_CTRL: @@ -205,10 +197,15 @@ def parseMouse(vd, **kwargs): keystroke = clicktype + curses.mouseEvents.get(bstate, str(bstate)) - if found: - return keystroke, y, x, winname, winscr + found = [] + for winname, winscr in kwargs.items(): + py, px = winscr.getparyx() + mh, mw = winscr.getmaxyx() + if py <= y < py+mh and px <= x < px+mw: + found.append((keystroke, y-py, x-px, winname, winscr)) +# vd.debug(f'{keystroke} at ({x-px}, {y-py}) in window {winname} {winscr}') - return keystroke, y, x, "whatwin", None + return found @VisiData.api @@ -262,8 +259,6 @@ def mainloop(self, scr): if keystroke == 'KEY_MOUSE': try: self.keystrokes = '' - keystroke, y, x, winname, winscr = vd.parseMouse(top=vd.winTop, bot=vd.winBottom, menu=vd.scrMenu) - pct = vd.windowConfig['pct'] topPaneActive = ((vd.activePane == 2 and pct < 0) or (vd.activePane == 1 and pct > 0)) bottomPaneActive = ((vd.activePane == 1 and pct < 0) or (vd.activePane == 2 and pct > 0)) @@ -272,17 +267,19 @@ def mainloop(self, scr): self.activePane = 1 if self.activePane == 2 else 2 sheet = self.activeSheet - f = self.getMouse(winscr, x, y, keystroke) - sheet.mouseX, sheet.mouseY = x, y - if f: - if isinstance(f, str): - for cmd in f.split(): - sheet.execCommand(cmd) - else: - f(y, x, keystroke) - - self.keystrokes = self.prettykeys(keystroke) - keystroke = '' # already handled + for keystroke, y, x, winname, winscr in vd.parseMouse(top=vd.winTop, bot=vd.winBottom, menu=vd.scrMenu): + f = self.getMouse(winscr, x, y, keystroke) + sheet.mouseX, sheet.mouseY = x, y + if f: + if isinstance(f, str): + for cmd in f.split(): + sheet.execCommand(cmd) + else: + f(y, x, keystroke) + + self.keystrokes = self.prettykeys(keystroke) + keystroke = '' # already handled + break # first successful command stops checking except curses.error: pass except Exception as e: From 544391f0348e137708af097bc35057a5e4fb0693 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Sat, 7 Jan 2023 22:00:05 -0800 Subject: [PATCH 70/98] [status-] open sheets-stack for left click on sheet name #1625 --- visidata/statusbar.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/visidata/statusbar.py b/visidata/statusbar.py index 07a2a07ce..edf6ad227 100644 --- a/visidata/statusbar.py +++ b/visidata/statusbar.py @@ -129,7 +129,8 @@ def drawLeftStatus(vd, scr, vs): x = clipdraw(scr, y, 0, lstatus, attr, w=vs.windowWidth-1) vd.onMouse(scr, y, 0, 1, x, - BUTTON1_PRESSED='sheets', + BUTTON1_PRESSED='sheets-stack', + BUTTON1_RELEASED='sheets-stack', BUTTON3_PRESSED='rename-sheet', BUTTON3_CLICKED='rename-sheet') except Exception as e: From 35ca095b5753120bfd20e698d91b73f73dcc174e Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sat, 7 Jan 2023 21:41:58 -0800 Subject: [PATCH 71/98] [macros] add reload for MacroSheet #1569 --- visidata/macros.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/visidata/macros.py b/visidata/macros.py index e243245de..675a47ea9 100644 --- a/visidata/macros.py +++ b/visidata/macros.py @@ -6,24 +6,32 @@ vd.macroMode = None vd.macrobindings = {} +class MacroSheet(IndexSheet): + + def reload(self): + self.rows = [] + vd.sync(self.source.reload()) + for ks, fn in self.source.rows: + fp = Path(fn) + if fp.ext == 'vd': + vs = vd.loadInternalSheet(CommandLog, fp) + elif fp.ext == 'vdj': + vs = vd.loadInternalSheet(CommandLogJsonl, fp) + else: + vd.warning(f'failed to load macro {fn}') + continue + setMacro(ks, vs) + self.addRow(vs) + + @VisiData.lazy_property def macrosheet(vd): macrospath = Path(os.path.join(options.visidata_dir, 'macros.tsv')) macrosheet = vd.loadInternalSheet(VisiDataMetaSheet, macrospath, columns=(ColumnItem('command', 0), ColumnItem('filename', 1))) or vd.error('error loading macros') - real_macrosheet = IndexSheet('user_macros', rows=[], source=macrosheet) - for ks, fn in macrosheet.rows: - fp = Path(fn) - if fp.ext == 'vd': - vs = vd.loadInternalSheet(CommandLog, fp) - elif fp.ext == 'vdj': - vs = vd.loadInternalSheet(CommandLogJsonl, fp) - else: - vd.warning(f'failed to load macro {fn}') - continue - setMacro(ks, vs) - real_macrosheet.addRow(vs) + real_macrosheet = MacroSheet('user_macros', rows=[], source=macrosheet) + real_macrosheet.reload() return real_macrosheet From dd0eecabf8604cd4cf1dbff971dececbbb4ce234 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sat, 7 Jan 2023 22:15:29 -0800 Subject: [PATCH 72/98] [macros] specificy macro is set to keybinding #1569 --- visidata/macros.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/visidata/macros.py b/visidata/macros.py index 675a47ea9..02db3b704 100644 --- a/visidata/macros.py +++ b/visidata/macros.py @@ -72,9 +72,9 @@ def afterExecSheet(cmdlog, sheet, escaped, err): @CommandLogJsonl.api def startMacro(cmdlog): if vd.macroMode: - ks = vd.input('save macro for keystroke: ') + ks = vd.input('set macro to keybinding: ') while ks in vd.macrobindings: - ks = vd.input(f'{ks} already in use; save macro for keystroke: ') + ks = vd.input(f'{ks} already in use; set macro to keybinding: ') vd.cmdlog.saveMacro(vd.macroMode.rows, ks) vd.macroMode = None else: From ca32ea1f55e7ec3c077d92f901b9b963e63ce7e7 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sun, 8 Jan 2023 18:51:12 -0800 Subject: [PATCH 73/98] [dev] update CHANGELOG --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad15c177f..829815711 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ - related to https://github.com/actions/setup-python/issues/543 - [dirsheet] add `open-dir-parent` (bound to `\``) +- [join] add new "concat" jointype to behave similar to "append" but + keeps first sheet type and columns (requested by @frosencrantz #1598) - [loaders zip] add multisave for `.zip` - saves all sheets into one `.zip` - [sysedit] add `sysedit-selected` (default: `g Ctrl+O`) (requested by @Delapouite #1596) @@ -16,23 +18,44 @@ - [aggregators] add 95 and 99 percentile - [frequency table] `dive-rows` becomes `dive-selected` +- [fill-col] speed up `fill-col` for sheets with many empty cells (PR by @midichef #1657) - [graph] fail if no numeric xcols are given +- [loaders hdf5] add support for arrays of scalars (requested by @linwaytin #1602) - [open-cell-files] warn when file or url in cell does not exist (requested by @geekscrapy #1540) - [tests] add testing support for Python 3.11 (#1585) ## Bugfixes - [columns] `dup-sheet` now carries over attributes of columns added by `add-column` +- [columns] **SettableColumn** should not be deferred (reported by @frosencrantz #1568) +- [customdate] recognise type-customdate as numeric (requested by @tdussa #1613) - [describe] fix custom describe aggregators (reported by @edupont #1574) +- [dirsheet] fix case where filenames with a `.` in them had parts + of the name after the `.` duplicated (reported by @kunliugithub #1571) +- [display] show `disp_oddspace` for surrogate escapes (reported by @geekscrapy #1544) - [install] ensure setuptools files have appropriate permissions (reported by @icp1994 #1591) +- [keystrokes] add `kDN` and `kUP` to translation table (reported by @djpohly #1336) +- [loaders html] fix loading of relative links in html table (reported by @frosencrantz #1599) - [loaders xlsx] store `Null` as empty string in `save_xlsx` (reported and PR by @dbaynard #1626 #1629) +- [macros] override CLI parsing options for MacrosSheet (reported by @frosencrantz #1607) +- [macros] query again for keystroke if used by existing macro (#1658) +- [macros] do not include `nonLogged` commands in macro (reported by @geekscrapy #1569) +- [macros] add reload for **MacroSheet** (reported by @geekscrapy #1569) +- [mouse] fix mouse-clicks on statusbar when splitpane is off (reported by @frosencrantz #1625)S +- [mouse] open `sheets-stack` for left on sheet name (reported by @frosencrantz #1625) +- [open_txt] fix Exception with `open-config` when no `~/.visidatarc` (reported by @gunchev #1611) +- [pdb] fix entering of pdb breakpoints for Python 3.9+ (reported by @jasonwirth #1317) +- [sheets] sort all sheets on global **Sheets Sheet** (reported by @franzhuang #1620) +- [sqlite] add passtrhough options for `connect()` (reported by @cwarden #1622) - [unzip-http] fix extraction +- [unzip-http] handle files smaller than 64K (reported by @frosencrantz #1567) - [zsh-completion] fixed (reported by @pigmonkey #1583; PR by @Freed-Wu #1646) ## API - fix Exception causes in utils.py (PR by @cool-RR #1633) - add `HistogramColumn` to allow overrides (requested by @andycraig #1621) +- easier external numeric types with `@vd.numericType()` decorator (inspired by s1291 #1394) # v2.10.2 (2022-10-XX) From 0c0bd1316e35d4e7e5ae7a2f269bcf65bcce4569 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Sun, 8 Jan 2023 17:02:40 -0800 Subject: [PATCH 74/98] [menu-] fix usage of parseMouse Related-to: dc05e8e76edf1306f98136f234d7a2d86866b290 --- visidata/menu.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/visidata/menu.py b/visidata/menu.py index 6e3fa29f6..530a3f0ea 100644 --- a/visidata/menu.py +++ b/visidata/menu.py @@ -753,15 +753,14 @@ def runMenu(vd): return elif k in ['KEY_MOUSE']: - keystroke, y, x, winname, winscr = vd.parseMouse(menu=vd.scrMenu, top=vd.winTop, bot=vd.winBottom) - if winname != 'menu': # clicking off the menu is an escape - return - f = vd.getMouse(winscr, x, y, keystroke) - if f: - if f(y, x, keystroke): - break - else: - return + for keystroke, y, x, winname, winscr in vd.parseMouse(menu=vd.scrMenu, top=vd.winTop, bot=vd.winBottom): + if winname == 'menu': + f = vd.getMouse(winscr, x, y, keystroke) + if f: + if f(y, x, keystroke): + break + else: + return # clicking off the menu is an escape elif k in ['KEY_RIGHT', 'l']: if currentItem.menus and sheet.activeMenuItems[1] != 0: # not first item From 689280814a631d843c41829b101af184b54fd14c Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 9 Jan 2023 17:06:46 -0800 Subject: [PATCH 75/98] [npy-] InferColumnsSheet does not work with sampledata #1440 --- visidata/loaders/npy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/loaders/npy.py b/visidata/loaders/npy.py index ae3618fe3..8003b2f7d 100644 --- a/visidata/loaders/npy.py +++ b/visidata/loaders/npy.py @@ -12,7 +12,7 @@ def open_npz(vd, p): vd.option('npy_allow_pickle', False, 'numpy allow unpickling objects (unsafe)') -class NpySheet(InferColumnsSheet): +class NpySheet(Sheet): def iterload(self): import numpy if not hasattr(self, 'npy'): From f0a811cc608c875f8fd89ccfed327e6af5e1ad8a Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Mon, 9 Jan 2023 22:19:50 -0800 Subject: [PATCH 76/98] [dev] edit CHANGELOG --- CHANGELOG.md | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 829815711..0f72cb8cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,28 +1,24 @@ # VisiData version history -# vX.X.X (2023-XX-XX) +# v2.11 (2023-01-XX) -- drop support for Python 3.6 - - related to https://github.com/actions/setup-python/issues/543 +- [ci] drop support for Python 3.6 (related to https://github.com/actions/setup-python/issues/543) +- [ci] add support for Python 3.11 (#1585) -- [dirsheet] add `open-dir-parent` (bound to `\``) -- [join] add new "concat" jointype to behave similar to "append" but - keeps first sheet type and columns (requested by @frosencrantz #1598) -- [loaders zip] add multisave for `.zip` - - saves all sheets into one `.zip` -- [sysedit] add `sysedit-selected` (default: `g Ctrl+O`) (requested by @Delapouite #1596) +- [dirsheet] add `open-dir-parent` (bound to backtick) +- [join] add new "concat" jointype to behave similar to "append" but keeps first sheet type and columns (requested by @frosencrantz #1598) +- [zip] add multisave for `.zip` (save each sheet in options.save_filetype format into given .zip file) +- [sysedit] add `sysedit-selected` (bound to `g Ctrl+O`) (requested by @Delapouite #1596) - edit cells in multiple rows in `$EDITOR` - - only handles cell modifications + - only handles cell modifications, not added or deleted rows ## Improvements -- [aggregators] add 95 and 99 percentile -- [frequency table] `dive-rows` becomes `dive-selected` +- [aggregators] add 95 and 99 percentile (p95 and p99) - [fill-col] speed up `fill-col` for sheets with many empty cells (PR by @midichef #1657) -- [graph] fail if no numeric xcols are given - [loaders hdf5] add support for arrays of scalars (requested by @linwaytin #1602) +- [graph] fail if no numeric xcols are given - [open-cell-files] warn when file or url in cell does not exist (requested by @geekscrapy #1540) -- [tests] add testing support for Python 3.11 (#1585) ## Bugfixes @@ -30,34 +26,34 @@ - [columns] **SettableColumn** should not be deferred (reported by @frosencrantz #1568) - [customdate] recognise type-customdate as numeric (requested by @tdussa #1613) - [describe] fix custom describe aggregators (reported by @edupont #1574) -- [dirsheet] fix case where filenames with a `.` in them had parts - of the name after the `.` duplicated (reported by @kunliugithub #1571) +- [dirsheet] fix incorrect filename with multiple extensions (reported by @kunliugithub #1571) - [display] show `disp_oddspace` for surrogate escapes (reported by @geekscrapy #1544) - [install] ensure setuptools files have appropriate permissions (reported by @icp1994 #1591) - [keystrokes] add `kDN` and `kUP` to translation table (reported by @djpohly #1336) - [loaders html] fix loading of relative links in html table (reported by @frosencrantz #1599) -- [loaders xlsx] store `Null` as empty string in `save_xlsx` (reported and PR by @dbaynard #1626 #1629) +- [loaders xlsx] store `None` as empty string in `save_xlsx` (reported and PR by @dbaynard #1626 #1629) - [macros] override CLI parsing options for MacrosSheet (reported by @frosencrantz #1607) - [macros] query again for keystroke if used by existing macro (#1658) - [macros] do not include `nonLogged` commands in macro (reported by @geekscrapy #1569) - [macros] add reload for **MacroSheet** (reported by @geekscrapy #1569) -- [mouse] fix mouse-clicks on statusbar when splitpane is off (reported by @frosencrantz #1625)S -- [mouse] open `sheets-stack` for left on sheet name (reported by @frosencrantz #1625) +- [mouse] fix mouse-clicks on statusbar when splitpane is off (reported by @frosencrantz #1625) - [open_txt] fix Exception with `open-config` when no `~/.visidatarc` (reported by @gunchev #1611) - [pdb] fix entering of pdb breakpoints for Python 3.9+ (reported by @jasonwirth #1317) - [sheets] sort all sheets on global **Sheets Sheet** (reported by @franzhuang #1620) -- [sqlite] add passtrhough options for `connect()` (reported by @cwarden #1622) -- [unzip-http] fix extraction +- [sqlite] add passthrough options for `connect()` (reported by @cwarden #1622) +- [unzip-http] fix file extraction (`x`) on remote zip file - [unzip-http] handle files smaller than 64K (reported by @frosencrantz #1567) - [zsh-completion] fixed (reported by @pigmonkey #1583; PR by @Freed-Wu #1646) ## API -- fix Exception causes in utils.py (PR by @cool-RR #1633) +- raise Exception from causes in utils.py (PR by @cool-RR #1633) - add `HistogramColumn` to allow overrides (requested by @andycraig #1621) -- easier external numeric types with `@vd.numericType()` decorator (inspired by s1291 #1394) +- easier external numeric types with `@vd.numericType()` decorator (inspired by @s1291 #1394) + +- [frequency table] `dive-rows` renamed to `dive-selected` -# v2.10.2 (2022-10-XX) +# v2.10.2 (2022-10-08) - add .vdx, a simplified new cmdlog format - add `-N`/`--nothing` command to disable loading .visidatarc and plugin addons From 8e998347534c920056dcccc826c4165c0f3f014c Mon Sep 17 00:00:00 2001 From: midichef <67946319+midichef@users.noreply.github.com> Date: Mon, 9 Jan 2023 22:38:57 -0800 Subject: [PATCH 77/98] [xml] passthrough options; default xml_huge_tree to True (#1668) Co-authored-by: Saul Pwanson --- visidata/loaders/xml.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/visidata/loaders/xml.py b/visidata/loaders/xml.py index 9ed12a20a..4a5ca9c98 100644 --- a/visidata/loaders/xml.py +++ b/visidata/loaders/xml.py @@ -1,5 +1,7 @@ from visidata import VisiData, vd, Sheet, options, Column, Progress, setitem, ColumnAttr, vlen, RowColorizer, Path, copy +vd.option('xml_huge_tree', True, 'allow very deep trees and very long text content') + @VisiData.api def open_xml(vd, p): @@ -46,7 +48,8 @@ def showColumnsBasedOnRow(self, row): def iterload(self): if isinstance(self.source, Path): from lxml import etree, objectify - self.root = etree.parse(self.source.open_text(encoding=self.options.encoding)) + p = etree.XMLParser(**self.options.getall('xml_')) + self.root = etree.parse(self.source.open_text(encoding=self.options.encoding), parser=p) objectify.deannotate(self.root, cleanup_namespaces=True) else: # elif isinstance(self.source, XmlElement): self.root = self.source From 8b2542198737e39693e57be28fc35e8b51153a2e Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Wed, 11 Jan 2023 14:28:14 -0800 Subject: [PATCH 78/98] [xml] rename xml_ passthrough options to xml_parser_; rename xml_huge_tree option to xml_parser_huge_tree --- CHANGELOG.md | 3 ++- visidata/loaders/xml.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f72cb8cb..7a5f116a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ - [loaders hdf5] add support for arrays of scalars (requested by @linwaytin #1602) - [graph] fail if no numeric xcols are given - [open-cell-files] warn when file or url in cell does not exist (requested by @geekscrapy #1540) +- [sqlite] add passthrough options (reported by @cwarden #1622) +- [xml] add passthrough options for xml_parser; default xml_parser_huge_tree=True (PR by @midichef #1668) ## Bugfixes @@ -40,7 +42,6 @@ - [open_txt] fix Exception with `open-config` when no `~/.visidatarc` (reported by @gunchev #1611) - [pdb] fix entering of pdb breakpoints for Python 3.9+ (reported by @jasonwirth #1317) - [sheets] sort all sheets on global **Sheets Sheet** (reported by @franzhuang #1620) -- [sqlite] add passthrough options for `connect()` (reported by @cwarden #1622) - [unzip-http] fix file extraction (`x`) on remote zip file - [unzip-http] handle files smaller than 64K (reported by @frosencrantz #1567) - [zsh-completion] fixed (reported by @pigmonkey #1583; PR by @Freed-Wu #1646) diff --git a/visidata/loaders/xml.py b/visidata/loaders/xml.py index 4a5ca9c98..7ed0de284 100644 --- a/visidata/loaders/xml.py +++ b/visidata/loaders/xml.py @@ -1,6 +1,6 @@ from visidata import VisiData, vd, Sheet, options, Column, Progress, setitem, ColumnAttr, vlen, RowColorizer, Path, copy -vd.option('xml_huge_tree', True, 'allow very deep trees and very long text content') +vd.option('xml_parser_huge_tree', True, 'allow very deep trees and very long text content') @VisiData.api @@ -48,7 +48,7 @@ def showColumnsBasedOnRow(self, row): def iterload(self): if isinstance(self.source, Path): from lxml import etree, objectify - p = etree.XMLParser(**self.options.getall('xml_')) + p = etree.XMLParser(**self.options.getall('xml_parser_')) self.root = etree.parse(self.source.open_text(encoding=self.options.encoding), parser=p) objectify.deannotate(self.root, cleanup_namespaces=True) else: # elif isinstance(self.source, XmlElement): From f9d62118f9d27df0d2fe7cd8b5e92fe0a879edb4 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Wed, 11 Jan 2023 21:11:47 -0800 Subject: [PATCH 79/98] [docs] update manpage --- docs/man.md | 47 +++++++++++++++++++++++------------------ visidata/man/vd.1 | 42 ++++++++++++++++++++---------------- visidata/man/vd.inc | 28 +++++++++++++----------- visidata/man/vd.txt | 39 +++++++++++++++++++--------------- visidata/man/visidata.1 | 42 ++++++++++++++++++++---------------- 5 files changed, 112 insertions(+), 86 deletions(-) diff --git a/docs/man.md b/docs/man.md index b5daa9750..01a0a71f2 100644 --- a/docs/man.md +++ b/docs/man.md @@ -170,14 +170,14 @@ vd(1) Commands While Editing Input Enter ^C accept/abort input - ^O open external $EDITOR to edit contents + ^O g^O open external $EDITOR to edit contents of current/selected rows in current column ^R reload initial value - ^A ^E go to beginning/end of line - ^B ^F go back/forward one character - ^← ^→ (arrow) go back/forward one word - ^H ^D delete previous/current character + ^A ^E go to beginning/end of line + ^B ^F go back/forward one character + ^← ^→ (arrow) go back/forward one word + ^H ^D delete previous/current character ^T transpose previous and current characters - ^U ^K clear from cursor to beginning/end of line + ^U ^K clear from cursor to beginning/end of line ^Y paste from cell clipboard Backspace Del delete previous/current character Insert toggle insert mode @@ -197,8 +197,8 @@ vd(1) + aggregator add aggregator to current column (see Frequency Table) z+ aggregator display result of aggregator over values in selected rows for current column; store result in Memory Sheet - & concatenate top two sheets in Sheets Stack - g& concatenate all sheets in Sheets Stack + & append top two sheets in Sheets Stack + g& append all sheets in Sheets Stack w nBefore nAfter add column where each row contains a list of that row, nBefore rows, and nAfter rows @@ -252,7 +252,7 @@ vd(1) ^G show cursor position and bounds of current sheet on status line ^V show version and copyright information on status line ^P open Status History - m keystroke first, begin recording macro; second, prompt for keystroke , and complete recording. Macro can then be executed every time provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. + m keystroke first, begin recording macro; second, prompt for keystroke , and complete recording. Macro can then be executed everytime provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. gm open an index of all existing macros. Can be directly viewed with Enter, and then modified with ^S. ^Y z^Y g^Y open current row/cell/sheet as Python object @@ -294,6 +294,7 @@ vd(1) y gy directory copy current/selected file(s) to given directory, upon commit e ge name rename current/selected file(s) to name + ` (backtick) open parent directory z^S commit changes to file system Plugins Sheet @@ -319,7 +320,7 @@ vd(1) (global commands) gC open Columns Sheet with all visible columns from all sheets (sheet-specific commands) - & add column from concatenating selected source columns + & add column from appending selected source columns g! gz! toggle/unset selected columns as key columns on source sheet g+ aggregator add Ar aggregator No to selected source columns g- (hyphen) hide selected columns on source sheet @@ -345,7 +346,8 @@ vd(1) . outer keep all rows from first selected sheet . full keep all rows from all sheets (union) . diff keep only rows NOT in all sheets - . append keep all rows from all sheets (concatenation) + . append combine all rows from all sheets + . concat similar to 'append' but keep first sheet type and columns . extend copy first selected sheet, keeping all rows and sheet type, and extend with columns from other sheets . merge mostly keep all rows from first selected sheet, except prioritise cells with non-null/non-error values @@ -425,6 +427,7 @@ vd(1) -f, --filetype=filetype tsv set loader to use for filetype instead of file extension -d, --delimiter=delimiter \t field delimiter to use for tsv/usv filetype -y, --confirm-overwrite=F True overwrite existing files without confirmation + -N, --nothing=T False disable loading .visidatarc and plugin addons --visidata-dir=str ~/.visidata/ directory to load and store additional files --mouse-interval=int 1 max time between press/release for click (ms) --null-value=NoneType None a value to be counted as null @@ -468,6 +471,10 @@ vd(1) --json-sort-keys False sort object keys when saving to json --default-colname=str column name to use for non-dict rows --filetype=str specify file type + --replay-wait=float 0.0 time to wait between replayed commands, in seconds + --replay-movement False insert movements during replay + --rowkey-prefix=str キ string prefix for rowkey in the cmdlog + --cmdlog-histfile=str file to autorecord each cmdlog action to --confirm-overwrite=bool True whether to prompt for overwrite confirmation on save --safe-error=str #ERR error string to use while saving --clipboard-copy-cmd=str xclip -selection clipboard -filter @@ -478,10 +485,6 @@ vd(1) --describe-aggrs=str mean stdev numeric aggregators to calculate on Describe sheet --histogram-bins=int 0 number of bins for histogram of numeric columns --numeric-binning False bin numeric columns into ranges - --replay-wait=float 0.0 time to wait between replayed commands, in seconds - --replay-movement False insert movements during replay - --rowkey-prefix=str キ string prefix for rowkey in the cmdlog - --cmdlog-histfile=str file to autorecord each cmdlog action to --regex-flags=str I flags to pass to re.compile() [AILMSUX] --regex-maxsplit=int 0 maxsplit to pass to regex.split --show-graph-labels=bool True show axes and legend on graph @@ -497,6 +500,7 @@ vd(1) --output=NoneType None save the final visible sheet to output at the end of replay --preplay=str longnames to preplay before replay --imports=str plugins imports to preload before .visidatarc (command-line only) + --nothing False no config, no plugins, nothing extra --unfurl-empty False if unfurl includes rows for empty containers --incr-base=float 1.0 start value for column increments --csv-dialect=str excel dialect passed to csv.reader @@ -515,6 +519,7 @@ vd(1) --html-title=str <h2>{sheet.name}</h2> table header when saving to html --pcap-internet=str n (y/s/n) if save_dot includes all internet hosts separately (y), combined (s), or does not include the internet (n) + --xml-parser-huge-tree=bool True allow very deep trees and very long text content --graphviz-edge-labels=bool True whether to include edge labels on graphviz diagrams --npy-allow-pickle False numpy allow unpickling objects (unsafe) --pdf-tables False parse PDF for tables instead of pages of text @@ -527,10 +532,8 @@ vd(1) disp_splitwin_pct 0 height of second sheet on screen color_sidebar black on 114 blue color of sidebar - disp_currency_fmt %.02f default fmtstr to format for currency values disp_float_fmt {:.02f} default fmtstr to format for float values disp_int_fmt {:.0f} default fmtstr to format for int values - disp_date_fmt %Y-%m-%d default fmtstr to strftime for date values disp_note_none ⌀ visible contents of a cell whose value is None disp_truncator … indicator that the contents are only partially visible disp_oddspace · displayable character for odd whitespace @@ -586,6 +589,11 @@ vd(1) color_edit_cell white cell color to use when editing cell disp_edit_fill _ edit field fill character disp_unprintable · substitute character for unprintables + disp_currency_fmt %.02f default fmtstr to format for currency values + disp_date_fmt %Y-%m-%d default fmtstr to strftime for date values + disp_replay_play ▶ status indicator for active replay + disp_replay_pause ‖ status indicator for paused replay + color_status_replay green color of replay status indicator disp_formatter generic formatter to use for display and saving disp_menu True show menu on top line when not active disp_menu_keys True show keystrokes inline in submenus @@ -603,9 +611,6 @@ vd(1) right-side menu format string disp_histogram * histogram element character disp_histolen 50 width of histogram column - disp_replay_play ▶ status indicator for active replay - disp_replay_pause ‖ status indicator for paused replay - color_status_replay green color of replay status indicator disp_canvas_charset ⠀⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿⡀⡁⡂⡃⡄⡅⡆⡇⡈⡉⡊⡋⡌⡍⡎⡏⡐⡑⡒⡓⡔⡕⡖⡗⡘⡙⡚⡛⡜⡝⡞⡟⡠⡡⡢⡣⡤⡥⡦⡧⡨⡩⡪⡫⡬⡭⡮⡯⡰⡱⡲⡳⡴⡵⡶⡷⡸⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⢈⢉⢊⢋⢌⢍⢎⢏⢐⢑⢒⢓⢔⢕⢖⢗⢘⢙⢚⢛⢜⢝⢞⢟⢠⢡⢢⢣⢤⢥⢦⢧⢨⢩⢪⢫⢬⢭⢮⢯⢰⢱⢲⢳⢴⢵⢶⢷⢸⢹⢺⢻⢼⢽⢾⢿⣀⣁⣂⣃⣄⣅⣆⣇⣈⣉⣊⣋⣌⣍⣎⣏⣐⣑⣒⣓⣔⣕⣖⣗⣘⣙⣚⣛⣜⣝⣞⣟⣠⣡⣢⣣⣤⣥⣦⣧⣨⣩⣪⣫⣬⣭⣮⣯⣰⣱⣲⣳⣴⣵⣶⣷⣸⣹⣺⣻⣼⣽⣾⣿ charset to render 2x4 blocks on canvas disp_pixel_random False randomly choose attr from set of pixels instead of most common @@ -708,5 +713,5 @@ vd(1) AUTHOR VisiData was made by Saul Pwanson <vd@saul.pw>. -Linux/MacOS September 13, 2022 Linux/MacOS +Linux/MacOS January 11, 2023 Linux/MacOS diff --git a/visidata/man/vd.1 b/visidata/man/vd.1 index 01534fe22..01a2f6457 100644 --- a/visidata/man/vd.1 +++ b/visidata/man/vd.1 @@ -1,4 +1,4 @@ -.Dd October 06, 2022 +.Dd January 11, 2023 .Dt vd \&1 "Quick Reference Guide" .Os Linux/MacOS . @@ -340,21 +340,21 @@ edit contents of current cell .Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX .It Ic "Enter ^C" accept/abort input -.It Ic ^O -open external $EDITOR to edit contents +.It Ic "^O g^O" +open external $EDITOR to edit contents of current/selected rows in current column .It Ic ^R reload initial value -.It Ic "^A ^E" +.It Ic "^A ^E" go to beginning/end of line -.It Ic "^B ^F" +.It Ic "^B ^F" go back/forward one character -.It Ic "^\[u2190] ^\[u2192]" No (arrow) +.It Ic "^\[u2190] ^\[u2192]" No (arrow) go back/forward one word -.It Ic "^H ^D" +.It Ic "^H ^D" delete previous/current character .It Ic ^T transpose previous and current characters -.It Ic "^U ^K" +.It Ic "^U ^K" clear from cursor to beginning/end of line .It Ic "^Y" paste from cell clipboard @@ -396,9 +396,9 @@ open file or url from path in current cell .It Ic "z+" Ar aggregator .No display result of Ar aggregator No over values in selected rows for current column; store result in Sy Memory Sheet .It Ic " &" -.No concatenate top two sheets in Sy Sheets Stack +.No append top two sheets in Sy Sheets Stack .It Ic "g&" -.No concatenate all sheets in Sy Sheets Stack +.No append all sheets in Sy Sheets Stack .Pp .It Ic " w" Ar nBefore nAfter .No add column where each row contains a list of that row, Ar nBefore No rows, and Ar nAfter No rows @@ -499,7 +499,7 @@ show version and copyright information on status line .It Ic " ^P" .No open Sy Status History .It "m" Ar keystroke -.No first, begin recording macro; second, prompt for Ar keystroke No , and complete recording. Macro can then be executed every time provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. +.No first, begin recording macro; second, prompt for Ar keystroke No , and complete recording. Macro can then be executed everytime provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. .It "gm" .No open an index of all existing macros. Can be directly viewed with Sy Enter Ns , and then modified with Sy ^S Ns . . @@ -579,6 +579,8 @@ delete current/selected file(s) from filesystem, upon commit .No copy current/selected file(s) to given Ar directory Ns , upon commit .It Ic " e ge" Ar name .No rename current/selected file(s) to Ar name +.It Ic " ` (backtick)" +open parent directory .It Ic "z^S" commit changes to file system .El @@ -641,7 +643,7 @@ edit either value or name, to edit reference .El .Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX .It Ic " &" -add column from concatenating selected source columns +add column from appending selected source columns .It Ic "g! gz!" toggle/unset selected columns as key columns on source sheet .It Ic "g+" Ar aggregator @@ -696,7 +698,9 @@ save selected or all sheets .It Sy "\&." .Sy diff No " keep only rows NOT in all sheets" .It Sy "\&." -.Sy append No "keep all rows from all sheets (concatenation)" +.Sy append No "combine all rows from all sheets" +.It Sy "\&." +.Sy concat No "similar to 'append' but keep first sheet type and columns" .It Sy "\&." .Sy extend No "copy first selected sheet, keeping all rows and sheet type, and extend with columns from other sheets" .It Sy "\&." @@ -1007,7 +1011,7 @@ source of randomized startup messages walk source path recursively on DirSheet .It Sy --dir-hidden No " False" load hidden files on DirSheet -.It Sy --config Ns = Ns Ar "Path " No "/home//.visidatarc" +.It Sy --config Ns = Ns Ar "Path " No "/home/kefala/.visidatarc" config file to exec in Python .It Sy --play Ns = Ns Ar "str " No "" file.vd to replay @@ -1056,6 +1060,8 @@ http headers to send to requests table header when saving to html .It Sy --pcap-internet Ns = Ns Ar "str " No "n" (y/s/n) if save_dot includes all internet hosts separately (y), combined (s), or does not include the internet (n) +.It Sy --xml-parser-huge-tree Ns = Ns Ar "bool " No "True" +allow very deep trees and very long text content .It Sy --graphviz-edge-labels Ns = Ns Ar "bool " No "True" whether to include edge labels on graphviz diagrams .It Sy --npy-allow-pickle No " False" @@ -1077,14 +1083,10 @@ do not autoload plugins if False height of second sheet on screen .It Sy "color_sidebar " No "black on 114 blue" color of sidebar -.It Sy "disp_currency_fmt " No "%.02f" -default fmtstr to format for currency values .It Sy "disp_float_fmt " No "{:.02f}" default fmtstr to format for float values .It Sy "disp_int_fmt " No "{:.0f}" default fmtstr to format for int values -.It Sy "disp_date_fmt " No "%Y-%m-%d" -default fmtstr to strftime for date values .It Sy "disp_note_none " No "\[u2300]" visible contents of a cell whose value is None .It Sy "disp_truncator " No "\[u2026]" @@ -1187,6 +1189,10 @@ cell color to use when editing cell edit field fill character .It Sy "disp_unprintable " No "\[u00B7]" substitute character for unprintables +.It Sy "disp_currency_fmt " No "%.02f" +default fmtstr to format for currency values +.It Sy "disp_date_fmt " No "%Y-%m-%d" +default fmtstr to strftime for date values .It Sy "disp_replay_play " No "\[u25B6]" status indicator for active replay .It Sy "disp_replay_pause " No "\[u2016]" diff --git a/visidata/man/vd.inc b/visidata/man/vd.inc index 1cd26d0c6..cb24547c2 100644 --- a/visidata/man/vd.inc +++ b/visidata/man/vd.inc @@ -1,4 +1,4 @@ -.Dd October 06, 2022 +.Dd January 11, 2023 .Dt vd \&1 "Quick Reference Guide" .Os Linux/MacOS . @@ -340,21 +340,21 @@ edit contents of current cell .Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX .It Ic "Enter ^C" accept/abort input -.It Ic ^O -open external $EDITOR to edit contents +.It Ic "^O g^O" +open external $EDITOR to edit contents of current/selected rows in current column .It Ic ^R reload initial value -.It Ic "^A ^E" +.It Ic "^A ^E" go to beginning/end of line -.It Ic "^B ^F" +.It Ic "^B ^F" go back/forward one character -.It Ic "^← ^→" No (arrow) +.It Ic "^← ^→" No (arrow) go back/forward one word -.It Ic "^H ^D" +.It Ic "^H ^D" delete previous/current character .It Ic ^T transpose previous and current characters -.It Ic "^U ^K" +.It Ic "^U ^K" clear from cursor to beginning/end of line .It Ic "^Y" paste from cell clipboard @@ -396,9 +396,9 @@ open file or url from path in current cell .It Ic "z+" Ar aggregator .No display result of Ar aggregator No over values in selected rows for current column; store result in Sy Memory Sheet .It Ic " &" -.No concatenate top two sheets in Sy Sheets Stack +.No append top two sheets in Sy Sheets Stack .It Ic "g&" -.No concatenate all sheets in Sy Sheets Stack +.No append all sheets in Sy Sheets Stack .Pp .It Ic " w" Ar nBefore nAfter .No add column where each row contains a list of that row, Ar nBefore No rows, and Ar nAfter No rows @@ -579,6 +579,8 @@ delete current/selected file(s) from filesystem, upon commit .No copy current/selected file(s) to given Ar directory Ns , upon commit .It Ic " e ge" Ar name .No rename current/selected file(s) to Ar name +.It Ic " ` (backtick)" +open parent directory .It Ic "z^S" commit changes to file system .El @@ -641,7 +643,7 @@ edit either value or name, to edit reference .El .Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX .It Ic " &" -add column from concatenating selected source columns +add column from appending selected source columns .It Ic "g! gz!" toggle/unset selected columns as key columns on source sheet .It Ic "g+" Ar aggregator @@ -696,7 +698,9 @@ save selected or all sheets .It Sy "\&." .Sy diff No " keep only rows NOT in all sheets" .It Sy "\&." -.Sy append No "keep all rows from all sheets (concatenation)" +.Sy append No "combine all rows from all sheets" +.It Sy "\&." +.Sy concat No "similar to 'append' but keep first sheet type and columns" .It Sy "\&." .Sy extend No "copy first selected sheet, keeping all rows and sheet type, and extend with columns from other sheets" .It Sy "\&." diff --git a/visidata/man/vd.txt b/visidata/man/vd.txt index 02e3db6b6..6baccd353 100644 --- a/visidata/man/vd.txt +++ b/visidata/man/vd.txt @@ -222,14 +222,15 @@ DESCRIPTION Commands While Editing Input Enter ^C accept/abort input - ^O open external $EDITOR to edit contents + ^O g^O open external $EDITOR to edit contents of current/se‐ + lected rows in current column ^R reload initial value - ^A ^E go to beginning/end of line - ^B ^F go back/forward one character - ^← ^→ (arrow) go back/forward one word - ^H ^D delete previous/current character + ^A ^E go to beginning/end of line + ^B ^F go back/forward one character + ^← ^→ (arrow) go back/forward one word + ^H ^D delete previous/current character ^T transpose previous and current characters - ^U ^K clear from cursor to beginning/end of line + ^U ^K clear from cursor to beginning/end of line ^Y paste from cell clipboard Backspace Del delete previous/current character Insert toggle insert mode @@ -255,8 +256,8 @@ DESCRIPTION + aggregator add aggregator to current column (see Frequency Table) z+ aggregator display result of aggregator over values in selected rows for current column; store result in Memory Sheet - & concatenate top two sheets in Sheets Stack - g& concatenate all sheets in Sheets Stack + & append top two sheets in Sheets Stack + g& append all sheets in Sheets Stack w nBefore nAfter add column where each row contains a list of that row, @@ -381,6 +382,7 @@ DESCRIPTION copy current/selected file(s) to given directory, upon commit e ge name rename current/selected file(s) to name + ` (backtick) open parent directory z^S commit changes to file system Plugins Sheet @@ -415,7 +417,7 @@ DESCRIPTION gC open Columns Sheet with all visible columns from all sheets (sheet-specific commands) - & add column from concatenating selected source columns + & add column from appending selected source columns g! gz! toggle/unset selected columns as key columns on source sheet g+ aggregator add Ar aggregator No to selected source columns @@ -449,8 +451,9 @@ DESCRIPTION . outer keep all rows from first selected sheet . full keep all rows from all sheets (union) . diff keep only rows NOT in all sheets - . append keep all rows from all sheets - (concatenation) + . append combine all rows from all sheets + . concat similar to 'append' but keep first sheet + type and columns . extend copy first selected sheet, keeping all rows and sheet type, and extend with columns from other sheets @@ -705,7 +708,7 @@ COMMANDLINE OPTIONS sively on DirSheet --dir-hidden False load hidden files on DirSheet - --config=Path /home//.visidatarc + --config=Path /home/kefala/.visidatarc config file to exec in Python --play=str file.vd to replay @@ -764,6 +767,8 @@ COMMANDLINE OPTIONS separately (y), combined (s), or does not include the internet (n) + --xml-parser-huge-tree=bool True allow very deep trees and + very long text content --graphviz-edge-labels=bool True whether to include edge labels on graphviz dia‐ grams @@ -782,14 +787,10 @@ COMMANDLINE OPTIONS disp_splitwin_pct 0 height of second sheet on screen color_sidebar black on 114 blue color of sidebar - disp_currency_fmt %.02f default fmtstr to format for cur‐ - rency values disp_float_fmt {:.02f} default fmtstr to format for float values disp_int_fmt {:.0f} default fmtstr to format for int values - disp_date_fmt %Y-%m-%d default fmtstr to strftime for - date values disp_note_none ⌀ visible contents of a cell whose value is None disp_truncator … indicator that the contents are @@ -863,6 +864,10 @@ COMMANDLINE OPTIONS disp_edit_fill _ edit field fill character disp_unprintable · substitute character for unprint‐ ables + disp_currency_fmt %.02f default fmtstr to format for cur‐ + rency values + disp_date_fmt %Y-%m-%d default fmtstr to strftime for + date values disp_replay_play ▶ status indicator for active re‐ play disp_replay_pause ‖ status indicator for paused re‐ @@ -1012,4 +1017,4 @@ SUPPORTED SOURCES AUTHOR VisiData was made by Saul Pwanson . -Linux/MacOS October 06, 2022 Linux/MacOS +Linux/MacOS January 11, 2023 Linux/MacOS diff --git a/visidata/man/visidata.1 b/visidata/man/visidata.1 index 01534fe22..01a2f6457 100644 --- a/visidata/man/visidata.1 +++ b/visidata/man/visidata.1 @@ -1,4 +1,4 @@ -.Dd October 06, 2022 +.Dd January 11, 2023 .Dt vd \&1 "Quick Reference Guide" .Os Linux/MacOS . @@ -340,21 +340,21 @@ edit contents of current cell .Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX .It Ic "Enter ^C" accept/abort input -.It Ic ^O -open external $EDITOR to edit contents +.It Ic "^O g^O" +open external $EDITOR to edit contents of current/selected rows in current column .It Ic ^R reload initial value -.It Ic "^A ^E" +.It Ic "^A ^E" go to beginning/end of line -.It Ic "^B ^F" +.It Ic "^B ^F" go back/forward one character -.It Ic "^\[u2190] ^\[u2192]" No (arrow) +.It Ic "^\[u2190] ^\[u2192]" No (arrow) go back/forward one word -.It Ic "^H ^D" +.It Ic "^H ^D" delete previous/current character .It Ic ^T transpose previous and current characters -.It Ic "^U ^K" +.It Ic "^U ^K" clear from cursor to beginning/end of line .It Ic "^Y" paste from cell clipboard @@ -396,9 +396,9 @@ open file or url from path in current cell .It Ic "z+" Ar aggregator .No display result of Ar aggregator No over values in selected rows for current column; store result in Sy Memory Sheet .It Ic " &" -.No concatenate top two sheets in Sy Sheets Stack +.No append top two sheets in Sy Sheets Stack .It Ic "g&" -.No concatenate all sheets in Sy Sheets Stack +.No append all sheets in Sy Sheets Stack .Pp .It Ic " w" Ar nBefore nAfter .No add column where each row contains a list of that row, Ar nBefore No rows, and Ar nAfter No rows @@ -499,7 +499,7 @@ show version and copyright information on status line .It Ic " ^P" .No open Sy Status History .It "m" Ar keystroke -.No first, begin recording macro; second, prompt for Ar keystroke No , and complete recording. Macro can then be executed every time provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. +.No first, begin recording macro; second, prompt for Ar keystroke No , and complete recording. Macro can then be executed everytime provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet. .It "gm" .No open an index of all existing macros. Can be directly viewed with Sy Enter Ns , and then modified with Sy ^S Ns . . @@ -579,6 +579,8 @@ delete current/selected file(s) from filesystem, upon commit .No copy current/selected file(s) to given Ar directory Ns , upon commit .It Ic " e ge" Ar name .No rename current/selected file(s) to Ar name +.It Ic " ` (backtick)" +open parent directory .It Ic "z^S" commit changes to file system .El @@ -641,7 +643,7 @@ edit either value or name, to edit reference .El .Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX .It Ic " &" -add column from concatenating selected source columns +add column from appending selected source columns .It Ic "g! gz!" toggle/unset selected columns as key columns on source sheet .It Ic "g+" Ar aggregator @@ -696,7 +698,9 @@ save selected or all sheets .It Sy "\&." .Sy diff No " keep only rows NOT in all sheets" .It Sy "\&." -.Sy append No "keep all rows from all sheets (concatenation)" +.Sy append No "combine all rows from all sheets" +.It Sy "\&." +.Sy concat No "similar to 'append' but keep first sheet type and columns" .It Sy "\&." .Sy extend No "copy first selected sheet, keeping all rows and sheet type, and extend with columns from other sheets" .It Sy "\&." @@ -1007,7 +1011,7 @@ source of randomized startup messages walk source path recursively on DirSheet .It Sy --dir-hidden No " False" load hidden files on DirSheet -.It Sy --config Ns = Ns Ar "Path " No "/home//.visidatarc" +.It Sy --config Ns = Ns Ar "Path " No "/home/kefala/.visidatarc" config file to exec in Python .It Sy --play Ns = Ns Ar "str " No "" file.vd to replay @@ -1056,6 +1060,8 @@ http headers to send to requests table header when saving to html .It Sy --pcap-internet Ns = Ns Ar "str " No "n" (y/s/n) if save_dot includes all internet hosts separately (y), combined (s), or does not include the internet (n) +.It Sy --xml-parser-huge-tree Ns = Ns Ar "bool " No "True" +allow very deep trees and very long text content .It Sy --graphviz-edge-labels Ns = Ns Ar "bool " No "True" whether to include edge labels on graphviz diagrams .It Sy --npy-allow-pickle No " False" @@ -1077,14 +1083,10 @@ do not autoload plugins if False height of second sheet on screen .It Sy "color_sidebar " No "black on 114 blue" color of sidebar -.It Sy "disp_currency_fmt " No "%.02f" -default fmtstr to format for currency values .It Sy "disp_float_fmt " No "{:.02f}" default fmtstr to format for float values .It Sy "disp_int_fmt " No "{:.0f}" default fmtstr to format for int values -.It Sy "disp_date_fmt " No "%Y-%m-%d" -default fmtstr to strftime for date values .It Sy "disp_note_none " No "\[u2300]" visible contents of a cell whose value is None .It Sy "disp_truncator " No "\[u2026]" @@ -1187,6 +1189,10 @@ cell color to use when editing cell edit field fill character .It Sy "disp_unprintable " No "\[u00B7]" substitute character for unprintables +.It Sy "disp_currency_fmt " No "%.02f" +default fmtstr to format for currency values +.It Sy "disp_date_fmt " No "%Y-%m-%d" +default fmtstr to strftime for date values .It Sy "disp_replay_play " No "\[u25B6]" status indicator for active replay .It Sy "disp_replay_pause " No "\[u2016]" From 6a613862ab0bb9aa9a1148676713e7953932b08b Mon Sep 17 00:00:00 2001 From: anjakefala Date: Wed, 11 Jan 2023 21:41:38 -0800 Subject: [PATCH 80/98] [tests] add test for concat --- tests/golden/join-concat.tsv | 52 ++++++++++++++++++++++++++++++++++++ tests/join-concat.vdj | 12 +++++++++ 2 files changed, 64 insertions(+) create mode 100644 tests/golden/join-concat.tsv create mode 100644 tests/join-concat.vdj diff --git a/tests/golden/join-concat.tsv b/tests/golden/join-concat.tsv new file mode 100644 index 000000000..e0b91ccfc --- /dev/null +++ b/tests/golden/join-concat.tsv @@ -0,0 +1,52 @@ +Date Delilah SKU Item Quantity Unit Paid +7/3/2018 1:47p Robert Armstrong FOOD213 BFF Oh My Gravy! Beef & Salmon 2.8oz 4 $12.95 $51.8 +7/3/2018 3:32p Kyle Kennedy FOOD121 Food, Adult Cat - 3.5 oz 1 $4.22 $4.22 +7/5/2018 4:15p Douglas "Dougie" Powers FOOD121 Food, Adult Cat 3.5 oz 1 $4.22 $4.22 +7/6/2018 12:15p 桜 高橋 (Sakura Takahashi) FOOD122 Food, Senior Wet Cat - 3 oz 12 $1.29 157¥ +7/10/2018 10:28a David Attenborough NSCT201 Food, Salamander 30 $.05 $1.5 +7/10/2018 5:23p Susan Ashworth CAT060 Cat, Korat (Felis catus) 1 $720.42 $720.42 +7/10/2018 5:23p Susan Ashworth FOOD130 Food, Kitten 3kg 1 $14.94 $14.94 +7/13/2018 10:26a Wil Wheaton NSCT523 Monster, Rust (Monstrus gygaxus) 1 $39.95 $39.95 +7/13/2018 3:49p Robert Armstrong FOOD216 BFF Oh My Gravy! Chicken & Shrimp 2.8oz 4 $12.95 $51.8 +7/17/2018 9:01a Robert Armstrong FOOD217 BFF Oh My Gravy! Duck & Tuna 2.8oz 4 $12.95 $51.8 +7/17/2018 11:30a Helen Halestorm LAGO342 Rabbit (Oryctolagus cuniculus) 2 $32.94 $65.88 +7/18/2018 12:16p 桜 高橋 (Sakura Takahashi) FOOD122 Food, Senior Wet Cat - 3 oz 6 $1.29 157¥ +7/19/2018 10:28a Rubeus Hagrid FOOD170 Food, Dog - 5kg 5 $44.95 $224.75 +7/20/2018 2:13p Jon Arbuckle FOOD167 Food, Premium Wet Cat - 3.5 oz 50 $3.95 $197.5 +7/23/2018 1:41p Robert Armstrong FOOD215 BFF Oh My Gravy! Lamb & Tuna 2.8oz 4 $12.95 $51.8 +7/23/2018 4:23p Douglas "Dougie" Powers TOY235 Laser Pointer 1 $16.12 $16.12 +7/24/2018 12:16p 桜 高橋 (Sakura Takahashi) FOOD122 Food, Senior Wet Cat - 3 oz 3 $1.29 157¥ +7/26/2018 4:39p Douglas "Dougie" Powers FOOD420 Food, Shark - 10 kg 1 $15.70 $15.7 +7/27/2018 12:16p 桜 高橋 (Sakura Takahashi) FOOD122 Food, Senior Wet Cat - 3 oz 3 $1.29 157¥ +7/30/2018 12:17p 桜 高橋 (Sakura Takahashi) RETURN Food, Senior Wet Cat - 3 oz 1 $1.29 157¥ +7/31/2018 5:42p Rubeus Hagrid CAT060 Food, Dragon - 50kg 5 $720.42 $3602.1 +8/1/2018 2:44p David Attenborough FOOD360 Food, Rhinocerous - 50kg 4 $5.72 $22.88 +8/2/2018 5:12p Susan Ashworth CAT110 Cat, Maine Coon (Felix catus) 1 $1,309.68 $1309.68 +8/2/2018 5:12p Susan Ashworth FOOD130 Food, Kitten 3kg 3 $14.94 $44.82 +8/6/2018 10:21a Robert Armstrong FOOD212 BFF Oh My Gravy! Beef & Chicken 2.8oz 4 $12.95 $51.8 +8/7/2018 4:12p Juan Johnson REPT082 Kingsnake, California (Lampropeltis getula) 1 $89.95 $89.95 +8/7/2018 4:12p Juan Johnson RDNT443 Mouse, Pinky (Mus musculus) 1 $1.49 $1.49 +8/10/2018 4:31p Robert Armstrong FOOD211 BFF Oh My Gravy! Chicken & Turkey 2.8oz 4 $12.95 $51.8 +8/13/2018 2:07p Monica Johnson RDNT443 Mouse, Pinky (Mus musculus) 1 $1.49 $1.49 +8/13/2018 2:08p María Fernández FOOD146 Forti Diet Prohealth Mouse/Rat 3lbs 2 $2.00 $4.0 +8/15/2018 11:57a Mr. Praline RETURN Parrot, Norwegian Blue (Mopsitta tanta) 1 $2300.00 -$2300.0 +8/15/2018 3:48p Kyle Kennedy FOOD121 Food, Adult Cat - 3.5 oz 2 $4.22 $8.44 +8/16/2018 11:50a Helen Halestorm RETURN Rabbit (Oryctolagus cuniculus) 6 $0 $0.0 +8/16/2018 4:00p Kyle Kennedy DOG010 Dog, Golden Retriever (Canis lupus familiaris) 1 $2,495.99 $2495.99 +8/16/2018 5:15p Michael Smith BIRD160 Parakeet, Blue (Melopsittacus undulatus) 1 29.95 $31.85 +8/17/2018 9:26a Rubeus Hagrid NSCT201 Food, Spider 5 $.05 $0.25 +8/20/2018 9:36a Kyle Kennedy RETURN Dog, Golden Retriever (Canis lupus familiaris) 1 $1,247.99 -$1247.99 +8/20/2018 1:47p מרוסיה ניסנהולץ אבולעפיה GOAT224 Goat, American Pygmy (Capra hircus) 1 ₪499 $160.51 +8/20/2018 3:31p Monica Johnson NSCT201 Crickets, Adult Live (Gryllus assimilis) 30 $.05 $1.5 +8/20/2018 5:12p David Attenborough NSCT084 Food, Pangolin 30 $.17 $5.10 +8/21/2018 12:13p Robert Armstrong FOOD214 BFF Oh My Gravy! Duck & Salmon 2.8oz 4 $12.95 $51.8 +8/22/2018 9:38a David Attenborough BIRD160 Food, Quoll 1 29.95 $29.95 +8/22/2018 2:13p Jon Arbuckle FOOD170 Food, Adult Dog - 5kg 1 $44.95 $44.95 +8/22/2018 5:49p מרוסיה ניסנהולץ SFTY052 Fire Extinguisher, kitchen-rated 1 $61.70 $61.70 +8/24/2018 11:42a Robert Armstrong FOOD218 BFF Oh My Gravy! Chicken & Salmon 2.8oz 4 $12.95 $51.8 +8/27/2018 3:05p Monica Johnson NSCT443 Mealworms, Large (Tenebrio molitor) 100ct 1 $1.99 $1.99 +8/28/2018 5:32p Susan Ashworth CAT020 Cat, Scottish Fold (Felis catus) 1 $1,964.53 $1964.53 +8/28/2018 5:32p Susan Ashworth FOOD130 Food, Kitten 3kg 2 $14.94 $29.88 +8/29/2018 10:07a Robert Armstrong FOOD219 BFF Oh My Gravy! Chicken & Pumpkin 2.8oz 4 $12.95 $51.8 +8/31/2018 12:00a Robert Armstrong FOOD219 BFF Oh My Gravy! Chicken & Pumpkin 2.8oz 144 $12.95 $1864.8 +8/31/2018 5:57p Juan Johnson REPT217 Lizard, Spinytail (Uromastyx ornatus) 1 $99.95 $99.95 diff --git a/tests/join-concat.vdj b/tests/join-concat.vdj new file mode 100644 index 000000000..6b3402610 --- /dev/null +++ b/tests/join-concat.vdj @@ -0,0 +1,12 @@ +#!vd -p +{"longname": "open-file", "input": "sample_data/sample.tsv", "keystrokes": "o"} +{"longname": "open-file", "input": "sample_data/benchmark.csv", "keystrokes": "o"} +{"sheet": "sample", "col": "", "row": "", "longname": "columns-sheet", "input": "", "keystrokes": "Shift+C", "comment": "open Columns Sheet: edit column properties for current sheet"} +{"sheet": "benchmark", "col": "", "row": "", "longname": "columns-sheet", "input": "", "keystrokes": "Shift+C", "comment": "open Columns Sheet: edit column properties for current sheet"} +{"sheet": "benchmark_columns", "col": "", "row": "", "longname": "sheets-stack", "input": "", "keystrokes": "Shift+S", "comment": "open Sheets Stack: join or jump between the active sheets on the current stack"} +{"sheet": "sheets", "col": "", "row": "\u30adsample_columns", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} +{"sheet": "sheets", "col": "", "row": "\u30adbenchmark_columns", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} +{"sheet": "sheets", "col": "", "row": "", "longname": "join-selected", "input": "concat", "keystrokes": "&", "comment": "merge selected sheets with visible columns from all, keeping rows according to jointype"} +{"sheet": "benchmark_columns&sample_columns", "col": "name", "row": "\u30adCustomer", "longname": "edit-cell", "input": "Delilah", "keystrokes": "e", "comment": "edit contents of current cell"} +{"sheet": "benchmark_columns&sample_columns", "col": "", "row": "", "longname": "sheets-stack", "input": "", "keystrokes": "Shift+S", "comment": "open Sheets Stack: join or jump between the active sheets on the current stack"} +{"sheet": "sheets", "col": "", "row": "\u30adbenchmark", "longname": "open-row", "input": "", "keystrokes": "Enter", "comment": "open sheet referenced in current row"} From 6f313aefc54675207cd292addd2d8c07abd42639 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Wed, 11 Jan 2023 22:15:56 -0800 Subject: [PATCH 81/98] [tests] add tests for fill-col --- tests/fill-nested.vdj | 5 ++++ tests/fill.vdj | 8 ++++++ tests/golden/fill-nested.jsonl | 51 +++++++++++++++++++++++++++++++++ tests/golden/fill.vdj | 52 ++++++++++++++++++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 tests/fill-nested.vdj create mode 100644 tests/fill.vdj create mode 100644 tests/golden/fill-nested.jsonl create mode 100644 tests/golden/fill.vdj diff --git a/tests/fill-nested.vdj b/tests/fill-nested.vdj new file mode 100644 index 000000000..e2fbdcb44 --- /dev/null +++ b/tests/fill-nested.vdj @@ -0,0 +1,5 @@ +#!vd -p +{"sheet": "global", "row": "disp_formatter", "longname": "set-option", "input": "python", "keystrokes": ""} +{"longname": "open-file", "input": "sample_data/benchmark.jsonl", "keystrokes": "o"} +{"sheet": "benchmark", "col": "Customer", "row": "1", "longname": "delete-cell", "input": "", "keystrokes": "zd", "comment": "delete current cell (set to None)"} +{"sheet": "benchmark", "col": "Customer", "row": "", "longname": "setcol-fill", "input": "", "keystrokes": "f", "comment": "fills null cells in selected rows of current column with contents of non-null cells up the current column"} diff --git a/tests/fill.vdj b/tests/fill.vdj new file mode 100644 index 000000000..bbc3433ac --- /dev/null +++ b/tests/fill.vdj @@ -0,0 +1,8 @@ +#!vd -p +{"sheet": "global", "row": "disp_formatter", "longname": "set-option", "input": "python", "keystrokes": ""} +{"longname": "open-file", "input": "sample_data/benchmark.csv", "keystrokes": "o"} +{"sheet": "benchmark", "col": "Customer", "row": "3", "longname": "delete-cell", "input": "", "keystrokes": "zd", "comment": "delete current cell (set to None)"} +{"sheet": "benchmark", "col": "Customer", "row": "4", "longname": "delete-cell", "input": "", "keystrokes": "zd", "comment": "delete current cell (set to None)"} +{"sheet": "benchmark", "col": "Customer", "row": "13", "longname": "delete-cell", "input": "", "keystrokes": "zd", "comment": "delete current cell (set to None)"} +{"sheet": "benchmark", "col": "Customer", "row": "21", "longname": "delete-cell", "input": "", "keystrokes": "zd", "comment": "delete current cell (set to None)"} +{"sheet": "benchmark", "col": "Customer", "row": "", "longname": "setcol-fill", "input": "", "keystrokes": "f", "comment": "fills null cells in selected rows of current column with contents of non-null cells up the current column"} diff --git a/tests/golden/fill-nested.jsonl b/tests/golden/fill-nested.jsonl new file mode 100644 index 000000000..34fbcf7ed --- /dev/null +++ b/tests/golden/fill-nested.jsonl @@ -0,0 +1,51 @@ +{"Date": "7/3/2018 1:47p", "Customer": ["Robert Armstrong", "Dee Vasquez"], "SKU": "FOOD213", "Item": "BFF Oh My Gravy! Beef & Salmon 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "7/3/2018 3:32p", "Customer": ["Robert Armstrong", "Dee Vasquez"], "SKU": "FOOD121", "Item": "Food, Adult Cat - 3.5 oz", "Quantity": "1", "Unit": "$4.22", "Paid": "$4.22"} +{"Date": "7/5/2018 4:15p", "Customer": "Douglas \"Dougie\" Powers", "SKU": "FOOD121", "Item": "Food, Adult Cat 3.5 oz", "Quantity": "1", "Unit": "$4.22", "Paid": "$4.22"} +{"Date": "7/6/2018 12:15p", "Customer": "\u685c \u9ad8\u6a4b (Sakura Takahashi)", "SKU": "FOOD122", "Item": "Food, Senior Wet Cat - 3 oz", "Quantity": "12", "Unit": "$1.29", "Paid": "157\u00a5"} +{"Date": "7/10/2018 10:28a", "Customer": "David Attenborough", "SKU": "NSCT201", "Item": "Food, Salamander", "Quantity": "30", "Unit": "$.05", "Paid": "$1.5"} +{"Date": "7/10/2018 5:23p", "Customer": "Susan Ashworth", "SKU": "CAT060", "Item": "Cat, Korat (Felis catus)", "Quantity": "1", "Unit": "$720.42", "Paid": "$720.42"} +{"Date": "7/10/2018 5:23p", "Customer": "Susan Ashworth", "SKU": "FOOD130", "Item": "Food, Kitten 3kg", "Quantity": "1", "Unit": "$14.94", "Paid": "$14.94"} +{"Date": "7/13/2018 10:26a", "Customer": "Wil Wheaton", "SKU": "NSCT523", "Item": "Monster, Rust (Monstrus gygaxus)", "Quantity": "1", "Unit": "$39.95", "Paid": "$39.95"} +{"Date": "7/13/2018 3:49p", "Customer": "Robert Armstrong", "SKU": "FOOD216", "Item": "BFF Oh My Gravy! Chicken & Shrimp 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "7/17/2018 9:01a", "Customer": "Robert Armstrong", "SKU": "FOOD217", "Item": "BFF Oh My Gravy! Duck & Tuna 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "7/17/2018 11:30a", "Customer": "Helen Halestorm", "SKU": "LAGO342", "Item": "Rabbit (Oryctolagus cuniculus)", "Quantity": "2", "Unit": "$32.94", "Paid": "$65.88"} +{"Date": "7/18/2018 12:16p", "Customer": "\u685c \u9ad8\u6a4b (Sakura Takahashi)", "SKU": "FOOD122", "Item": "Food, Senior Wet Cat - 3 oz", "Quantity": "6", "Unit": "$1.29", "Paid": "157\u00a5"} +{"Date": "7/19/2018 10:28a", "Customer": "Rubeus Hagrid", "SKU": "FOOD170", "Item": "Food, Dog - 5kg", "Quantity": "5", "Unit": "$44.95", "Paid": "$224.75"} +{"Date": "7/20/2018 2:13p", "Customer": "Jon Arbuckle", "SKU": "FOOD167", "Item": "Food, Premium Wet Cat - 3.5 oz", "Quantity": "50", "Unit": "$3.95", "Paid": "$197.5"} +{"Date": "7/23/2018 1:41p", "Customer": "Robert Armstrong", "SKU": "FOOD215", "Item": "BFF Oh My Gravy! Lamb & Tuna 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "7/23/2018 4:23p", "Customer": "Douglas \"Dougie\" Powers", "SKU": "TOY235", "Item": "Laser Pointer", "Quantity": "1", "Unit": "$16.12", "Paid": "$16.12"} +{"Date": "7/24/2018 12:16p", "Customer": "\u685c \u9ad8\u6a4b (Sakura Takahashi)", "SKU": "FOOD122", "Item": "Food, Senior Wet Cat - 3 oz", "Quantity": "3", "Unit": "$1.29", "Paid": "157\u00a5"} +{"Date": "7/26/2018 4:39p", "Customer": "Douglas \"Dougie\" Powers", "SKU": "FOOD420", "Item": "Food, Shark - 10 kg", "Quantity": "1", "Unit": "$15.70", "Paid": "$15.7"} +{"Date": "7/27/2018 12:16p", "Customer": "\u685c \u9ad8\u6a4b (Sakura Takahashi)", "SKU": "FOOD122", "Item": "Food, Senior Wet Cat - 3 oz", "Quantity": "3", "Unit": "$1.29", "Paid": "157\u00a5"} +{"Date": "7/30/2018 12:17p", "Customer": "\u685c \u9ad8\u6a4b (Sakura Takahashi)", "SKU": "RETURN", "Item": "Food, Senior Wet Cat - 3 oz", "Quantity": "1", "Unit": "$1.29", "Paid": "157\u00a5"} +{"Date": "7/31/2018 5:42p", "Customer": "Rubeus Hagrid", "SKU": "CAT060", "Item": "Food, Dragon - 50kg", "Quantity": "5", "Unit": "$720.42", "Paid": "$3602.1"} +{"Date": "8/1/2018 2:44p", "Customer": "David Attenborough", "SKU": "FOOD360", "Item": "Food, Rhinocerous - 50kg", "Quantity": "4", "Unit": "$5.72", "Paid": "$22.88"} +{"Date": "8/2/2018 5:12p", "Customer": "Susan Ashworth", "SKU": "CAT110", "Item": "Cat, Maine Coon (Felix catus)", "Quantity": "1", "Unit": "$1,309.68", "Paid": "$1309.68"} +{"Date": "8/2/2018 5:12p", "Customer": "Susan Ashworth", "SKU": "FOOD130", "Item": "Food, Kitten 3kg", "Quantity": "3", "Unit": "$14.94", "Paid": "$44.82"} +{"Date": "8/6/2018 10:21a", "Customer": "Robert Armstrong", "SKU": "FOOD212", "Item": "BFF Oh My Gravy! Beef & Chicken 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "8/7/2018 4:12p", "Customer": "Juan Johnson", "SKU": "REPT082", "Item": "Kingsnake, California (Lampropeltis getula)", "Quantity": "1", "Unit": "$89.95", "Paid": "$89.95"} +{"Date": "8/7/2018 4:12p", "Customer": "Juan Johnson", "SKU": "RDNT443", "Item": "Mouse, Pinky (Mus musculus)", "Quantity": "1", "Unit": "$1.49", "Paid": "$1.49"} +{"Date": "8/10/2018 4:31p", "Customer": "Robert Armstrong", "SKU": "FOOD211", "Item": "BFF Oh My Gravy! Chicken & Turkey 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "8/13/2018 2:07p", "Customer": "Monica Johnson", "SKU": "RDNT443", "Item": "Mouse, Pinky (Mus musculus)", "Quantity": "1", "Unit": "$1.49", "Paid": "$1.49"} +{"Date": "8/13/2018 2:08p", "Customer": "Mar\u00eda Fern\u00e1ndez", "SKU": "FOOD146", "Item": "Forti Diet Prohealth Mouse/Rat 3lbs", "Quantity": "2", "Unit": "$2.00", "Paid": "$4.0"} +{"Date": "8/15/2018 11:57a", "Customer": "Mr. Praline", "SKU": "RETURN", "Item": "Parrot, Norwegian Blue (Mopsitta tanta)", "Quantity": "1", "Unit": "$2300.00", "Paid": "-$2300.0"} +{"Date": "8/15/2018 3:48p", "Customer": "Kyle Kennedy", "SKU": "FOOD121", "Item": "Food, Adult Cat - 3.5 oz", "Quantity": "2", "Unit": "$4.22", "Paid": "$8.44"} +{"Date": "8/16/2018 11:50a", "Customer": "Helen Halestorm", "SKU": "RETURN", "Item": "Rabbit (Oryctolagus cuniculus)", "Quantity": "6", "Unit": "$0", "Paid": "$0.0"} +{"Date": "8/16/2018 4:00p", "Customer": "Kyle Kennedy", "SKU": "DOG010", "Item": "Dog, Golden Retriever (Canis lupus familiaris)", "Quantity": "1", "Unit": "$2,495.99", "Paid": "$2495.99"} +{"Date": "8/16/2018 5:15p", "Customer": "Michael Smith", "SKU": "BIRD160", "Item": "Parakeet, Blue (Melopsittacus undulatus)", "Quantity": "1", "Unit": "29.95", "Paid": "$31.85"} +{"Date": "8/17/2018 9:26a", "Customer": "Rubeus Hagrid", "SKU": "NSCT201", "Item": "Food, Spider", "Quantity": "5", "Unit": "$.05", "Paid": "$0.25"} +{"Date": "8/20/2018 9:36a", "Customer": "Kyle Kennedy", "SKU": "RETURN", "Item": "Dog, Golden Retriever (Canis lupus familiaris)", "Quantity": "1", "Unit": "$1,247.99", "Paid": "-$1247.99"} +{"Date": "8/20/2018 1:47p", "Customer": "\u05de\u05e8\u05d5\u05e1\u05d9\u05d4 \u05e0\u05d9\u05e1\u05e0\u05d4\u05d5\u05dc\u05e5 \u05d0\u05d1\u05d5\u05dc\u05e2\u05e4\u05d9\u05d4", "SKU": "GOAT224", "Item": "Goat, American Pygmy (Capra hircus)", "Quantity": "1", "Unit": "\u20aa499", "Paid": "$160.51"} +{"Date": "8/20/2018 3:31p", "Customer": "Monica Johnson", "SKU": "NSCT201", "Item": "Crickets, Adult Live (Gryllus assimilis)", "Quantity": "30", "Unit": "$.05", "Paid": "$1.5"} +{"Date": "8/20/2018 5:12p", "Customer": "David Attenborough", "SKU": "NSCT084", "Item": "Food, Pangolin", "Quantity": "30", "Unit": "$.17", "Paid": "$5.10"} +{"Date": "8/21/2018 12:13p", "Customer": "Robert Armstrong", "SKU": "FOOD214", "Item": "BFF Oh My Gravy! Duck & Salmon 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "8/22/2018 9:38a", "Customer": "David Attenborough", "SKU": "BIRD160", "Item": "Food, Quoll", "Quantity": "1", "Unit": "29.95", "Paid": "$29.95"} +{"Date": "8/22/2018 2:13p", "Customer": "Jon Arbuckle", "SKU": "FOOD170", "Item": "Food, Adult Dog - 5kg", "Quantity": "1", "Unit": "$44.95", "Paid": "$44.95"} +{"Date": "8/22/2018 5:49p", "Customer": "\u05de\u05e8\u05d5\u05e1\u05d9\u05d4 \u05e0\u05d9\u05e1\u05e0\u05d4\u05d5\u05dc\u05e5", "SKU": "SFTY052", "Item": "Fire Extinguisher, kitchen-rated", "Quantity": "1", "Unit": "$61.70", "Paid": "$61.70"} +{"Date": "8/24/2018 11:42a", "Customer": "Robert Armstrong", "SKU": "FOOD218", "Item": "BFF Oh My Gravy! Chicken & Salmon 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "8/27/2018 3:05p", "Customer": "Monica Johnson", "SKU": "NSCT443", "Item": "Mealworms, Large (Tenebrio molitor) 100ct", "Quantity": "1", "Unit": "$1.99", "Paid": "$1.99"} +{"Date": "8/28/2018 5:32p", "Customer": "Susan Ashworth", "SKU": "CAT020", "Item": "Cat, Scottish Fold (Felis catus)", "Quantity": "1", "Unit": "$1,964.53", "Paid": "$1964.53"} +{"Date": "8/28/2018 5:32p", "Customer": "Susan Ashworth", "SKU": "FOOD130", "Item": "Food, Kitten 3kg", "Quantity": "2", "Unit": "$14.94", "Paid": "$29.88"} +{"Date": "8/29/2018 10:07a", "Customer": "Robert Armstrong", "SKU": "FOOD219", "Item": "BFF Oh My Gravy! Chicken & Pumpkin 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "8/31/2018 12:00a", "Customer": "Robert Armstrong", "SKU": "FOOD219", "Item": "BFF Oh My Gravy! Chicken & Pumpkin 2.8oz", "Quantity": "144", "Unit": "$12.95", "Paid": "$1864.8"} +{"Date": "8/31/2018 5:57p", "Customer": "Juan Johnson", "SKU": "REPT217", "Item": "Lizard, Spinytail (Uromastyx ornatus)", "Quantity": "1", "Unit": "$99.95", "Paid": "$99.95"} diff --git a/tests/golden/fill.vdj b/tests/golden/fill.vdj new file mode 100644 index 000000000..b1cb241ca --- /dev/null +++ b/tests/golden/fill.vdj @@ -0,0 +1,52 @@ +#!vd -p +{"Date": "7/3/2018 1:47p", "Customer": "Robert Armstrong", "SKU": "FOOD213", "Item": "BFF Oh My Gravy! Beef & Salmon 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "7/3/2018 3:32p", "Customer": "Kyle Kennedy", "SKU": "FOOD121", "Item": "Food, Adult Cat - 3.5 oz", "Quantity": "1", "Unit": "$4.22", "Paid": "$4.22"} +{"Date": "7/5/2018 4:15p", "Customer": "Douglas \"Dougie\" Powers", "SKU": "FOOD121", "Item": "Food, Adult Cat 3.5 oz", "Quantity": "1", "Unit": "$4.22", "Paid": "$4.22"} +{"Date": "7/6/2018 12:15p", "Customer": "Douglas \"Dougie\" Powers", "SKU": "FOOD122", "Item": "Food, Senior Wet Cat - 3 oz", "Quantity": "12", "Unit": "$1.29", "Paid": "157\u00a5"} +{"Date": "7/10/2018 10:28a", "Customer": "Douglas \"Dougie\" Powers", "SKU": "NSCT201", "Item": "Food, Salamander", "Quantity": "30", "Unit": "$.05", "Paid": "$1.5"} +{"Date": "7/10/2018 5:23p", "Customer": "Susan Ashworth", "SKU": "CAT060", "Item": "Cat, Korat (Felis catus)", "Quantity": "1", "Unit": "$720.42", "Paid": "$720.42"} +{"Date": "7/10/2018 5:23p", "Customer": "Susan Ashworth", "SKU": "FOOD130", "Item": "Food, Kitten 3kg", "Quantity": "1", "Unit": "$14.94", "Paid": "$14.94"} +{"Date": "7/13/2018 10:26a", "Customer": "Wil Wheaton", "SKU": "NSCT523", "Item": "Monster, Rust (Monstrus gygaxus)", "Quantity": "1", "Unit": "$39.95", "Paid": "$39.95"} +{"Date": "7/13/2018 3:49p", "Customer": "Robert Armstrong", "SKU": "FOOD216", "Item": "BFF Oh My Gravy! Chicken & Shrimp 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "7/17/2018 9:01a", "Customer": "Robert Armstrong", "SKU": "FOOD217", "Item": "BFF Oh My Gravy! Duck & Tuna 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "7/17/2018 11:30a", "Customer": "Helen Halestorm", "SKU": "LAGO342", "Item": "Rabbit (Oryctolagus cuniculus)", "Quantity": "2", "Unit": "$32.94", "Paid": "$65.88"} +{"Date": "7/18/2018 12:16p", "Customer": "\u685c \u9ad8\u6a4b (Sakura Takahashi)", "SKU": "FOOD122", "Item": "Food, Senior Wet Cat - 3 oz", "Quantity": "6", "Unit": "$1.29", "Paid": "157\u00a5"} +{"Date": "7/19/2018 10:28a", "Customer": "Rubeus Hagrid", "SKU": "FOOD170", "Item": "Food, Dog - 5kg", "Quantity": "5", "Unit": "$44.95", "Paid": "$224.75"} +{"Date": "7/20/2018 2:13p", "Customer": "Rubeus Hagrid", "SKU": "FOOD167", "Item": "Food, Premium Wet Cat - 3.5 oz", "Quantity": "50", "Unit": "$3.95", "Paid": "$197.5"} +{"Date": "7/23/2018 1:41p", "Customer": "Robert Armstrong", "SKU": "FOOD215", "Item": "BFF Oh My Gravy! Lamb & Tuna 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "7/23/2018 4:23p", "Customer": "Douglas \"Dougie\" Powers", "SKU": "TOY235", "Item": "Laser Pointer", "Quantity": "1", "Unit": "$16.12", "Paid": "$16.12"} +{"Date": "7/24/2018 12:16p", "Customer": "\u685c \u9ad8\u6a4b (Sakura Takahashi)", "SKU": "FOOD122", "Item": "Food, Senior Wet Cat - 3 oz", "Quantity": "3", "Unit": "$1.29", "Paid": "157\u00a5"} +{"Date": "7/26/2018 4:39p", "Customer": "Douglas \"Dougie\" Powers", "SKU": "FOOD420", "Item": "Food, Shark - 10 kg", "Quantity": "1", "Unit": "$15.70", "Paid": "$15.7"} +{"Date": "7/27/2018 12:16p", "Customer": "\u685c \u9ad8\u6a4b (Sakura Takahashi)", "SKU": "FOOD122", "Item": "Food, Senior Wet Cat - 3 oz", "Quantity": "3", "Unit": "$1.29", "Paid": "157\u00a5"} +{"Date": "7/30/2018 12:17p", "Customer": "\u685c \u9ad8\u6a4b (Sakura Takahashi)", "SKU": "RETURN", "Item": "Food, Senior Wet Cat - 3 oz", "Quantity": "1", "Unit": "$1.29", "Paid": "157\u00a5"} +{"Date": "7/31/2018 5:42p", "Customer": "Rubeus Hagrid", "SKU": "CAT060", "Item": "Food, Dragon - 50kg", "Quantity": "5", "Unit": "$720.42", "Paid": "$3602.1"} +{"Date": "8/1/2018 2:44p", "Customer": "Rubeus Hagrid", "SKU": "FOOD360", "Item": "Food, Rhinocerous - 50kg", "Quantity": "4", "Unit": "$5.72", "Paid": "$22.88"} +{"Date": "8/2/2018 5:12p", "Customer": "Susan Ashworth", "SKU": "CAT110", "Item": "Cat, Maine Coon (Felix catus)", "Quantity": "1", "Unit": "$1,309.68", "Paid": "$1309.68"} +{"Date": "8/2/2018 5:12p", "Customer": "Susan Ashworth", "SKU": "FOOD130", "Item": "Food, Kitten 3kg", "Quantity": "3", "Unit": "$14.94", "Paid": "$44.82"} +{"Date": "8/6/2018 10:21a", "Customer": "Robert Armstrong", "SKU": "FOOD212", "Item": "BFF Oh My Gravy! Beef & Chicken 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "8/7/2018 4:12p", "Customer": "Juan Johnson", "SKU": "REPT082", "Item": "Kingsnake, California (Lampropeltis getula)", "Quantity": "1", "Unit": "$89.95", "Paid": "$89.95"} +{"Date": "8/7/2018 4:12p", "Customer": "Juan Johnson", "SKU": "RDNT443", "Item": "Mouse, Pinky (Mus musculus)", "Quantity": "1", "Unit": "$1.49", "Paid": "$1.49"} +{"Date": "8/10/2018 4:31p", "Customer": "Robert Armstrong", "SKU": "FOOD211", "Item": "BFF Oh My Gravy! Chicken & Turkey 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "8/13/2018 2:07p", "Customer": "Monica Johnson", "SKU": "RDNT443", "Item": "Mouse, Pinky (Mus musculus)", "Quantity": "1", "Unit": "$1.49", "Paid": "$1.49"} +{"Date": "8/13/2018 2:08p", "Customer": "Mar\u00eda Fern\u00e1ndez", "SKU": "FOOD146", "Item": "Forti Diet Prohealth Mouse/Rat 3lbs", "Quantity": "2", "Unit": "$2.00", "Paid": "$4.0"} +{"Date": "8/15/2018 11:57a", "Customer": "Mr. Praline", "SKU": "RETURN", "Item": "Parrot, Norwegian Blue (Mopsitta tanta)", "Quantity": "1", "Unit": "$2300.00", "Paid": "-$2300.0"} +{"Date": "8/15/2018 3:48p", "Customer": "Kyle Kennedy", "SKU": "FOOD121", "Item": "Food, Adult Cat - 3.5 oz", "Quantity": "2", "Unit": "$4.22", "Paid": "$8.44"} +{"Date": "8/16/2018 11:50a", "Customer": "Helen Halestorm", "SKU": "RETURN", "Item": "Rabbit (Oryctolagus cuniculus)", "Quantity": "6", "Unit": "$0", "Paid": "$0.0"} +{"Date": "8/16/2018 4:00p", "Customer": "Kyle Kennedy", "SKU": "DOG010", "Item": "Dog, Golden Retriever (Canis lupus familiaris)", "Quantity": "1", "Unit": "$2,495.99", "Paid": "$2495.99"} +{"Date": "8/16/2018 5:15p", "Customer": "Michael Smith", "SKU": "BIRD160", "Item": "Parakeet, Blue (Melopsittacus undulatus)", "Quantity": "1", "Unit": "29.95", "Paid": "$31.85"} +{"Date": "8/17/2018 9:26a", "Customer": "Rubeus Hagrid", "SKU": "NSCT201", "Item": "Food, Spider", "Quantity": "5", "Unit": "$.05", "Paid": "$0.25"} +{"Date": "8/20/2018 9:36a", "Customer": "Kyle Kennedy", "SKU": "RETURN", "Item": "Dog, Golden Retriever (Canis lupus familiaris)", "Quantity": "1", "Unit": "$1,247.99", "Paid": "-$1247.99"} +{"Date": "8/20/2018 1:47p", "Customer": "\u05de\u05e8\u05d5\u05e1\u05d9\u05d4 \u05e0\u05d9\u05e1\u05e0\u05d4\u05d5\u05dc\u05e5 \u05d0\u05d1\u05d5\u05dc\u05e2\u05e4\u05d9\u05d4", "SKU": "GOAT224", "Item": "Goat, American Pygmy (Capra hircus)", "Quantity": "1", "Unit": "\u20aa499", "Paid": "$160.51"} +{"Date": "8/20/2018 3:31p", "Customer": "Monica Johnson", "SKU": "NSCT201", "Item": "Crickets, Adult Live (Gryllus assimilis)", "Quantity": "30", "Unit": "$.05", "Paid": "$1.5"} +{"Date": "8/20/2018 5:12p", "Customer": "David Attenborough", "SKU": "NSCT084", "Item": "Food, Pangolin", "Quantity": "30", "Unit": "$.17", "Paid": "$5.10"} +{"Date": "8/21/2018 12:13p", "Customer": "Robert Armstrong", "SKU": "FOOD214", "Item": "BFF Oh My Gravy! Duck & Salmon 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "8/22/2018 9:38a", "Customer": "David Attenborough", "SKU": "BIRD160", "Item": "Food, Quoll", "Quantity": "1", "Unit": "29.95", "Paid": "$29.95"} +{"Date": "8/22/2018 2:13p", "Customer": "Jon Arbuckle", "SKU": "FOOD170", "Item": "Food, Adult Dog - 5kg", "Quantity": "1", "Unit": "$44.95", "Paid": "$44.95"} +{"Date": "8/22/2018 5:49p", "Customer": "\u05de\u05e8\u05d5\u05e1\u05d9\u05d4 \u05e0\u05d9\u05e1\u05e0\u05d4\u05d5\u05dc\u05e5", "SKU": "SFTY052", "Item": "Fire Extinguisher, kitchen-rated", "Quantity": "1", "Unit": "$61.70", "Paid": "$61.70"} +{"Date": "8/24/2018 11:42a", "Customer": "Robert Armstrong", "SKU": "FOOD218", "Item": "BFF Oh My Gravy! Chicken & Salmon 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "8/27/2018 3:05p", "Customer": "Monica Johnson", "SKU": "NSCT443", "Item": "Mealworms, Large (Tenebrio molitor) 100ct", "Quantity": "1", "Unit": "$1.99", "Paid": "$1.99"} +{"Date": "8/28/2018 5:32p", "Customer": "Susan Ashworth", "SKU": "CAT020", "Item": "Cat, Scottish Fold (Felis catus)", "Quantity": "1", "Unit": "$1,964.53", "Paid": "$1964.53"} +{"Date": "8/28/2018 5:32p", "Customer": "Susan Ashworth", "SKU": "FOOD130", "Item": "Food, Kitten 3kg", "Quantity": "2", "Unit": "$14.94", "Paid": "$29.88"} +{"Date": "8/29/2018 10:07a", "Customer": "Robert Armstrong", "SKU": "FOOD219", "Item": "BFF Oh My Gravy! Chicken & Pumpkin 2.8oz", "Quantity": "4", "Unit": "$12.95", "Paid": "$51.8"} +{"Date": "8/31/2018 12:00a", "Customer": "Robert Armstrong", "SKU": "FOOD219", "Item": "BFF Oh My Gravy! Chicken & Pumpkin 2.8oz", "Quantity": "144", "Unit": "$12.95", "Paid": "$1864.8"} +{"Date": "8/31/2018 5:57p", "Customer": "Juan Johnson", "SKU": "REPT217", "Item": "Lizard, Spinytail (Uromastyx ornatus)", "Quantity": "1", "Unit": "$99.95", "Paid": "$99.95"} From 3c9d5e15988b84723061859fe36d1716b252409b Mon Sep 17 00:00:00 2001 From: anjakefala Date: Wed, 11 Jan 2023 22:26:15 -0800 Subject: [PATCH 82/98] [tests] add test for dup-sheet carrying over add-column attrs --- tests/add-col-dup-attrs.vdj | 9 +++++++++ tests/golden/add-col-dup-attrs.tsv | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 tests/add-col-dup-attrs.vdj create mode 100644 tests/golden/add-col-dup-attrs.tsv diff --git a/tests/add-col-dup-attrs.vdj b/tests/add-col-dup-attrs.vdj new file mode 100644 index 000000000..9c21e82b0 --- /dev/null +++ b/tests/add-col-dup-attrs.vdj @@ -0,0 +1,9 @@ +#!vd -p +{"longname": "open-file", "input": "sample_data/sample.tsv", "keystrokes": "o"} +{"sheet": "sample", "col": "Units", "row": "", "longname": "addcol-new", "input": "integers", "keystrokes": "za", "comment": "append an empty column"} +{"sheet": "sample", "col": "", "row": "", "longname": "select-rows", "input": "", "keystrokes": "gs", "comment": "select all rows"} +{"sheet": "sample", "col": "integers", "row": "", "longname": "setcol-iter", "input": "range(1, 100)", "keystrokes": "gz=", "comment": "set current column for selected rows to the items in result of Python sequence expression"} +{"sheet": "sample", "col": "integers", "row": "", "longname": "type-int", "input": "", "keystrokes": "#", "comment": "set type of current column to int"} +{"sheet": "sample", "col": "integers", "row": "", "longname": "aggregate-col", "input": "mean", "keystrokes": "+", "comment": "Add aggregator to current column"} +{"sheet": "sample", "col": "", "row": "", "longname": "dup-selected", "input": "", "keystrokes": "\"", "comment": "open duplicate sheet with only selected rows"} +{"sheet": "sample_selectedref", "col": "", "row": "", "longname": "columns-sheet", "input": "", "keystrokes": "Shift+C", "comment": "open Columns Sheet: edit column properties for current sheet"} diff --git a/tests/golden/add-col-dup-attrs.tsv b/tests/golden/add-col-dup-attrs.tsv new file mode 100644 index 000000000..24a59540c --- /dev/null +++ b/tests/golden/add-col-dup-attrs.tsv @@ -0,0 +1,9 @@ +name width height type fmtstr formatter value expr aggregators +OrderDate 12 1 2016-01-06 0 +Region 9 1 East 1 +Rep 10 1 Jones 2 +Item 9 1 Pencil 3 +Units 7 1 int 95 4 +integers 10 1 int 1 mean +Unit_Cost 11 1 1.99 5 +Total 9 1 189.05 6 From 9a5aa877093d72ae2e58e56c6989e7d7ecd6c2a6 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Wed, 11 Jan 2023 21:30:41 -0800 Subject: [PATCH 83/98] [menu] 2x ESC should exit menu, with more than timeout between them --- visidata/menu.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/visidata/menu.py b/visidata/menu.py index 530a3f0ea..04d929a09 100644 --- a/visidata/menu.py +++ b/visidata/menu.py @@ -742,14 +742,20 @@ def runMenu(vd): k = vd.getkeystroke(vd.scrMenu, sheet) + if not k: + continue + currentItem = getMenuItem(sheet) if k == '^[': # ESC nEscapes += 1 #1470 + if nEscapes > 1: + return + continue else: nEscapes = 0 - if nEscapes > 1 or k in ['^C', '^Q', 'q']: + if k in ['^C', '^Q', 'q']: return elif k in ['KEY_MOUSE']: @@ -789,6 +795,8 @@ def runMenu(vd): elif k in main_menu.keys(): sheet.pressMenu(main_menu[k]) + else: + vd.warning(f'unknown keystroke {k}') sheet.checkMenu() From 5e2b7ebb7374f8263ac2e8dadb5623f9a4ab96b5 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Wed, 11 Jan 2023 14:46:35 -0800 Subject: [PATCH 84/98] [sqlite] add options.sqlite_onconnect #1622 --- visidata/loaders/sqlite.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/visidata/loaders/sqlite.py b/visidata/loaders/sqlite.py index 1e01a6599..2ed2e8539 100644 --- a/visidata/loaders/sqlite.py +++ b/visidata/loaders/sqlite.py @@ -3,6 +3,9 @@ from visidata import VisiData, vd, Sheet, options, Column, Progress, anytype, ColumnItem, asyncthread, TypedExceptionWrapper, TypedWrapper, IndexSheet, copy, clean_to_id, vlen from visidata.type_date import date +vd.option('sqlite_onconnect', '', 'sqlite statement to execute after opening a connection') + + def requery(url, **kwargs): 'Return *url* with added or replaced query parameters from *kwargs*.' from urllib.parse import urlencode, urlparse, parse_qsl, urlunparse @@ -42,6 +45,8 @@ def conn(self): con = sqlite3.connect(url, uri=True, **self.options.getall('sqlite_connect_')) con.text_factory = lambda s, enc=self.options.encoding, encerrs=self.options.encoding_errors: s.decode(enc, encerrs) + if self.options.sqlite_onconnect: + con.execute(self.options.sqlite_onconnect) return con def execute(self, conn, sql, parms=None): From b494c59fb43a58219bc79870a489a3ca7673d104 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Fri, 13 Jan 2023 21:07:43 -0800 Subject: [PATCH 85/98] [tests] fix golden --- tests/golden/add-col-dup-attrs.tsv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/golden/add-col-dup-attrs.tsv b/tests/golden/add-col-dup-attrs.tsv index 24a59540c..5d3d7c913 100644 --- a/tests/golden/add-col-dup-attrs.tsv +++ b/tests/golden/add-col-dup-attrs.tsv @@ -3,7 +3,7 @@ OrderDate 12 1 2016-01-06 0 Region 9 1 East 1 Rep 10 1 Jones 2 Item 9 1 Pencil 3 -Units 7 1 int 95 4 +Units 7 1 95 4 integers 10 1 int 1 mean Unit_Cost 11 1 1.99 5 Total 9 1 189.05 6 From 99f56afe26713c0a83b7095ed4b9a145ff1b25dd Mon Sep 17 00:00:00 2001 From: anjakefala Date: Fri, 13 Jan 2023 21:18:47 -0800 Subject: [PATCH 86/98] [tests] fill uses someSelectedRows --- tests/fill-nested.vdj | 2 +- tests/fill.vdj | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/fill-nested.vdj b/tests/fill-nested.vdj index e2fbdcb44..c223c0e29 100644 --- a/tests/fill-nested.vdj +++ b/tests/fill-nested.vdj @@ -1,5 +1,5 @@ #!vd -p -{"sheet": "global", "row": "disp_formatter", "longname": "set-option", "input": "python", "keystrokes": ""} {"longname": "open-file", "input": "sample_data/benchmark.jsonl", "keystrokes": "o"} {"sheet": "benchmark", "col": "Customer", "row": "1", "longname": "delete-cell", "input": "", "keystrokes": "zd", "comment": "delete current cell (set to None)"} +{"sheet": "benchmark", "col": "", "row": "1", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "select current row"} {"sheet": "benchmark", "col": "Customer", "row": "", "longname": "setcol-fill", "input": "", "keystrokes": "f", "comment": "fills null cells in selected rows of current column with contents of non-null cells up the current column"} diff --git a/tests/fill.vdj b/tests/fill.vdj index bbc3433ac..ada11b0a2 100644 --- a/tests/fill.vdj +++ b/tests/fill.vdj @@ -2,7 +2,11 @@ {"sheet": "global", "row": "disp_formatter", "longname": "set-option", "input": "python", "keystrokes": ""} {"longname": "open-file", "input": "sample_data/benchmark.csv", "keystrokes": "o"} {"sheet": "benchmark", "col": "Customer", "row": "3", "longname": "delete-cell", "input": "", "keystrokes": "zd", "comment": "delete current cell (set to None)"} +{"sheet": "benchmark", "col": "Customer", "row": "3", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "delete current cell (set to None)"} {"sheet": "benchmark", "col": "Customer", "row": "4", "longname": "delete-cell", "input": "", "keystrokes": "zd", "comment": "delete current cell (set to None)"} +{"sheet": "benchmark", "col": "Customer", "row": "4", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "delete current cell (set to None)"} {"sheet": "benchmark", "col": "Customer", "row": "13", "longname": "delete-cell", "input": "", "keystrokes": "zd", "comment": "delete current cell (set to None)"} +{"sheet": "benchmark", "col": "Customer", "row": "13", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "delete current cell (set to None)"} {"sheet": "benchmark", "col": "Customer", "row": "21", "longname": "delete-cell", "input": "", "keystrokes": "zd", "comment": "delete current cell (set to None)"} +{"sheet": "benchmark", "col": "Customer", "row": "21", "longname": "select-row", "input": "", "keystrokes": "s", "comment": "delete current cell (set to None)"} {"sheet": "benchmark", "col": "Customer", "row": "", "longname": "setcol-fill", "input": "", "keystrokes": "f", "comment": "fills null cells in selected rows of current column with contents of non-null cells up the current column"} From 85140f06f7c218d72ecc6c7d456e757c7527f1b5 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Fri, 13 Jan 2023 21:19:44 -0800 Subject: [PATCH 87/98] [macros] fix replay since 35ca095b5 --- visidata/_open.py | 4 ++-- visidata/macros.py | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/visidata/_open.py b/visidata/_open.py index eb3a24761..493e580d2 100644 --- a/visidata/_open.py +++ b/visidata/_open.py @@ -126,9 +126,9 @@ def loadInternalSheet(vd, cls, p, **kwargs): vs = cls(p.name, source=p, **kwargs) options._set('encoding', 'utf8', vs) if p.exists(): - vd.sheets.insert(0, vs) +# vd.sheets.insert(0, vs) # broke replay with macros.reload() vs.reload.__wrapped__(vs) - vd.sheets.pop(0) +# vd.sheets.pop(0) return vs diff --git a/visidata/macros.py b/visidata/macros.py index 02db3b704..c31b4bbba 100644 --- a/visidata/macros.py +++ b/visidata/macros.py @@ -8,9 +8,7 @@ class MacroSheet(IndexSheet): - def reload(self): - self.rows = [] - vd.sync(self.source.reload()) + def iterload(self): for ks, fn in self.source.rows: fp = Path(fn) if fp.ext == 'vd': @@ -21,7 +19,7 @@ def reload(self): vd.warning(f'failed to load macro {fn}') continue setMacro(ks, vs) - self.addRow(vs) + yield vs @@ -55,7 +53,8 @@ def saveMacro(self, rows, ks): vd.save_vdj(macropath, vs) setMacro(ks, vs) vd.macrosheet.source.append_tsv_row((ks, macropath)) - vd.macrosheet.addRow(vd.loadInternalSheet(CommandLogJsonl, macropath)) + vd.sync(vd.macrosheet.source.reload()) + vd.sync(vd.macrosheet.reload()) @CommandLogJsonl.api @wraps(CommandLogJsonl.afterExecSheet) From faa77308e30edd48656dafab256f0d1b7adae6ab Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sat, 14 Jan 2023 18:51:24 -0800 Subject: [PATCH 88/98] [build] update for PEP 420 Closes #1675 --- setup.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index d458931d9..4e6445ec2 100755 --- a/setup.py +++ b/setup.py @@ -20,16 +20,15 @@ 'visidata=visidata.main:vd_cli' ], }, - py_modules = ['visidata'], + py_modules=['visidata'], install_requires=[ 'python-dateutil', 'windows-curses; platform_system == "Windows"', 'importlib-metadata >= 3.6', ], - packages=['visidata', 'visidata.loaders', 'visidata.vendor', 'visidata.tests'], - include_package_data=True, - data_files = [('share/man/man1', ['visidata/man/vd.1', 'visidata/man/visidata.1'])], - package_data={'visidata': ['man/vd.1', 'man/vd.txt', 'ddw/input.ddw', 'tests/sample.tsv']}, + packages=['visidata', 'visidata.loaders', 'visidata.vendor', 'visidata.tests', 'visidata.ddw', 'visidata.man'], + data_files=[('share/man/man1', ['visidata/man/vd.1', 'visidata/man/visidata.1'])], + package_data={'visidata.man': ['vd.1', 'vd.txt'], 'visidata.ddw': ['input.ddw'], 'visidata.tests': ['sample.tsv']}, license='GPLv3', classifiers=[ 'Development Status :: 5 - Production/Stable', From ed5c8fc9f9d18d096494720b16900f1901cfa169 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sat, 14 Jan 2023 22:08:53 -0800 Subject: [PATCH 89/98] [dev] update CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a5f116a1..d060f74b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ - edit cells in multiple rows in `$EDITOR` - only handles cell modifications, not added or deleted rows +- [build] update data files in setup.py based on PEP 420 (reported by @Oblomov #1675) + ## Improvements - [aggregators] add 95 and 99 percentile (p95 and p99) @@ -20,6 +22,7 @@ - [graph] fail if no numeric xcols are given - [open-cell-files] warn when file or url in cell does not exist (requested by @geekscrapy #1540) - [sqlite] add passthrough options (reported by @cwarden #1622) +- [sqlite] add options.sqlite_onconnect to be executed before running any statement (requested by @cwarden #1622) - [xml] add passthrough options for xml_parser; default xml_parser_huge_tree=True (PR by @midichef #1668) ## Bugfixes @@ -38,7 +41,9 @@ - [macros] query again for keystroke if used by existing macro (#1658) - [macros] do not include `nonLogged` commands in macro (reported by @geekscrapy #1569) - [macros] add reload for **MacroSheet** (reported by @geekscrapy #1569) +- [menu] 2x ESC should exit menu - [mouse] fix mouse-clicks on statusbar when splitpane is off (reported by @frosencrantz #1625) +- [numpy] fix loader - [open_txt] fix Exception with `open-config` when no `~/.visidatarc` (reported by @gunchev #1611) - [pdb] fix entering of pdb breakpoints for Python 3.9+ (reported by @jasonwirth #1317) - [sheets] sort all sheets on global **Sheets Sheet** (reported by @franzhuang #1620) From 3b331ed0cbbe9eee5426a54f0c60303454eb366f Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sun, 15 Jan 2023 00:08:06 -0800 Subject: [PATCH 90/98] [dev] update CHANGELOG --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d060f74b4..763862beb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,6 @@ - edit cells in multiple rows in `$EDITOR` - only handles cell modifications, not added or deleted rows -- [build] update data files in setup.py based on PEP 420 (reported by @Oblomov #1675) ## Improvements @@ -20,7 +19,7 @@ - [fill-col] speed up `fill-col` for sheets with many empty cells (PR by @midichef #1657) - [loaders hdf5] add support for arrays of scalars (requested by @linwaytin #1602) - [graph] fail if no numeric xcols are given -- [open-cell-files] warn when file or url in cell does not exist (requested by @geekscrapy #1540) +- [open-cell-file] warn when file or url in cell does not exist (requested by @geekscrapy #1540) - [sqlite] add passthrough options (reported by @cwarden #1622) - [sqlite] add options.sqlite_onconnect to be executed before running any statement (requested by @cwarden #1622) - [xml] add passthrough options for xml_parser; default xml_parser_huge_tree=True (PR by @midichef #1668) @@ -34,6 +33,7 @@ - [dirsheet] fix incorrect filename with multiple extensions (reported by @kunliugithub #1571) - [display] show `disp_oddspace` for surrogate escapes (reported by @geekscrapy #1544) - [install] ensure setuptools files have appropriate permissions (reported by @icp1994 #1591) +- [install] update data files in setup.py based on PEP 420 (reported by @Oblomov #1675) - [keystrokes] add `kDN` and `kUP` to translation table (reported by @djpohly #1336) - [loaders html] fix loading of relative links in html table (reported by @frosencrantz #1599) - [loaders xlsx] store `None` as empty string in `save_xlsx` (reported and PR by @dbaynard #1626 #1629) From 60437c30ba919fbc01b7844167acd02192984e18 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Fri, 13 Jan 2023 11:30:30 -0800 Subject: [PATCH 91/98] [graph-] fix div-by-zero with only one y value #1673 --- visidata/canvas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/canvas.py b/visidata/canvas.py index bd783c234..48beb67e0 100644 --- a/visidata/canvas.py +++ b/visidata/canvas.py @@ -482,7 +482,7 @@ def resetBounds(self): if ymin is None or y < ymin: ymin = y if xmax is None or x > xmax: xmax = x if ymax is None or y > ymax: ymax = y - self.canvasBox = BoundingBox(float(xmin or 0), float(ymin or 0), float(xmax or 1), float(ymax or 1)) + self.canvasBox = BoundingBox(float(xmin or 0), float(ymin or 0), float(xmax or 0)+1, float(ymax or 0)+1) if not self.visibleBox: # initialize minx/miny, but w/h must be set first to center properly From 3e2f9d115c8cd2a389fba945b5f10eee860402e8 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Thu, 12 Jan 2023 15:21:48 -0800 Subject: [PATCH 92/98] [status-] use MissingAttrFormatter for leftStatus --- visidata/statusbar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visidata/statusbar.py b/visidata/statusbar.py index edf6ad227..f6e2909aa 100644 --- a/visidata/statusbar.py +++ b/visidata/statusbar.py @@ -97,7 +97,7 @@ def composeStatus(msgparts, n): @BaseSheet.api def leftStatus(sheet): 'Return left side of status bar for this sheet. Overridable.' - return options.disp_status_fmt.format(sheet=sheet, vd=vd) + return MissingAttrFormatter().format(sheet.options.disp_status_fmt, sheet=sheet, vd=vd) @VisiData.api From 09082ffd64c67463311359f44ffa0bfbdc189de6 Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Fri, 13 Jan 2023 17:04:56 -0800 Subject: [PATCH 93/98] [types-] format int/vlen as true int #1674 --- visidata/_types.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/visidata/_types.py b/visidata/_types.py index 00874f358..54e60ce5c 100644 --- a/visidata/_types.py +++ b/visidata/_types.py @@ -6,7 +6,7 @@ #__all__ = ['anytype', 'vdtype', ] vd.option('disp_float_fmt', '{:.02f}', 'default fmtstr to format for float values', replay=True) -vd.option('disp_int_fmt', '{:.0f}', 'default fmtstr to format for int values', replay=True) +vd.option('disp_int_fmt', '{:d}', 'default fmtstr to format for int values', replay=True) vd.numericTypes = [int,float] @@ -108,7 +108,7 @@ def floatlocale(*args): return locale.atof(*args) -@vd.numericType('♯', fmtstr='%.0f') +@vd.numericType('♯', fmtstr='%d') class vlen(int): def __new__(cls, v=0): if isinstance(v, (vlen, int, float)): From a1bbc782a23f5324f76f06c68935989d2d4ee4cb Mon Sep 17 00:00:00 2001 From: Saul Pwanson Date: Sun, 15 Jan 2023 17:30:23 -0800 Subject: [PATCH 94/98] [mouse-] fix splitpane click --- visidata/mainloop.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/visidata/mainloop.py b/visidata/mainloop.py index dda3a6fb8..b00e08820 100644 --- a/visidata/mainloop.py +++ b/visidata/mainloop.py @@ -263,11 +263,12 @@ def mainloop(self, scr): topPaneActive = ((vd.activePane == 2 and pct < 0) or (vd.activePane == 1 and pct > 0)) bottomPaneActive = ((vd.activePane == 1 and pct < 0) or (vd.activePane == 2 and pct > 0)) - if (bottomPaneActive and winname == 'top') or (topPaneActive and winname == 'bot'): - self.activePane = 1 if self.activePane == 2 else 2 - sheet = self.activeSheet + r = vd.parseMouse(top=vd.winTop, bot=vd.winBottom, menu=vd.scrMenu) + for keystroke, y, x, winname, winscr in reversed(r): + if (bottomPaneActive and winname == 'top') or (topPaneActive and winname == 'bot'): + self.activePane = 1 if self.activePane == 2 else 2 + sheet = self.activeSheet - for keystroke, y, x, winname, winscr in vd.parseMouse(top=vd.winTop, bot=vd.winBottom, menu=vd.scrMenu): f = self.getMouse(winscr, x, y, keystroke) sheet.mouseX, sheet.mouseY = x, y if f: From 405cf8f231f467e32ca7795153181b55b99679b3 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sun, 15 Jan 2023 18:16:01 -0800 Subject: [PATCH 95/98] [tests] add for load-numpy and type-customdate --- tests/golden/load-numpy.tsv | 1048 ++++++++++++++++++++++++++++++ tests/golden/type-customdate.tsv | 44 ++ tests/load-numpy.vdj | 3 + tests/type-customdate.vdj | 7 + 4 files changed, 1102 insertions(+) create mode 100644 tests/golden/load-numpy.tsv create mode 100644 tests/golden/type-customdate.tsv create mode 100644 tests/load-numpy.vdj create mode 100644 tests/type-customdate.vdj diff --git a/tests/golden/load-numpy.tsv b/tests/golden/load-numpy.tsv new file mode 100644 index 000000000..642354e9a --- /dev/null +++ b/tests/golden/load-numpy.tsv @@ -0,0 +1,1048 @@ +date open high low close volume adj_close +2004-08-19 100.0 104.06 95.96 100.34 22351900 100.34 +2004-08-20 101.01 109.08 100.5 108.31 11428600 108.31 +2004-08-23 110.75 113.48 109.05 109.4 9137200 109.4 +2004-08-24 111.24 111.6 103.57 104.87 7631300 104.87 +2004-08-25 104.96 108.0 103.88 106.0 4598900 106.0 +2004-08-26 104.95 107.95 104.66 107.91 3551000 107.91 +2004-08-27 108.1 108.62 105.69 106.15 3109000 106.15 +2004-08-30 105.28 105.49 102.01 102.01 2601000 102.01 +2004-08-31 102.3 103.71 102.16 102.37 2461400 102.37 +2004-09-01 102.7 102.97 99.67 100.25 4573700 100.25 +2004-09-02 99.19 102.37 98.94 101.51 7566900 101.51 +2004-09-03 100.95 101.74 99.32 100.01 2578800 100.01 +2004-09-07 101.01 102.0 99.61 101.58 2926700 101.58 +2004-09-08 100.74 103.03 100.5 102.3 2495300 102.3 +2004-09-09 102.53 102.71 101.0 102.31 2032900 102.31 +2004-09-10 101.6 106.56 101.3 105.33 4353800 105.33 +2004-09-13 106.63 108.41 106.46 107.5 3926000 107.5 +2004-09-14 107.45 112.0 106.79 111.49 5419900 111.49 +2004-09-15 110.56 114.23 110.2 112.0 5361900 112.0 +2004-09-16 112.34 115.8 111.65 113.97 4637800 113.97 +2004-09-17 114.42 117.49 113.55 117.49 4741000 117.49 +2004-09-20 116.95 121.6 116.77 119.36 5319700 119.36 +2004-09-21 119.81 120.42 117.51 117.84 3618000 117.84 +2004-09-22 117.4 119.67 116.81 118.38 3794400 118.38 +2004-09-23 118.84 122.63 117.02 120.82 4272100 120.82 +2004-09-24 120.94 124.1 119.76 119.83 4566300 119.83 +2004-09-27 119.56 120.88 117.8 118.26 3536600 118.26 +2004-09-28 121.3 127.4 120.21 126.86 8473000 126.86 +2004-09-29 126.7 135.02 126.23 131.08 15273500 131.08 +2004-09-30 129.9 132.3 129.0 129.6 6885900 129.6 +2004-10-01 130.8 134.24 128.9 132.58 7570000 132.58 +2004-10-04 135.25 136.87 134.03 135.06 6517900 135.06 +2004-10-05 134.66 138.53 132.24 138.37 7494100 138.37 +2004-10-06 137.55 138.45 136.0 137.08 6697400 137.08 +2004-10-07 136.92 139.88 136.55 138.85 7064600 138.85 +2004-10-08 138.72 139.68 137.02 137.73 5540300 137.73 +2004-10-11 137.0 138.86 133.85 135.26 5241300 135.26 +2004-10-12 134.44 137.61 133.4 137.4 5838600 137.4 +2004-10-13 143.32 143.55 140.08 140.9 9893000 140.9 +2004-10-14 141.01 142.38 138.56 142.0 5226300 142.0 +2004-10-15 144.93 145.5 141.95 144.11 6604000 144.11 +2004-10-18 143.2 149.2 141.21 149.16 7025200 149.16 +2004-10-19 150.5 152.4 147.35 147.94 9064000 147.94 +2004-10-20 148.03 148.99 139.6 140.49 11372700 140.49 +2004-10-21 144.4 150.13 141.62 149.38 14589500 149.38 +2004-10-22 170.54 180.17 164.08 172.43 36891900 172.43 +2004-10-25 176.4 194.43 172.55 187.4 32764200 187.4 +2004-10-26 186.34 192.64 180.0 181.8 22307100 181.8 +2004-10-27 182.72 189.52 181.77 185.97 13356500 185.97 +2004-10-28 186.68 194.39 185.6 193.3 14846800 193.3 +2004-10-29 198.89 199.95 190.6 190.64 21162500 190.64 +2004-11-01 193.55 197.67 191.27 196.03 12224900 196.03 +2004-11-02 198.78 199.25 193.34 194.87 11346300 194.87 +2004-11-03 198.18 201.6 190.75 191.67 13888700 191.67 +2004-11-04 188.44 190.4 183.35 184.7 14409600 184.7 +2004-11-05 181.98 182.3 168.55 169.35 19833100 169.35 +2004-11-08 170.93 175.44 169.4 172.55 11191800 172.55 +2004-11-09 174.1 175.2 165.27 168.7 11064200 168.7 +2004-11-10 170.67 172.52 166.33 167.86 10644000 167.86 +2004-11-11 169.13 183.75 167.57 183.02 14985500 183.02 +2004-11-12 185.23 189.8 177.4 182.0 16746100 182.0 +2004-11-15 180.45 188.32 178.75 184.87 11901500 184.87 +2004-11-16 177.5 179.47 170.83 172.54 20917400 172.54 +2004-11-17 169.02 177.5 169.0 172.5 18132900 172.5 +2004-11-18 170.29 174.42 165.73 167.54 16629600 167.54 +2004-11-19 169.1 169.98 166.52 169.4 8769300 169.4 +2004-11-22 164.47 169.5 161.31 165.1 12368200 165.1 +2004-11-23 167.97 170.83 166.5 167.52 12413300 167.52 +2004-11-24 174.82 177.21 172.51 174.76 15281000 174.76 +2004-11-26 175.8 180.03 175.32 179.39 6480100 179.39 +2004-11-29 180.36 182.95 177.51 181.05 10666600 181.05 +2004-11-30 180.71 183.0 180.25 181.98 7700000 181.98 +2004-12-01 181.95 182.5 179.55 179.96 7864100 179.96 +2004-12-02 179.9 181.51 178.55 179.4 6260900 179.4 +2004-12-03 179.95 181.06 177.6 180.4 5869200 180.4 +2004-12-06 179.13 180.7 176.02 176.29 6254000 176.29 +2004-12-07 176.0 176.2 170.55 171.43 6870900 171.43 +2004-12-08 170.35 173.68 168.73 169.98 7541800 169.98 +2004-12-09 170.25 173.5 168.47 173.43 7654000 173.43 +2004-12-10 173.43 174.88 171.29 171.65 4317200 171.65 +2004-12-13 172.17 173.18 169.45 170.45 4818600 170.45 +2004-12-14 171.0 178.82 169.6 178.69 11088400 178.69 +2004-12-15 177.99 180.69 176.66 179.78 11471000 179.78 +2004-12-16 176.95 180.49 175.95 176.47 8572800 176.47 +2004-12-17 176.76 180.5 176.55 180.08 7386200 180.08 +2004-12-20 182.0 188.46 181.87 185.02 9834500 185.02 +2004-12-21 186.31 187.88 183.4 183.75 5516300 183.75 +2004-12-22 183.9 186.85 183.01 186.3 3907000 186.3 +2004-12-23 187.45 188.6 186.0 187.9 3614600 187.9 +2004-12-27 189.15 193.3 189.1 191.91 6104100 191.91 +2004-12-28 192.11 193.55 191.01 192.76 4145800 192.76 +2004-12-29 191.78 193.52 191.78 192.9 2678100 192.9 +2004-12-30 192.97 198.23 191.85 197.6 5904300 197.6 +2004-12-31 199.23 199.88 192.56 192.79 7668500 192.79 +2005-01-03 197.4 203.64 195.46 202.71 15844200 202.71 +2005-01-04 201.4 202.93 193.48 194.5 13755900 194.5 +2005-01-05 193.45 196.9 192.23 193.51 8236600 193.51 +2005-01-06 195.08 195.9 187.72 188.55 10387100 188.55 +2005-01-07 190.64 194.25 188.78 193.85 9662900 193.85 +2005-01-10 194.5 198.1 191.83 195.06 7539600 195.06 +2005-01-11 195.62 197.71 193.18 193.54 6958700 193.54 +2005-01-12 194.33 195.93 190.5 195.38 8177800 195.38 +2005-01-13 195.38 197.39 194.05 195.33 6849400 195.33 +2005-01-14 196.0 200.01 194.13 199.97 9640300 199.97 +2005-01-18 200.97 205.02 198.66 203.9 13172600 203.9 +2005-01-19 204.65 205.3 196.71 197.3 11257700 197.3 +2005-01-20 192.5 196.25 192.0 193.92 9001600 193.92 +2005-01-21 194.54 195.36 188.12 188.28 9258400 188.28 +2005-01-24 188.69 189.33 180.32 180.72 14022700 180.72 +2005-01-25 181.94 182.24 176.29 177.12 10659200 177.12 +2005-01-26 179.27 189.41 179.15 189.24 12307900 189.24 +2005-01-27 188.76 188.86 185.2 188.08 6627400 188.08 +2005-01-28 190.02 194.7 186.34 190.34 12208200 190.34 +2005-01-31 193.69 196.36 191.72 195.62 9596700 195.62 +2005-02-01 194.38 196.66 190.63 191.9 18839000 191.9 +2005-02-02 215.55 216.8 203.66 205.96 32799300 205.96 +2005-02-03 205.99 213.37 205.81 210.86 12988100 210.86 +2005-02-04 206.47 207.75 202.6 204.36 14819300 204.36 +2005-02-07 205.26 206.4 195.51 196.03 12960400 196.03 +2005-02-08 196.96 200.02 194.53 198.64 11480000 198.64 +2005-02-09 200.76 201.6 189.46 191.58 17171500 191.58 +2005-02-10 191.97 192.21 185.25 187.98 18982700 187.98 +2005-02-11 186.66 192.32 186.07 187.4 13116000 187.4 +2005-02-14 182.85 193.08 181.0 192.99 38562200 192.99 +2005-02-15 193.6 199.84 193.08 195.23 25782800 195.23 +2005-02-16 194.7 199.33 194.3 198.41 16532300 198.41 +2005-02-17 197.83 199.75 196.81 197.9 10414400 197.9 +2005-02-18 198.51 198.84 196.66 197.95 8485900 197.95 +2005-02-22 196.5 198.9 190.39 191.37 13483700 191.37 +2005-02-23 193.3 194.48 188.66 193.95 15586000 193.95 +2005-02-24 183.37 189.85 182.23 188.89 25814300 188.89 +2005-02-25 189.15 189.92 185.51 185.87 9973500 185.87 +2005-02-28 186.0 189.87 185.85 187.99 7818400 187.99 +2005-03-01 189.29 189.75 182.0 186.06 9311200 186.06 +2005-03-02 185.95 187.67 184.36 185.18 7285500 185.18 +2005-03-03 186.13 187.75 184.31 187.01 7608600 187.01 +2005-03-04 186.7 187.25 185.07 185.9 6774100 185.9 +2005-03-07 187.78 189.6 187.03 188.81 8667400 188.81 +2005-03-08 189.1 189.85 184.97 185.2 8046100 185.2 +2005-03-09 184.21 184.65 180.16 181.35 11360400 181.35 +2005-03-10 181.01 181.2 177.4 179.98 10960500 179.98 +2005-03-11 180.44 180.95 177.15 177.8 8028300 177.8 +2005-03-14 178.33 178.4 172.57 174.99 11146600 174.99 +2005-03-15 175.3 180.0 174.21 178.61 10422100 178.61 +2005-03-16 176.7 178.61 175.01 175.6 7106300 175.6 +2005-03-17 177.13 179.64 175.8 179.29 8260600 179.29 +2005-03-18 178.81 180.4 178.31 180.04 7090000 180.04 +2005-03-21 179.27 182.17 177.25 180.88 7483700 180.88 +2005-03-22 181.18 181.94 177.85 178.6 5631700 178.6 +2005-03-23 177.97 180.24 177.97 178.98 4845000 178.98 +2005-03-24 180.7 180.86 179.2 179.25 3705200 179.25 +2005-03-28 181.68 184.8 180.95 181.42 8738000 181.42 +2005-03-29 181.05 183.28 178.07 179.57 6473000 179.57 +2005-03-30 180.64 181.45 179.6 180.45 6236100 180.45 +2005-03-31 177.95 181.39 177.64 180.51 6768600 180.51 +2005-04-01 181.76 182.95 179.99 180.04 6182000 180.04 +2005-04-04 179.95 185.32 179.84 185.29 8076400 185.29 +2005-04-05 187.73 190.26 187.57 188.57 8736700 188.57 +2005-04-06 189.24 189.65 187.58 189.22 5252600 189.22 +2005-04-07 188.78 194.62 188.64 193.76 9692200 193.76 +2005-04-08 193.69 195.1 191.45 192.05 5116600 192.05 +2005-04-11 193.09 194.8 192.32 193.23 5410500 193.23 +2005-04-12 193.0 194.42 189.41 193.96 7319600 193.96 +2005-04-13 193.47 194.32 189.73 192.93 6555800 192.93 +2005-04-14 193.27 194.36 190.1 191.45 6152700 191.45 +2005-04-15 190.1 190.34 184.66 185.0 11577400 185.0 +2005-04-18 184.58 187.88 183.49 186.97 6550300 186.97 +2005-04-19 189.33 192.0 188.03 191.4 8430000 191.4 +2005-04-20 198.58 200.5 195.91 198.1 15451500 198.1 +2005-04-21 200.42 205.0 199.32 204.22 17751900 204.22 +2005-04-22 222.9 224.0 214.26 215.81 33205100 215.81 +2005-04-25 217.82 224.74 217.52 223.53 19840000 223.53 +2005-04-26 220.22 222.0 218.29 218.75 17272000 218.75 +2005-04-27 217.99 220.85 216.74 219.78 10264800 219.78 +2005-04-28 219.5 222.08 217.71 219.45 8682800 219.45 +2005-04-29 221.91 222.25 217.82 220.0 9170200 220.0 +2005-05-02 222.05 223.7 220.21 222.29 9767400 222.29 +2005-05-03 221.85 228.15 221.32 226.19 17780200 226.19 +2005-05-04 227.23 229.88 227.0 228.5 12083500 228.5 +2005-05-05 228.62 228.62 225.88 226.98 7509600 226.98 +2005-05-06 228.4 229.25 226.47 228.02 6763900 228.02 +2005-05-09 228.0 228.5 225.43 226.02 5536800 226.02 +2005-05-10 225.47 227.8 224.72 227.8 6345800 227.8 +2005-05-11 228.97 231.98 227.93 231.29 11478800 231.29 +2005-05-12 230.81 232.23 228.2 228.72 8948200 228.72 +2005-05-13 229.18 231.09 227.32 229.24 7415500 229.24 +2005-05-16 229.68 231.62 228.57 231.05 5681400 231.05 +2005-05-17 230.56 233.45 230.2 233.13 7808900 233.13 +2005-05-18 233.61 239.97 233.52 239.16 12312000 239.16 +2005-05-19 240.34 241.17 238.27 239.18 9716500 239.18 +2005-05-20 241.21 241.67 239.65 241.61 8163500 241.61 +2005-05-23 243.16 258.1 242.71 255.45 21388300 255.45 +2005-05-24 256.96 265.44 253.5 256.0 29043100 256.0 +2005-05-25 252.73 260.98 250.63 260.81 18057900 260.81 +2005-05-26 260.96 263.76 258.3 259.2 13546600 259.2 +2005-05-27 260.46 266.05 259.25 266.0 12184100 266.0 +2005-05-31 269.43 278.4 269.37 277.27 22236800 277.27 +2005-06-01 283.2 292.89 282.02 288.0 35191700 288.0 +2005-06-02 288.73 289.78 284.6 287.9 17974100 287.9 +2005-06-03 286.79 289.3 277.41 280.26 18782300 280.26 +2005-06-06 282.39 293.75 281.83 290.94 22525900 290.94 +2005-06-07 297.1 299.59 290.3 293.12 24323000 293.12 +2005-06-08 292.85 293.19 278.0 279.56 25700900 279.56 +2005-06-09 284.72 288.5 280.56 286.31 16441100 286.31 +2005-06-10 286.99 287.28 280.02 282.5 12696600 282.5 +2005-06-13 279.82 284.19 276.52 282.75 12803200 282.75 +2005-06-14 278.59 281.24 277.75 278.35 10091900 278.35 +2005-06-15 275.0 277.3 267.43 274.8 20883100 274.8 +2005-06-16 274.26 278.3 273.07 277.44 12462400 277.44 +2005-06-17 279.0 280.3 275.9 280.3 10434400 280.3 +2005-06-20 276.09 287.67 271.73 286.7 21024700 286.7 +2005-06-21 288.07 290.3 284.97 287.84 15132300 287.84 +2005-06-22 289.67 292.32 288.67 289.3 10474000 289.3 +2005-06-23 288.0 294.81 286.5 289.71 14056400 289.71 +2005-06-24 290.9 298.0 289.58 297.25 17771200 297.25 +2005-06-27 298.9 304.47 293.86 304.1 17802900 304.1 +2005-06-28 306.28 309.25 302.0 302.0 19036500 302.0 +2005-06-29 302.5 304.38 292.15 292.72 18298700 292.72 +2005-06-30 294.34 298.93 291.04 294.15 15094400 294.15 +2005-07-01 295.04 296.24 289.22 291.25 9227600 291.25 +2005-07-05 292.1 295.98 290.23 295.71 7494000 295.71 +2005-07-06 297.3 297.6 291.38 291.52 8000300 291.52 +2005-07-07 289.39 295.8 288.51 295.54 10672100 295.54 +2005-07-08 296.25 297.5 294.05 296.23 7457600 296.23 +2005-07-11 296.4 296.6 291.02 293.35 8390300 293.35 +2005-07-12 293.39 294.4 290.93 291.78 5864900 291.78 +2005-07-13 292.51 299.24 292.1 298.86 11437900 298.86 +2005-07-14 305.34 306.75 300.07 300.89 10667700 300.89 +2005-07-15 301.24 303.4 299.78 301.19 8438400 301.19 +2005-07-18 300.0 301.9 297.75 299.54 6207800 299.54 +2005-07-19 302.1 310.35 301.8 309.9 12621400 309.9 +2005-07-20 305.57 312.61 301.8 312.0 14310400 312.0 +2005-07-21 314.05 317.8 311.21 313.94 19789400 313.94 +2005-07-22 306.37 309.25 296.33 302.4 23386800 302.4 +2005-07-25 302.39 303.29 294.96 295.85 9658800 295.85 +2005-07-26 295.01 298.0 292.09 296.09 9816900 296.09 +2005-07-27 297.74 298.23 292.4 296.93 7217900 296.93 +2005-07-28 297.41 297.41 293.28 293.5 5925600 293.5 +2005-07-29 292.14 292.84 286.99 287.76 8363300 287.76 +2005-08-01 288.12 292.5 288.1 291.61 5662400 291.61 +2005-08-02 291.6 299.52 291.12 299.19 7290200 299.19 +2005-08-03 298.0 299.72 295.6 297.3 5930600 297.3 +2005-08-04 295.55 299.0 295.25 297.73 5236500 297.73 +2005-08-05 297.5 298.51 291.31 292.35 5939700 292.35 +2005-08-08 293.6 295.65 290.49 291.25 4481800 291.25 +2005-08-09 291.96 292.68 288.51 291.57 5779300 291.57 +2005-08-10 291.3 292.33 284.88 285.68 6879000 285.68 +2005-08-11 285.89 286.58 280.62 284.05 7514900 284.05 +2005-08-12 283.36 290.2 281.64 289.72 6585900 289.72 +2005-08-15 289.8 292.77 283.77 284.0 8174700 284.0 +2005-08-16 284.88 287.79 283.34 285.65 7109200 285.65 +2005-08-17 285.51 286.57 284.0 285.1 3883300 285.1 +2005-08-18 275.91 280.5 275.0 279.99 11872800 279.99 +2005-08-19 280.99 281.45 279.62 280.0 5542900 280.0 +2005-08-22 281.24 281.47 273.35 274.01 6813000 274.01 +2005-08-23 276.16 279.74 274.12 279.58 5821700 279.58 +2005-08-24 277.57 284.75 276.45 282.57 8593100 282.57 +2005-08-25 282.55 284.0 279.97 282.59 4376600 282.59 +2005-08-26 283.48 285.02 282.66 283.58 3755300 283.58 +2005-08-29 282.24 289.12 282.24 288.45 5903000 288.45 +2005-08-30 287.39 289.51 285.88 287.27 4792000 287.27 +2005-08-31 288.23 288.5 284.36 286.0 5034000 286.0 +2005-09-01 285.91 287.5 285.0 286.25 2742100 286.25 +2005-09-02 286.51 289.99 286.44 288.45 3434500 288.45 +2005-09-06 289.0 289.39 286.8 287.11 4212300 287.11 +2005-09-07 285.89 295.5 285.28 294.87 7499500 294.87 +2005-09-08 294.83 299.28 293.36 295.39 6613300 295.39 +2005-09-09 297.28 299.1 296.56 299.09 4390500 299.09 +2005-09-12 301.75 311.42 301.0 309.74 10386500 309.74 +2005-09-13 309.0 315.53 306.17 311.68 10299900 311.68 +2005-09-14 308.73 313.28 300.3 303.0 11275800 303.0 +2005-09-15 299.52 306.75 297.91 302.62 15466200 302.62 +2005-09-16 304.02 304.5 299.87 300.2 7579800 300.2 +2005-09-19 301.0 306.0 300.71 303.79 5761900 303.79 +2005-09-20 306.15 311.3 305.23 307.91 9351000 307.91 +2005-09-21 308.41 313.76 305.96 311.9 10119700 311.9 +2005-09-22 311.5 319.22 310.17 311.37 13006400 311.37 +2005-09-23 313.0 317.21 312.59 315.36 8483800 315.36 +2005-09-26 319.5 320.95 312.56 314.28 9894400 314.28 +2005-09-27 314.95 318.41 313.38 313.94 6873100 313.94 +2005-09-28 314.22 315.1 305.6 306.0 7997400 306.0 +2005-09-29 306.68 310.72 306.08 309.62 5613800 309.62 +2005-09-30 314.22 317.5 312.29 316.46 9151300 316.46 +2005-10-03 313.63 320.11 312.79 318.68 9160300 318.68 +2005-10-04 319.95 321.28 310.74 311.0 9144300 311.0 +2005-10-05 312.69 314.9 308.0 310.71 8328400 310.71 +2005-10-06 314.14 314.48 310.09 312.75 7993800 312.75 +2005-10-07 314.79 316.67 310.54 312.99 6770300 312.99 +2005-10-10 313.31 314.82 309.15 310.65 5572200 310.65 +2005-10-11 310.61 312.65 304.86 306.1 8542600 306.1 +2005-10-12 305.2 307.19 299.0 300.97 9306200 300.97 +2005-10-13 302.0 302.0 290.68 297.44 10567700 297.44 +2005-10-14 299.9 300.23 292.54 296.14 8519100 296.14 +2005-10-17 297.5 305.2 294.56 305.0 7566700 305.0 +2005-10-18 304.96 307.96 302.74 303.28 7077800 303.28 +2005-10-19 304.0 309.87 303.96 308.7 7010700 308.7 +2005-10-20 309.99 311.13 301.21 303.2 13911700 303.2 +2005-10-21 345.8 346.43 333.0 339.9 22892400 339.9 +2005-10-24 343.37 349.3 342.19 348.65 9431700 348.65 +2005-10-25 345.78 347.4 342.86 346.91 6878300 346.91 +2005-10-26 346.28 356.0 346.19 355.44 8907500 355.44 +2005-10-27 356.6 357.09 351.68 353.06 5134400 353.06 +2005-10-28 355.27 358.95 355.02 358.17 5903500 358.17 +2005-10-31 360.24 374.75 359.51 372.14 14342900 372.14 +2005-11-01 371.86 383.9 369.01 379.38 16356100 379.38 +2005-11-02 381.7 385.0 377.17 379.68 10565400 379.68 +2005-11-03 382.41 386.58 381.38 385.95 7448400 385.95 +2005-11-04 389.98 391.79 385.45 390.43 8824900 390.43 +2005-11-07 395.1 397.47 392.15 395.03 9591500 395.03 +2005-11-08 394.25 395.59 388.58 389.9 7897500 389.9 +2005-11-09 386.67 388.29 378.03 379.15 10466900 379.15 +2005-11-10 378.36 391.35 377.43 391.1 9128700 391.1 +2005-11-11 395.12 396.9 388.85 390.4 7063900 390.4 +2005-11-14 392.12 398.22 391.53 396.97 7807900 396.97 +2005-11-15 394.38 397.0 390.95 392.8 8624900 392.8 +2005-11-16 396.2 398.85 394.11 398.15 8695200 398.15 +2005-11-17 401.8 403.81 399.53 403.45 9212200 403.45 +2005-11-18 403.49 404.5 399.85 400.21 7025700 400.21 +2005-11-21 399.17 409.98 393.49 409.36 10335100 409.36 +2005-11-22 408.65 417.31 406.23 416.47 9596000 416.47 +2005-11-23 417.04 424.72 415.78 422.86 10085000 422.86 +2005-11-25 425.78 428.75 425.3 428.62 4840100 428.62 +2005-11-28 429.82 431.24 422.44 423.48 11008400 423.48 +2005-11-29 424.46 426.4 402.14 403.54 21495800 403.54 +2005-11-30 404.26 408.45 395.56 404.91 15596600 404.91 +2005-12-01 409.2 415.44 408.29 414.09 9744900 414.09 +2005-12-02 416.94 419.53 413.86 417.7 7543500 417.7 +2005-12-05 417.0 417.5 404.28 405.85 10289400 405.85 +2005-12-06 408.7 416.41 401.7 404.54 15114700 404.54 +2005-12-07 406.16 406.7 399.01 404.22 11665900 404.22 +2005-12-08 405.3 410.65 402.64 410.65 8910100 410.65 +2005-12-09 415.0 415.78 408.56 409.2 7643400 409.2 +2005-12-12 414.63 415.21 409.95 412.61 6950100 412.61 +2005-12-13 412.5 418.0 411.64 417.49 8157000 417.49 +2005-12-14 417.04 419.73 415.49 418.96 6630400 418.96 +2005-12-15 419.11 423.14 416.5 422.55 6045800 422.55 +2005-12-16 425.34 432.5 422.75 430.15 16330500 430.15 +2005-12-19 432.2 446.21 420.11 424.6 21936800 424.6 +2005-12-20 427.86 432.2 424.67 429.74 10084700 429.74 +2005-12-21 433.55 436.86 420.71 426.33 11221900 426.33 +2005-12-22 431.77 432.86 425.93 432.04 7546600 432.04 +2005-12-23 432.15 432.5 428.78 430.93 4595100 430.93 +2005-12-27 431.86 431.86 422.76 424.64 6702800 424.64 +2005-12-28 424.34 427.78 421.26 426.69 7117900 426.69 +2005-12-29 427.98 428.73 419.17 420.15 6945800 420.15 +2005-12-30 417.27 418.21 413.74 414.86 7587100 414.86 +2006-01-03 422.52 435.67 418.22 435.23 13121200 435.23 +2006-01-04 443.9 448.96 439.75 445.24 15286400 445.24 +2006-01-05 446.0 451.55 441.5 451.24 10808300 451.24 +2006-01-06 456.87 470.5 453.24 465.66 17756900 465.66 +2006-01-09 466.41 473.4 460.94 466.9 12791900 466.9 +2006-01-10 464.42 470.25 462.04 469.76 9097100 469.76 +2006-01-11 471.27 475.11 469.18 471.63 9007400 471.63 +2006-01-12 473.72 474.99 461.5 463.63 10125300 463.63 +2006-01-13 464.31 466.89 461.61 466.25 7656600 466.25 +2006-01-17 463.06 469.9 462.53 467.11 8270300 467.11 +2006-01-18 447.3 457.36 443.25 444.91 20485700 444.91 +2006-01-19 451.17 453.49 433.0 436.45 14537300 436.45 +2006-01-20 438.7 440.03 394.74 399.46 41116700 399.46 +2006-01-23 407.38 428.39 405.73 427.5 22741400 427.5 +2006-01-24 436.03 444.95 434.48 443.03 15464600 443.03 +2006-01-25 451.26 454.23 429.22 433.0 18739800 433.0 +2006-01-26 439.54 439.99 423.56 434.27 12926100 434.27 +2006-01-27 435.0 438.22 428.98 433.49 8452200 433.49 +2006-01-30 429.23 433.28 425.0 426.82 8588900 426.82 +2006-01-31 430.57 439.6 423.97 432.66 22066000 432.66 +2006-02-01 389.03 402.0 387.52 401.78 27122500 401.78 +2006-02-02 403.82 406.5 395.98 396.04 11807700 396.04 +2006-02-03 393.62 393.9 372.57 381.55 18281800 381.55 +2006-02-06 385.31 389.9 379.56 385.1 8940400 385.1 +2006-02-07 382.99 383.7 363.35 367.92 16630200 367.92 +2006-02-08 368.48 370.69 354.67 369.08 20804100 369.08 +2006-02-09 371.2 374.4 356.11 358.77 11912400 358.77 +2006-02-10 361.95 364.5 353.14 362.61 15223500 362.61 +2006-02-13 346.64 350.6 341.89 345.7 19717800 345.7 +2006-02-14 345.33 351.69 342.4 343.32 14654000 343.32 +2006-02-15 341.27 346.0 337.83 342.38 12947000 342.38 +2006-02-16 345.67 367.0 344.49 366.46 21315500 366.46 +2006-02-17 369.86 372.14 363.62 368.75 14320200 368.75 +2006-02-21 366.44 373.54 365.11 366.59 8686000 366.59 +2006-02-22 367.15 368.95 363.86 365.49 6476200 365.49 +2006-02-23 365.61 381.24 365.39 378.07 12551600 378.07 +2006-02-24 377.3 380.07 373.49 377.4 6484300 377.4 +2006-02-27 381.27 391.7 380.28 390.38 10212200 390.38 +2006-02-28 393.2 397.54 338.51 362.62 39437600 362.62 +2006-03-01 368.56 369.45 361.3 364.8 12061200 364.8 +2006-03-02 364.28 381.1 362.2 376.45 18330300 376.45 +2006-03-03 384.3 387.24 375.76 378.18 11962000 378.18 +2006-03-06 380.91 383.4 367.14 368.1 8939700 368.1 +2006-03-07 365.02 368.45 358.15 364.45 10378800 364.45 +2006-03-08 353.93 360.03 350.54 353.88 11745600 353.88 +2006-03-09 355.39 358.53 341.5 343.0 13910400 343.0 +2006-03-10 343.5 344.5 331.55 337.5 19325600 337.5 +2006-03-13 340.93 346.1 335.45 337.06 13642400 337.06 +2006-03-14 337.14 352.37 332.62 351.16 18450700 351.16 +2006-03-15 350.77 352.3 340.53 344.5 12768800 344.5 +2006-03-16 348.61 348.75 337.9 338.77 10016700 338.77 +2006-03-17 338.8 341.78 334.93 339.79 8551700 339.79 +2006-03-20 342.34 350.09 341.54 348.19 10407600 348.19 +2006-03-21 350.01 351.66 339.08 339.92 9831100 339.92 +2006-03-22 339.75 344.1 337.5 340.22 7596000 340.22 +2006-03-23 342.35 345.75 340.2 341.89 7434700 341.89 +2006-03-24 368.62 370.09 362.51 365.8 15180600 365.8 +2006-03-27 367.09 371.71 365.0 369.69 7023700 369.69 +2006-03-28 371.71 377.86 371.17 377.2 8945800 377.2 +2006-03-29 379.94 399.0 379.51 394.98 19027500 394.98 +2006-03-30 389.19 393.5 383.61 388.44 14711700 388.44 +2006-03-31 388.74 391.87 384.03 390.0 36521400 390.0 +2006-04-03 389.53 392.47 387.93 389.7 8122700 389.7 +2006-04-04 389.9 404.9 388.14 404.34 15715700 404.34 +2006-04-05 408.2 414.57 402.82 407.99 13410500 407.99 +2006-04-06 406.49 413.89 405.43 411.18 8598500 411.18 +2006-04-07 412.41 412.85 404.02 406.16 7025900 406.16 +2006-04-10 407.08 417.17 405.25 416.38 9320100 416.38 +2006-04-11 416.42 419.1 406.22 409.66 11107200 409.66 +2006-04-12 409.0 411.33 405.19 408.95 6017000 408.95 +2006-04-13 408.63 409.76 400.5 402.16 6552900 402.16 +2006-04-17 403.45 412.5 400.84 406.82 8259500 406.82 +2006-04-18 407.93 409.83 401.5 404.24 8137600 404.24 +2006-04-19 412.57 413.64 406.73 410.5 6781700 410.5 +2006-04-20 411.01 416.0 408.2 415.0 12271500 415.0 +2006-04-21 448.9 450.72 436.17 437.1 22551300 437.1 +2006-04-24 439.4 444.7 436.52 440.5 8836400 440.5 +2006-04-25 439.63 441.04 426.0 427.16 9569000 427.16 +2006-04-26 427.74 430.04 423.53 425.97 7277800 425.97 +2006-04-27 422.91 426.91 419.39 420.03 8337900 420.03 +2006-04-28 418.63 425.73 416.3 417.94 7421300 417.94 +2006-05-01 418.47 419.44 398.55 398.9 10361200 398.9 +2006-05-02 401.08 402.49 388.4 394.8 13104300 394.8 +2006-05-03 396.35 401.5 390.88 394.17 8072200 394.17 +2006-05-04 395.03 398.87 392.21 394.75 4652000 394.75 +2006-05-05 397.6 400.68 391.78 394.3 6065000 394.3 +2006-05-08 395.11 397.12 390.05 394.78 5118600 394.78 +2006-05-09 395.7 409.0 393.75 408.8 9140600 408.8 +2006-05-10 408.31 411.71 401.86 402.98 6187200 402.98 +2006-05-11 403.42 404.71 384.98 387.0 8892800 387.0 +2006-05-12 383.54 384.87 373.55 374.13 10087600 374.13 +2006-05-15 375.93 380.15 368.25 376.2 8590100 376.2 +2006-05-16 375.99 376.86 369.89 371.3 6491100 371.3 +2006-05-17 370.61 379.84 370.22 374.5 10643800 374.5 +2006-05-18 378.78 381.81 370.71 370.99 5835000 370.99 +2006-05-19 373.28 374.5 360.57 370.02 11398200 370.02 +2006-05-22 367.85 373.03 365.25 370.95 8604400 370.95 +2006-05-23 374.21 383.88 373.56 375.58 8983000 375.58 +2006-05-24 377.35 383.44 371.61 381.25 9553800 381.25 +2006-05-25 379.08 383.0 372.31 382.99 8194600 382.99 +2006-05-26 384.55 385.88 380.03 381.35 3667000 381.35 +2006-05-30 378.28 381.0 371.45 371.94 4316000 371.94 +2006-05-31 373.8 378.25 366.78 371.82 7981300 371.82 +2006-06-01 373.54 382.99 371.6 382.62 6278000 382.62 +2006-06-02 386.84 387.08 377.45 379.44 6386400 379.44 +2006-06-05 376.18 381.45 374.15 374.44 5558500 374.44 +2006-06-06 376.58 390.0 376.3 389.99 10259800 389.99 +2006-06-07 393.24 394.86 386.5 386.51 8911300 386.51 +2006-06-08 387.75 394.27 378.59 393.3 10359500 393.3 +2006-06-09 392.19 395.43 385.35 386.57 6157500 386.57 +2006-06-12 388.34 390.49 381.0 381.54 5019100 381.54 +2006-06-13 380.9 387.0 378.12 386.52 7659100 386.52 +2006-06-14 389.83 391.1 378.52 384.39 7772000 384.39 +2006-06-15 386.62 392.25 383.0 391.0 6785700 391.0 +2006-06-16 389.1 390.93 388.0 390.7 5304600 390.7 +2006-06-19 390.85 394.8 386.98 388.14 7633100 388.14 +2006-06-20 388.03 391.87 386.51 387.17 4039900 387.17 +2006-06-21 391.06 404.0 389.75 402.13 8744400 402.13 +2006-06-22 401.58 406.0 388.0 399.95 5911900 399.95 +2006-06-23 402.76 409.75 400.74 404.86 5314800 404.86 +2006-06-26 406.75 408.3 403.25 404.22 3551200 404.22 +2006-06-27 405.71 408.0 401.01 402.32 4107100 402.32 +2006-06-28 404.01 406.48 401.13 406.11 3710500 406.11 +2006-06-29 407.99 418.2 405.82 417.81 6658200 417.81 +2006-06-30 415.6 419.33 412.33 419.33 6258000 419.33 +2006-07-03 420.04 423.77 419.45 423.2 2156700 423.2 +2006-07-05 421.52 422.8 415.64 421.46 4985600 421.46 +2006-07-06 423.38 425.38 421.98 423.19 3687100 423.19 +2006-07-07 426.05 427.89 415.88 420.45 6041900 420.45 +2006-07-10 423.44 425.23 416.38 418.2 4436400 418.2 +2006-07-11 418.51 425.05 413.03 424.56 5971300 424.56 +2006-07-12 422.09 422.74 416.73 417.25 4906700 417.25 +2006-07-13 414.0 418.34 406.83 408.83 6924500 408.83 +2006-07-14 410.33 411.49 398.61 403.5 7552100 403.5 +2006-07-17 404.63 411.0 403.72 407.89 5811900 407.89 +2006-07-18 409.75 410.57 397.74 403.05 8536800 403.05 +2006-07-19 395.01 401.14 394.66 399.0 8518500 399.0 +2006-07-20 404.28 404.44 385.66 387.12 12538700 387.12 +2006-07-21 386.14 391.75 377.69 390.11 11754600 390.11 +2006-07-24 392.82 393.89 381.21 390.9 8086100 390.9 +2006-07-25 385.02 391.31 383.8 389.36 5761100 389.36 +2006-07-26 388.2 391.91 383.0 385.5 5531900 385.5 +2006-07-27 387.37 387.49 377.95 382.4 5641100 382.4 +2006-07-28 382.0 389.56 381.73 388.12 4083600 388.12 +2006-07-31 388.0 389.17 383.31 386.6 4595300 386.6 +2006-08-01 385.11 385.77 375.51 375.51 5463200 375.51 +2006-08-02 375.6 377.17 365.2 367.23 7097800 367.23 +2006-08-03 364.98 377.91 363.36 375.39 6327000 375.39 +2006-08-04 379.56 380.68 371.75 373.85 5095200 373.85 +2006-08-07 371.5 379.73 371.15 377.95 3946900 377.95 +2006-08-08 382.82 384.5 379.09 381.0 5743200 381.0 +2006-08-09 382.8 384.68 376.36 376.94 4311000 376.94 +2006-08-10 373.88 377.67 372.46 374.2 4261900 374.2 +2006-08-11 374.4 375.28 368.0 368.5 3766500 368.5 +2006-08-14 371.5 375.13 368.67 369.43 4968300 369.43 +2006-08-15 374.11 381.67 372.6 380.97 6698200 380.97 +2006-08-16 383.48 388.45 382.12 387.72 5853200 387.72 +2006-08-17 386.39 390.0 383.92 385.8 5080200 385.8 +2006-08-18 386.31 387.09 380.75 383.36 4952200 383.36 +2006-08-21 378.1 379.0 375.22 377.3 4023300 377.3 +2006-08-22 377.73 379.26 374.84 378.29 4164100 378.29 +2006-08-23 377.64 378.27 372.66 373.43 3642300 373.43 +2006-08-24 374.44 376.4 372.26 373.73 3482500 373.73 +2006-08-25 373.08 375.32 372.5 373.26 2466700 373.26 +2006-08-28 375.61 380.95 375.0 380.95 4164000 380.95 +2006-08-29 380.78 382.32 377.2 378.95 4460000 378.95 +2006-08-30 379.21 384.65 378.51 380.75 4044400 380.75 +2006-08-31 381.49 382.15 378.2 378.53 2959900 378.53 +2006-09-01 380.99 381.28 377.19 378.6 2672900 378.6 +2006-09-05 379.87 385.4 377.44 384.36 4074300 384.36 +2006-09-06 382.1 383.19 379.66 380.14 3724100 380.14 +2006-09-07 379.39 381.75 377.4 378.49 3842000 378.49 +2006-09-08 376.72 380.79 376.72 377.85 3083400 377.85 +2006-09-11 378.26 384.69 377.77 384.09 4529200 384.09 +2006-09-12 385.0 392.73 384.88 391.9 5442200 391.9 +2006-09-13 395.15 406.76 395.1 406.57 9768200 406.57 +2006-09-14 404.3 406.28 401.93 403.98 5366100 403.98 +2006-09-15 407.48 410.05 406.74 409.88 7838200 409.88 +2006-09-18 410.0 418.69 409.47 414.69 7106700 414.69 +2006-09-19 415.46 415.49 392.74 403.81 14292900 403.81 +2006-09-20 407.1 407.39 394.62 397.0 9147800 397.0 +2006-09-21 400.3 408.45 399.86 406.85 10692100 406.85 +2006-09-22 404.98 407.45 401.36 403.78 4649600 403.78 +2006-09-25 405.58 409.45 402.5 403.98 5737300 403.98 +2006-09-26 405.5 407.68 401.77 406.87 5289400 406.87 +2006-09-27 406.3 411.22 402.37 402.92 5876700 402.92 +2006-09-28 404.08 406.98 400.54 403.58 5107400 403.58 +2006-09-29 405.13 405.62 401.41 401.9 3310900 401.9 +2006-10-02 401.9 406.0 400.8 401.44 3651900 401.44 +2006-10-03 401.29 406.46 398.19 404.04 5464700 404.04 +2006-10-04 404.97 415.77 403.05 415.7 6661800 415.7 +2006-10-05 414.7 418.24 410.86 411.81 5789800 411.81 +2006-10-06 410.22 421.91 409.75 420.5 7336500 420.5 +2006-10-09 424.8 431.95 423.42 429.0 7583300 429.0 +2006-10-10 431.56 437.85 422.39 426.65 9788600 426.65 +2006-10-11 425.02 429.91 423.76 426.5 5635400 426.5 +2006-10-12 428.56 429.68 424.0 427.44 4844000 427.44 +2006-10-13 427.76 429.5 425.56 427.3 3622500 427.3 +2006-10-16 427.7 429.2 421.34 421.75 4319400 421.75 +2006-10-17 420.3 423.75 416.7 420.64 5211000 420.64 +2006-10-18 422.99 424.75 417.5 419.31 6017300 419.31 +2006-10-19 420.23 429.5 419.57 426.06 11503500 426.06 +2006-10-20 458.99 460.1 453.59 459.67 11647900 459.67 +2006-10-23 462.28 484.64 460.37 480.78 15104500 480.78 +2006-10-24 476.28 477.86 471.41 473.31 8660200 473.31 +2006-10-25 477.49 488.5 475.11 486.6 9187500 486.6 +2006-10-26 487.68 491.96 484.2 485.1 7031700 485.1 +2006-10-27 483.9 485.24 472.49 475.2 6604000 475.2 +2006-10-30 474.82 480.46 470.01 476.57 6563100 476.57 +2006-10-31 478.06 482.16 473.84 476.39 6285400 476.39 +2006-11-01 478.76 479.13 465.26 467.5 5426300 467.5 +2006-11-02 467.5 473.73 466.38 469.91 5236700 469.91 +2006-11-03 472.23 473.75 465.06 471.8 4907700 471.8 +2006-11-06 473.77 479.66 472.33 476.95 4991500 476.95 +2006-11-07 476.95 479.02 471.77 472.57 4897100 472.57 +2006-11-08 470.35 481.74 468.6 475.0 7965000 475.0 +2006-11-09 476.5 479.49 471.86 472.63 4879200 472.63 +2006-11-10 473.78 474.72 470.29 473.55 2796700 473.55 +2006-11-13 474.9 481.17 474.14 481.03 4341900 481.03 +2006-11-14 480.7 489.95 480.5 489.3 7223400 489.3 +2006-11-15 493.43 499.85 491.93 491.93 8370700 491.93 +2006-11-16 495.0 497.68 492.56 495.9 5092600 495.9 +2006-11-17 493.25 499.66 493.0 498.79 5511000 498.79 +2006-11-20 498.4 498.4 492.65 495.05 5124500 495.05 +2006-11-21 496.54 510.0 495.83 509.65 8427500 509.65 +2006-11-22 510.97 513.0 505.78 508.01 4500700 508.01 +2006-11-24 504.5 507.5 504.0 505.0 1732700 505.0 +2006-11-27 501.37 501.78 484.75 484.75 7324700 484.75 +2006-11-28 481.13 489.86 477.03 489.5 7797600 489.5 +2006-11-29 494.24 494.74 482.25 484.65 6315300 484.65 +2006-11-30 484.19 490.4 481.55 484.81 5577500 484.81 +2006-12-01 485.98 488.39 478.5 480.8 5631400 480.8 +2006-12-04 483.0 487.43 479.35 484.85 4899900 484.85 +2006-12-05 487.4 489.44 484.89 487.0 4103000 487.0 +2006-12-06 486.96 492.4 484.52 488.71 4450300 488.71 +2006-12-07 490.23 491.8 482.42 482.64 4664300 482.64 +2006-12-08 481.94 488.6 480.0 484.11 3974900 484.11 +2006-12-11 484.92 488.9 483.8 483.93 3263400 483.93 +2006-12-12 483.85 486.36 480.28 481.78 4181000 481.78 +2006-12-13 484.69 485.5 477.02 478.99 4662100 478.99 +2006-12-14 480.25 483.75 477.26 482.12 4748900 482.12 +2006-12-15 482.64 484.11 479.84 480.3 5190800 480.3 +2006-12-18 482.51 482.74 460.72 462.8 8016600 462.8 +2006-12-19 461.72 469.31 458.5 468.63 6587000 468.63 +2006-12-20 470.0 471.5 462.33 462.9 4367800 462.9 +2006-12-21 464.18 465.25 452.34 456.2 6953300 456.2 +2006-12-22 457.5 458.64 452.73 455.58 3988300 455.58 +2006-12-26 456.52 459.47 454.59 457.53 2074300 457.53 +2006-12-27 460.0 468.08 459.1 468.03 4231500 468.03 +2006-12-28 467.12 468.58 462.25 462.56 3116200 462.56 +2006-12-29 462.1 464.47 459.86 460.48 2559200 460.48 +2007-01-03 466.0 476.66 461.11 467.59 7706500 467.59 +2007-01-04 469.0 483.95 468.35 483.26 7887600 483.26 +2007-01-05 482.5 487.5 478.11 487.19 6872100 487.19 +2007-01-08 487.69 489.87 482.2 483.58 4754400 483.58 +2007-01-09 485.45 488.25 481.2 485.5 5381400 485.5 +2007-01-10 484.43 493.55 482.04 489.46 5968500 489.46 +2007-01-11 497.2 501.75 496.18 499.72 7208200 499.72 +2007-01-12 501.99 505.0 500.0 505.0 4473700 505.0 +2007-01-16 507.55 513.0 503.3 504.28 7568900 504.28 +2007-01-17 503.39 507.77 494.38 497.28 6699100 497.28 +2007-01-18 494.52 496.48 487.43 487.83 5932000 487.83 +2007-01-19 487.98 490.76 486.74 489.75 4978300 489.75 +2007-01-22 492.5 492.65 478.5 480.84 5404300 480.84 +2007-01-23 480.79 484.75 477.29 479.05 4665500 479.05 +2007-01-24 484.45 499.54 483.29 499.07 6059300 499.07 +2007-01-25 501.0 504.5 485.66 488.09 6368500 488.09 +2007-01-26 490.93 497.9 487.03 495.84 5496500 495.84 +2007-01-29 498.0 498.75 490.5 492.47 4775700 492.47 +2007-01-30 494.0 498.0 491.22 494.32 4180500 494.32 +2007-01-31 496.49 505.0 495.51 501.5 12206100 501.5 +2007-02-01 506.0 506.01 481.53 481.75 15658700 481.75 +2007-02-02 482.61 485.0 477.81 481.5 6286500 481.5 +2007-02-05 477.5 478.0 466.19 467.16 7206900 467.16 +2007-02-06 468.1 473.3 467.26 471.48 5321900 471.48 +2007-02-07 473.82 474.35 468.78 470.01 4119800 470.01 +2007-02-08 468.05 473.75 465.15 471.03 4076700 471.03 +2007-02-09 471.65 472.68 461.5 461.89 4858600 461.89 +2007-02-12 460.68 462.39 455.02 458.29 5754500 458.29 +2007-02-13 459.15 462.78 457.26 459.1 4062600 459.1 +2007-02-14 460.0 469.13 459.22 465.93 5698800 465.93 +2007-02-15 466.0 466.13 460.72 461.47 4042400 461.47 +2007-02-16 462.8 470.15 462.06 469.94 6177000 469.94 +2007-02-20 468.47 472.75 464.71 472.1 4067600 472.1 +2007-02-21 469.84 478.68 467.74 475.86 5640600 475.86 +2007-02-22 478.69 484.24 474.39 475.85 5743900 475.85 +2007-02-23 475.75 476.95 467.8 470.62 3882600 470.62 +2007-02-26 472.83 475.25 463.75 464.93 3969900 464.93 +2007-02-27 455.0 459.8 447.17 448.77 9312800 448.77 +2007-02-28 450.41 453.67 443.04 449.45 8032300 449.45 +2007-03-01 442.67 452.42 440.0 448.23 8685200 448.23 +2007-03-02 445.11 448.7 438.68 438.68 6583600 438.68 +2007-03-05 437.02 445.5 437.0 440.95 6355100 440.95 +2007-03-06 447.47 459.0 447.38 457.55 7533700 457.55 +2007-03-07 462.69 463.14 454.29 455.64 6534100 455.64 +2007-03-08 459.22 465.5 454.1 454.72 5362800 454.72 +2007-03-09 458.0 458.4 450.1 452.96 4977700 452.96 +2007-03-12 452.57 455.25 451.11 454.75 3465400 454.75 +2007-03-13 450.11 451.93 442.83 443.03 6377300 443.03 +2007-03-14 443.23 448.66 439.0 448.0 8016900 448.0 +2007-03-15 447.86 449.82 443.94 446.19 3944200 446.19 +2007-03-16 445.65 446.7 439.89 440.85 5659100 440.85 +2007-03-19 443.25 448.5 440.63 447.23 5197700 447.23 +2007-03-20 445.79 447.6 443.6 445.28 3421500 445.28 +2007-03-21 445.3 456.57 445.21 456.55 5798300 456.55 +2007-03-22 455.61 462.17 452.53 462.04 5680700 462.04 +2007-03-23 461.45 463.39 457.08 461.83 4111300 461.83 +2007-03-26 460.55 465.0 455.62 465.0 4710300 465.0 +2007-03-27 463.55 465.23 460.34 463.62 3741200 463.62 +2007-03-28 461.87 465.44 460.15 461.88 4591600 461.88 +2007-03-29 464.55 466.0 455.0 460.92 3988500 460.92 +2007-03-30 462.1 463.4 456.14 458.16 3380200 458.16 +2007-04-02 457.76 458.53 452.12 458.53 3448500 458.53 +2007-04-03 464.05 474.25 464.0 472.6 6501800 472.6 +2007-04-04 472.14 473.0 469.58 471.02 3778800 471.02 +2007-04-05 471.3 472.09 469.62 471.51 2715800 471.51 +2007-04-09 472.98 473.0 465.59 468.21 3062100 468.21 +2007-04-10 467.09 470.79 465.16 466.5 2979300 466.5 +2007-04-11 466.06 469.4 462.61 464.53 3812000 464.53 +2007-04-12 464.0 468.0 462.24 467.39 2707900 467.39 +2007-04-13 468.45 468.77 463.36 466.29 2794800 466.29 +2007-04-16 468.46 476.99 468.15 474.27 5077900 474.27 +2007-04-17 473.8 476.39 471.6 472.8 3210100 472.8 +2007-04-18 471.26 479.9 469.53 476.01 5670500 476.01 +2007-04-19 474.5 481.95 469.59 471.65 11009600 471.65 +2007-04-20 490.52 492.5 482.02 482.48 12161500 482.48 +2007-04-23 480.1 485.0 478.26 479.08 5674600 479.08 +2007-04-24 478.61 479.98 475.55 477.53 3694700 477.53 +2007-04-25 480.0 481.37 476.11 477.99 3966800 477.99 +2007-04-26 478.1 484.45 477.11 481.18 4124900 481.18 +2007-04-27 480.07 482.4 478.33 479.01 2925700 479.01 +2007-04-30 479.15 481.35 471.38 471.38 3641200 471.38 +2007-05-01 472.19 472.81 464.17 469.0 3658200 469.0 +2007-05-02 468.65 471.08 465.73 465.78 3062700 465.78 +2007-05-03 466.22 474.07 465.29 473.23 3594200 473.23 +2007-05-04 470.12 474.84 465.88 471.12 3950000 471.12 +2007-05-07 472.14 472.82 466.47 467.27 3020100 467.27 +2007-05-08 466.13 468.17 464.73 466.81 2905100 466.81 +2007-05-09 466.15 471.73 463.88 469.25 3889900 469.25 +2007-05-10 467.04 469.49 461.02 461.47 3686300 461.47 +2007-05-11 461.83 467.0 461.0 466.74 2944100 466.74 +2007-05-14 465.48 467.51 460.0 461.78 3872700 461.78 +2007-05-15 461.96 462.54 457.41 458.0 4119000 458.0 +2007-05-16 462.0 473.14 459.02 472.61 6554200 472.61 +2007-05-17 472.46 475.22 470.81 470.96 4660600 470.96 +2007-05-18 472.03 472.7 469.75 470.32 3695900 470.32 +2007-05-21 469.53 479.2 466.72 470.6 6159300 470.6 +2007-05-22 473.0 479.01 473.0 475.86 3839000 475.86 +2007-05-23 480.82 483.41 473.75 473.97 5060200 473.97 +2007-05-24 475.15 479.2 471.5 474.33 4173600 474.33 +2007-05-25 479.7 484.95 477.27 483.52 5348500 483.52 +2007-05-29 485.0 491.8 484.0 487.11 5218000 487.11 +2007-05-30 484.5 498.84 483.0 498.6 7245800 498.6 +2007-05-31 500.56 508.78 497.06 497.91 8924300 497.91 +2007-06-01 501.0 505.02 497.93 500.4 4799000 500.4 +2007-06-04 497.91 510.51 497.59 507.07 7101000 507.07 +2007-06-05 509.75 519.0 506.61 518.84 10447100 518.84 +2007-06-06 516.75 520.78 515.26 518.25 7886700 518.25 +2007-06-07 519.75 526.5 512.51 515.06 10630500 515.06 +2007-06-08 516.2 519.64 509.46 515.49 6358200 515.49 +2007-06-11 514.02 518.25 510.0 511.34 4647700 511.34 +2007-06-12 508.71 511.67 503.17 504.77 6419500 504.77 +2007-06-13 507.09 508.54 498.69 505.24 7034000 505.24 +2007-06-14 505.38 505.88 501.7 502.84 4621200 502.84 +2007-06-15 508.19 509.0 501.23 505.89 6174100 505.89 +2007-06-18 506.18 516.0 504.24 515.2 4835900 515.2 +2007-06-19 514.01 517.25 511.54 514.31 4355300 514.31 +2007-06-20 516.96 518.75 509.06 509.97 4338200 509.97 +2007-06-21 510.98 515.29 506.28 514.11 4409700 514.11 +2007-06-22 516.42 524.99 516.1 524.98 7203700 524.98 +2007-06-25 528.98 534.99 523.38 527.42 7925000 527.42 +2007-06-26 532.73 533.2 526.24 530.26 5689500 530.26 +2007-06-27 525.0 527.99 519.56 526.29 6123100 526.29 +2007-06-28 524.88 529.5 523.8 525.01 4168400 525.01 +2007-06-29 526.02 527.4 519.46 522.7 3880600 522.7 +2007-07-02 525.49 531.85 524.2 530.38 3487600 530.38 +2007-07-03 531.06 534.4 527.5 534.34 1871800 534.34 +2007-07-05 535.56 544.4 532.15 541.63 4942900 541.63 +2007-07-06 541.25 543.87 538.73 539.4 2747000 539.4 +2007-07-09 543.0 548.74 540.26 542.56 3729800 542.56 +2007-07-10 543.79 547.0 541.65 543.34 3856000 543.34 +2007-07-11 543.61 546.5 540.01 544.47 3309300 544.47 +2007-07-12 545.86 547.32 540.22 545.33 3441600 545.33 +2007-07-13 547.91 552.67 547.25 552.16 5237100 552.16 +2007-07-16 550.3 558.58 549.31 552.99 6599500 552.99 +2007-07-17 555.04 557.73 552.38 555.0 4328600 555.0 +2007-07-18 553.89 554.5 543.81 549.5 6080000 549.5 +2007-07-19 553.46 553.52 542.24 548.59 11127200 548.59 +2007-07-20 511.9 523.18 509.5 520.12 17772300 520.12 +2007-07-23 519.01 520.0 512.15 512.51 6356700 512.51 +2007-07-24 509.3 518.69 507.11 514.0 5572100 514.0 +2007-07-25 516.98 517.02 505.56 509.76 5545000 509.76 +2007-07-26 508.74 512.59 498.88 508.0 6883400 508.0 +2007-07-27 508.53 516.62 505.5 511.89 5509100 511.89 +2007-07-30 512.92 519.34 510.5 516.11 3963300 516.11 +2007-07-31 520.23 520.44 510.0 510.0 4270500 510.0 +2007-08-01 510.5 516.51 508.14 512.94 4421500 512.94 +2007-08-02 513.72 514.99 509.0 511.01 3154900 511.01 +2007-08-03 510.05 513.2 503.0 503.0 3176200 503.0 +2007-08-06 503.0 510.15 502.5 510.0 3651500 510.0 +2007-08-07 509.75 519.88 509.04 516.02 4264300 516.02 +2007-08-08 519.34 525.78 517.09 525.78 4068800 525.78 +2007-08-09 520.8 526.82 514.63 514.73 4846500 514.73 +2007-08-10 510.18 518.72 505.63 515.75 5875200 515.75 +2007-08-13 519.54 519.75 513.03 515.5 3179300 515.5 +2007-08-14 515.72 517.4 508.0 508.6 3633700 508.6 +2007-08-15 509.0 511.69 496.71 497.55 5409500 497.55 +2007-08-16 492.02 496.43 480.46 491.52 8645600 491.52 +2007-08-17 497.44 501.0 491.65 500.04 5479400 500.04 +2007-08-20 502.46 502.56 496.0 497.92 2697300 497.92 +2007-08-21 498.94 508.16 497.77 506.61 3610600 506.61 +2007-08-22 509.96 516.25 509.25 512.75 3252700 512.75 +2007-08-23 516.0 516.13 507.0 512.19 3076700 512.19 +2007-08-24 512.61 515.55 508.5 515.0 2472700 515.0 +2007-08-27 514.43 517.45 511.4 513.26 2325100 513.26 +2007-08-28 511.53 514.98 505.79 506.4 3273900 506.4 +2007-08-29 507.84 513.3 507.23 512.88 2549300 512.88 +2007-08-30 512.36 515.4 510.58 511.4 2651700 511.4 +2007-08-31 513.1 516.5 511.47 515.25 2977600 515.25 +2007-09-04 515.02 528.0 514.62 525.15 3693700 525.15 +2007-09-05 523.4 529.48 522.25 527.8 3312900 527.8 +2007-09-06 529.36 529.83 518.24 523.52 3625900 523.52 +2007-09-07 517.86 521.24 516.8 519.35 3663600 519.35 +2007-09-10 521.28 522.07 510.88 514.48 3225800 514.48 +2007-09-11 516.99 521.65 515.73 521.33 2703600 521.33 +2007-09-12 520.53 527.98 519.0 522.65 2986000 522.65 +2007-09-13 524.06 527.21 523.22 524.78 1891100 524.78 +2007-09-14 523.2 530.27 522.22 528.75 2764900 528.75 +2007-09-17 526.53 529.28 524.07 525.3 2197500 525.3 +2007-09-18 526.52 537.25 524.27 535.27 4215700 535.27 +2007-09-19 539.27 549.45 538.86 546.85 5526900 546.85 +2007-09-20 547.0 556.8 546.03 552.83 5525000 552.83 +2007-09-21 556.34 560.79 552.83 560.1 8011700 560.1 +2007-09-24 561.0 571.46 560.0 568.02 5297000 568.02 +2007-09-25 564.0 569.56 562.86 569.0 2730600 569.0 +2007-09-26 570.4 571.79 563.81 568.16 3346100 568.16 +2007-09-27 571.73 571.74 565.78 567.5 2056300 567.5 +2007-09-28 567.0 569.55 564.12 567.27 2639500 567.27 +2007-10-01 569.97 584.35 569.61 582.55 4711300 582.55 +2007-10-02 583.38 596.81 580.01 584.39 7067500 584.39 +2007-10-03 586.25 588.99 580.36 584.02 3879500 584.02 +2007-10-04 585.09 585.09 577.06 579.03 2986700 579.03 +2007-10-05 587.11 596.0 587.01 594.05 5068700 594.05 +2007-10-08 595.0 610.26 593.95 609.62 5028000 609.62 +2007-10-09 615.11 623.78 608.39 615.18 8767800 615.18 +2007-10-10 621.36 625.68 616.8 625.39 5385600 625.39 +2007-10-11 633.64 641.41 609.0 622.0 11799000 622.0 +2007-10-12 623.98 638.4 618.24 637.39 6823700 637.39 +2007-10-15 638.47 639.86 615.55 620.11 6943800 620.11 +2007-10-16 618.49 625.92 611.99 616.0 6025300 616.0 +2007-10-17 630.45 634.0 621.59 633.48 6030500 633.48 +2007-10-18 635.41 641.37 628.5 639.62 12289200 639.62 +2007-10-19 654.56 658.49 643.23 644.71 15789000 644.71 +2007-10-22 638.67 655.0 636.28 650.75 6664400 650.75 +2007-10-23 661.25 677.6 660.0 675.77 6793700 675.77 +2007-10-24 672.71 677.47 659.56 675.82 7404200 675.82 +2007-10-25 678.68 678.97 663.55 668.51 5795500 668.51 +2007-10-26 674.03 676.54 668.06 674.6 3353900 674.6 +2007-10-29 677.77 680.0 672.09 679.23 3066300 679.23 +2007-10-30 677.51 699.91 677.51 694.77 6900600 694.77 +2007-10-31 700.69 707.0 696.04 707.0 6876800 707.0 +2007-11-01 702.79 713.72 701.78 703.21 6527200 703.21 +2007-11-02 710.51 713.58 697.34 711.25 5841500 711.25 +2007-11-05 706.99 730.23 706.07 725.65 8883700 725.65 +2007-11-06 737.56 741.79 725.0 741.79 8436300 741.79 +2007-11-07 741.13 747.24 723.14 732.94 8252900 732.94 +2007-11-08 734.6 734.89 677.18 693.84 16512200 693.84 +2007-11-09 675.78 681.88 661.21 663.97 11388100 663.97 +2007-11-12 657.74 669.93 626.21 632.07 10227300 632.07 +2007-11-13 644.99 660.92 632.07 660.55 8426100 660.55 +2007-11-14 673.28 675.49 636.27 641.68 8094700 641.68 +2007-11-15 638.57 647.5 624.0 629.65 6967700 629.65 +2007-11-16 633.94 635.49 616.02 633.63 9042800 633.63 +2007-11-19 629.59 636.77 618.5 625.85 5527400 625.85 +2007-11-20 636.48 659.1 632.87 648.54 9840600 648.54 +2007-11-21 643.77 669.97 642.08 660.52 7013500 660.52 +2007-11-23 670.0 678.28 668.11 676.7 2738700 676.7 +2007-11-26 680.2 693.4 665.0 666.0 6790100 666.0 +2007-11-27 674.8 676.43 650.26 673.57 8904500 673.57 +2007-11-28 682.11 694.3 672.14 692.26 7916500 692.26 +2007-11-29 690.75 702.79 687.77 697.0 6208000 697.0 +2007-11-30 711.0 711.06 682.11 693.0 7895500 693.0 +2007-12-03 691.01 695.0 681.14 681.53 4325100 681.53 +2007-12-04 678.31 692.0 677.12 684.16 4231800 684.16 +2007-12-05 692.73 698.93 687.5 698.51 4209600 698.51 +2007-12-06 697.8 716.56 697.01 715.26 4909000 715.26 +2007-12-07 714.99 718.0 710.5 714.87 3852100 714.87 +2007-12-10 715.99 724.8 714.0 718.42 3856200 718.42 +2007-12-11 719.94 720.99 698.78 699.2 6139100 699.2 +2007-12-12 714.0 714.32 688.5 699.35 6159100 699.35 +2007-12-13 696.31 697.62 681.21 694.05 5040800 694.05 +2007-12-14 687.51 699.7 687.26 689.96 3673500 689.96 +2007-12-17 688.0 695.42 663.67 669.23 5486000 669.23 +2007-12-18 674.16 676.71 652.5 673.35 7166700 673.35 +2007-12-19 674.21 679.5 669.0 677.37 4421100 677.37 +2007-12-20 685.83 691.0 680.61 689.69 4422200 689.69 +2007-12-21 697.88 699.26 693.24 696.69 5382000 696.69 +2007-12-24 694.99 700.73 693.06 700.73 1628400 700.73 +2007-12-26 698.99 713.22 698.21 710.84 2530000 710.84 +2007-12-27 707.07 716.0 700.74 700.74 2942500 700.74 +2007-12-28 704.93 707.95 696.54 702.53 2562700 702.53 +2007-12-31 698.57 702.49 690.58 691.48 2376200 691.48 +2008-01-02 692.87 697.37 677.73 685.19 4306900 685.19 +2008-01-03 685.26 686.85 676.52 685.33 3252500 685.33 +2008-01-04 679.69 680.96 655.0 657.0 5359800 657.0 +2008-01-07 653.94 662.28 637.35 649.25 6403400 649.25 +2008-01-08 653.0 659.96 631.0 631.68 5339100 631.68 +2008-01-09 630.04 653.34 622.51 653.2 6739700 653.2 +2008-01-10 645.01 657.2 640.11 646.73 6334200 646.73 +2008-01-11 642.7 649.47 630.11 638.25 4977000 638.25 +2008-01-14 651.14 657.4 645.25 653.82 4447500 653.82 +2008-01-15 645.9 649.05 635.38 637.65 5568200 637.65 +2008-01-16 628.97 639.99 601.93 615.95 10560000 615.95 +2008-01-17 620.76 625.74 598.01 600.79 8216800 600.79 +2008-01-18 608.36 609.99 598.45 600.25 8539600 600.25 +2008-01-22 562.03 597.5 561.2 584.35 9501500 584.35 +2008-01-23 560.71 568.0 519.0 548.62 16965700 548.62 +2008-01-24 558.8 579.69 554.14 574.49 9400900 574.49 +2008-01-25 591.81 595.0 566.18 566.4 6966000 566.4 +2008-01-28 570.97 572.24 548.6 555.98 5816700 555.98 +2008-01-29 560.47 561.33 540.67 550.52 6283000 550.52 +2008-01-30 549.19 560.43 543.51 548.27 7939600 548.27 +2008-01-31 539.01 573.0 534.29 564.3 14871300 564.3 +2008-02-01 528.67 536.67 510.0 515.9 17600500 515.9 +2008-02-04 509.07 512.78 492.55 495.43 13157100 495.43 +2008-02-05 489.43 509.0 488.52 506.8 11203300 506.8 +2008-02-06 511.14 511.17 497.93 501.71 7636400 501.71 +2008-02-07 496.86 514.19 494.76 504.95 7928900 504.95 +2008-02-08 509.41 517.73 508.7 516.69 6828900 516.69 +2008-02-11 520.52 523.71 513.4 521.16 5826000 521.16 +2008-02-12 523.39 530.6 513.03 518.09 6662300 518.09 +2008-02-13 522.5 534.99 518.69 534.62 6624700 534.62 +2008-02-14 538.35 541.04 531.0 532.25 6476700 532.25 +2008-02-15 528.31 532.66 524.33 529.64 5240100 529.64 +2008-02-19 534.94 535.06 506.5 508.95 6350400 508.95 +2008-02-20 503.51 511.01 498.82 509.0 6662200 509.0 +2008-02-21 512.85 513.21 499.5 502.86 5677800 502.86 +2008-02-22 502.06 509.0 497.55 507.8 5515900 507.8 +2008-02-25 505.95 506.5 485.74 486.44 8350800 486.44 +2008-02-26 461.2 466.47 446.85 464.19 23287300 464.19 +2008-02-27 460.13 475.49 459.64 472.86 10121900 472.86 +2008-02-28 470.5 479.09 467.36 475.39 6586900 475.39 +2008-02-29 471.87 479.74 464.65 471.18 9425400 471.18 +2008-03-03 471.51 472.72 450.11 457.02 7554500 457.02 +2008-03-04 450.95 453.36 435.78 444.6 13621700 444.6 +2008-03-05 445.25 454.17 444.0 447.7 7436600 447.7 +2008-03-06 447.69 453.3 431.18 432.7 7470100 432.7 +2008-03-07 428.88 440.0 426.24 433.35 8071800 433.35 +2008-03-10 428.83 431.0 413.04 413.62 7987600 413.62 +2008-03-11 425.26 440.15 424.65 439.84 8826900 439.84 +2008-03-12 440.01 447.88 438.07 440.18 6651900 440.18 +2008-03-13 432.67 446.98 428.78 443.01 7726600 443.01 +2008-03-14 442.98 449.34 430.62 437.92 6574400 437.92 +2008-03-17 427.99 433.71 412.11 419.87 7888200 419.87 +2008-03-18 428.98 440.84 425.53 439.16 7237200 439.16 +2008-03-19 441.11 447.5 431.67 432.0 6179000 432.0 +2008-03-20 427.32 435.7 417.5 433.55 9900400 433.55 +2008-03-24 438.43 465.78 437.72 460.56 6763500 460.56 +2008-03-25 457.46 457.47 446.0 450.78 5831600 450.78 +2008-03-26 452.59 462.87 449.29 458.19 5214200 458.19 +2008-03-27 446.0 448.61 440.49 444.08 5832200 444.08 +2008-03-28 447.46 453.57 434.31 438.08 4376200 438.08 +2008-03-31 435.64 442.69 432.01 440.47 4446400 440.47 +2008-04-01 447.74 466.5 446.87 465.71 6093100 465.71 +2008-04-02 469.9 475.74 460.39 465.7 5999000 465.7 +2008-04-03 461.73 463.29 448.13 455.12 6778400 455.12 +2008-04-04 457.01 477.83 456.2 471.09 5897200 471.09 +2008-04-07 477.03 485.44 473.53 476.82 5943500 476.82 +2008-04-08 473.04 474.14 462.01 467.81 4547000 467.81 +2008-04-09 469.13 472.0 457.54 464.19 6048100 464.19 +2008-04-10 464.96 473.86 461.85 469.08 5072400 469.08 +2008-04-11 464.07 467.26 455.01 457.45 4151500 457.45 +2008-04-14 457.16 457.45 450.15 451.66 3842600 451.66 +2008-04-15 458.13 459.72 443.72 446.84 4577600 446.84 +2008-04-16 444.4 458.28 441.0 455.03 7620200 455.03 +2008-04-17 455.63 459.37 446.52 449.54 13353000 449.54 +2008-04-18 535.21 547.7 524.77 539.41 18235600 539.41 +2008-04-21 539.39 542.59 530.29 537.79 7439700 537.79 +2008-04-22 537.57 560.83 537.56 555.0 7938500 555.0 +2008-04-23 557.94 559.31 540.95 546.49 4921500 546.49 +2008-04-24 551.29 554.49 540.02 543.04 4135100 543.04 +2008-04-25 549.02 553.0 542.73 544.06 4164400 544.06 +2008-04-28 545.88 556.81 539.0 552.12 4008600 552.12 +2008-04-29 550.83 563.4 550.01 558.47 4346000 558.47 +2008-04-30 562.21 584.86 558.47 574.29 7903000 574.29 +2008-05-01 578.31 594.93 576.97 593.08 6602800 593.08 +2008-05-02 598.49 602.45 579.3 581.29 6998800 581.29 +2008-05-05 598.86 599.0 587.13 594.9 6281000 594.9 +2008-05-06 591.0 592.0 583.0 586.36 4629300 586.36 +2008-05-07 590.27 599.49 576.43 579.0 6613000 579.0 +2008-05-08 586.2 589.3 578.91 583.01 5122900 583.01 +2008-05-09 579.0 585.0 571.3 573.2 4484900 573.2 +2008-05-12 574.75 586.75 568.91 584.94 4863900 584.94 +2008-05-13 586.23 587.95 578.55 583.0 5163500 583.0 +2008-05-14 586.49 591.19 575.25 576.3 4375800 576.3 +2008-05-15 579.0 582.95 575.61 581.0 4342700 581.0 +2008-05-16 581.43 584.68 578.32 580.07 4274100 580.07 +2008-05-19 578.55 588.88 573.52 577.52 5604500 577.52 +2008-05-20 574.63 582.48 572.91 578.6 3313600 578.6 +2008-05-21 578.52 581.41 547.89 549.99 6468100 549.99 +2008-05-22 551.95 554.21 540.25 549.46 5076300 549.46 +2008-05-23 546.96 553.0 537.81 544.62 4431500 544.62 +2008-05-27 544.96 562.6 543.85 560.9 3865500 560.9 +2008-05-28 567.94 571.49 561.1 568.24 4050400 568.24 +2008-05-29 574.79 585.88 573.2 583.0 4845000 583.0 +2008-05-30 583.47 589.92 581.3 585.8 3225200 585.8 +2008-06-02 582.5 583.89 571.27 575.0 3674200 575.0 +2008-06-03 576.5 580.5 560.61 567.3 4305300 567.3 +2008-06-04 565.33 578.0 564.55 572.22 3363200 572.22 +2008-06-05 577.08 588.04 576.21 586.3 3916700 586.3 +2008-06-06 579.75 580.72 567.0 567.0 4734500 567.0 +2008-06-09 568.06 570.0 545.4 557.87 5288300 557.87 +2008-06-10 549.56 558.82 546.78 554.17 3657400 554.17 +2008-06-11 556.24 557.34 544.46 545.2 3812900 545.2 +2008-06-12 548.76 558.0 546.88 552.95 5491600 552.95 +2008-06-13 561.49 575.7 561.34 571.51 6184400 571.51 +2008-06-16 566.5 579.1 566.5 572.81 3542800 572.81 +2008-06-17 576.35 578.07 568.38 569.46 3462900 569.46 +2008-06-18 564.51 568.99 559.16 562.38 3381200 562.38 +2008-06-19 555.35 563.78 550.81 560.2 5683100 560.2 +2008-06-20 556.98 556.98 544.51 546.43 5983100 546.43 +2008-06-23 545.36 553.15 542.02 545.21 3635900 545.21 +2008-06-24 545.14 551.19 535.1 542.3 4672600 542.3 +2008-06-25 544.97 557.8 543.67 551.0 4122200 551.0 +2008-06-26 544.1 544.93 528.26 528.82 5659500 528.82 +2008-06-27 527.68 530.0 515.09 528.07 5436900 528.07 +2008-06-30 532.47 538.0 523.06 526.42 3765300 526.42 +2008-07-01 519.58 536.72 517.0 534.73 4959900 534.73 +2008-07-02 536.51 540.38 526.06 527.04 4223000 527.04 +2008-07-03 530.88 539.23 527.5 537.0 2400500 537.0 +2008-07-07 542.3 549.0 535.6 543.91 4255200 543.91 +2008-07-08 545.99 555.19 540.0 554.53 4932400 554.53 +2008-07-09 550.76 555.68 540.73 541.55 4154000 541.55 +2008-07-10 545.0 549.5 530.72 540.57 4331700 540.57 +2008-07-11 536.5 539.5 519.43 533.8 4981400 533.8 +2008-07-14 539.0 540.06 515.45 521.62 4424800 521.62 +2008-07-15 516.28 527.5 501.1 516.09 6071000 516.09 +2008-07-16 514.04 536.5 510.6 535.6 4742200 535.6 +2008-07-17 534.16 537.05 524.5 533.44 8787400 533.44 +2008-07-18 498.35 498.98 478.19 481.32 11292400 481.32 +2008-07-21 480.88 484.09 465.7 468.8 5901500 468.8 +2008-07-22 466.72 480.25 465.6 477.11 4691500 477.11 +2008-07-23 481.61 497.23 478.1 489.22 4894100 489.22 +2008-07-24 496.7 496.87 475.62 475.62 3540900 475.62 +2008-07-25 486.49 493.13 481.5 491.98 3183500 491.98 +2008-07-28 492.09 492.09 475.13 477.12 3160000 477.12 +2008-07-29 479.3 487.26 478.0 483.11 2802800 483.11 +2008-07-30 485.5 486.02 472.81 482.7 3490700 482.7 +2008-07-31 474.56 480.89 471.44 473.75 2865100 473.75 +2008-08-01 472.51 473.22 462.5 467.86 3007900 467.86 +2008-08-04 468.12 473.01 461.9 463.0 2487000 463.0 +2008-08-05 467.59 480.08 466.33 479.85 3584500 479.85 +2008-08-06 478.37 489.77 472.51 486.34 3375800 486.34 +2008-08-07 482.0 484.0 476.41 479.12 2773800 479.12 +2008-08-08 480.15 495.75 475.69 495.01 3739300 495.01 +2008-08-11 492.47 508.88 491.78 500.84 4239300 500.84 +2008-08-12 502.0 506.13 498.0 502.61 2755700 502.61 +2008-08-13 501.6 503.54 493.88 500.03 3625500 500.03 +2008-08-14 497.7 507.61 496.29 505.49 2918600 505.49 +2008-08-15 506.99 510.66 505.5 510.15 3545700 510.15 +2008-08-18 509.84 510.0 495.51 498.3 3333900 498.3 +2008-08-19 490.43 498.28 486.63 490.5 3046500 490.5 +2008-08-20 494.72 496.69 482.57 485.0 3982100 485.0 +2008-08-21 482.92 489.9 479.27 486.53 3514100 486.53 +2008-08-22 491.5 494.88 489.48 490.59 2297200 490.59 +2008-08-25 486.11 497.0 481.5 483.01 2014300 483.01 +2008-08-26 483.46 483.46 470.59 474.16 3308200 474.16 +2008-08-27 473.73 474.83 464.84 468.58 4387100 468.58 +2008-08-28 472.49 476.45 470.33 473.78 3029700 473.78 +2008-08-29 469.75 471.01 462.33 463.29 3848200 463.29 +2008-09-02 476.77 482.18 461.42 465.25 6111500 465.25 +2008-09-03 468.73 474.29 459.58 464.41 4314600 464.41 +2008-09-04 460.0 463.24 449.4 450.26 4848500 450.26 +2008-09-05 445.49 452.46 440.08 444.25 4534300 444.25 +2008-09-08 452.02 452.94 417.55 419.95 9017900 419.95 +2008-09-09 423.17 432.38 415.0 418.66 7229600 418.66 +2008-09-10 424.47 424.48 409.68 414.16 6226800 414.16 +2008-09-11 408.35 435.09 406.38 433.75 6471400 433.75 +2008-09-12 430.21 441.99 429.0 437.66 6028000 437.66 +2008-09-15 424.0 441.97 423.71 433.86 6567400 433.86 +2008-09-16 425.96 449.28 425.49 442.93 6990700 442.93 +2008-09-17 438.48 439.14 413.44 414.49 9126900 414.49 +2008-09-18 422.64 439.18 410.5 439.08 8589400 439.08 +2008-09-19 461.0 462.07 443.28 449.15 10006000 449.15 +2008-09-22 454.13 454.13 429.0 430.14 4407300 430.14 +2008-09-23 433.25 440.79 425.72 429.27 5204200 429.27 +2008-09-24 430.34 445.0 430.11 435.11 4242000 435.11 +2008-09-25 438.84 450.0 435.98 439.6 5020300 439.6 +2008-09-26 428.0 437.16 421.03 431.04 5292500 431.04 +2008-09-29 419.51 423.51 380.71 381.0 10762900 381.0 +2008-09-30 395.98 425.08 392.32 400.52 3086300 400.52 +2008-10-01 411.15 416.98 403.1 411.72 6234800 411.72 +2008-10-02 409.79 409.98 386.0 390.49 5984900 390.49 +2008-10-03 397.35 412.5 383.07 386.91 7992900 386.91 +2008-10-06 373.98 375.99 357.16 371.21 11220600 371.21 +2008-10-07 373.33 374.98 345.37 346.01 11054400 346.01 +2008-10-08 330.16 358.99 326.11 338.11 11826400 338.11 +2008-10-09 344.52 348.57 321.67 328.98 8075000 328.98 +2008-10-10 313.16 341.89 310.3 332.0 10597800 332.0 +2008-10-13 355.79 381.95 345.75 381.02 8905500 381.02 +2008-10-14 393.53 394.5 357.0 362.71 7784800 362.71 diff --git a/tests/golden/type-customdate.tsv b/tests/golden/type-customdate.tsv new file mode 100644 index 000000000..00eb3f866 --- /dev/null +++ b/tests/golden/type-customdate.tsv @@ -0,0 +1,44 @@ +OrderDate Region Rep Item Units Unit_Cost Total +1991-05-01 East Jones Pencil 95 1.99 189.05 +1991-05-01 Central Kivell Binder 50 19.99 999.50 +1991-05-01 Central Jardine Pencil 36 4.99 179.64 +1991-05-01 Central Gill Pen 27 19.99 539.73 +1991-05-01 West Sorvino Pencil 56 2.99 167.44 +1991-05-01 East Jones Binder 60 4.99 299.40 +1991-05-01 Central Andrews Pencil 75 1.99 149.25 +1991-05-01 Central Jardine Pencil 90 4.99 449.10 +1991-05-01 West Thompson Pencil 32 1.99 63.68 +1991-05-01 East Jones Binder 60 8.99 539.40 +1991-05-01 Central Morgan Pencil 90 4.99 449.10 +1991-05-01 East Howard Binder 29 1.99 57.71 +1991-05-01 East Parent Binder 81 19.99 1619.19 +1991-05-01 East Jones Pencil 35 4.99 174.65 +1991-05-01 Central Smith Desk 2 125.00 250.00 +1991-05-01 East Jones Pen Set 16 15.99 255.84 +1991-05-01 Central Morgan Binder 28 8.99 251.72 +1991-05-01 East Jones Pen 64 8.99 575.36 +1991-05-01 East Parent Pen 15 19.99 299.85 +1991-05-01 Central Kivell Pen Set 96 4.99 479.04 +1991-05-01 Central Smith Pencil 67 1.29 86.43 +1991-05-01 East Parent Pen Set 74 15.99 1183.26 +1991-05-01 Central Gill Binder 46 8.99 413.54 +1991-05-01 Central Smith Binder 87 15.00 1305.00 +1991-05-01 East Jones Binder 4 4.99 19.96 +1991-05-01 West Sorvino Binder 7 19.99 139.93 +1991-05-01 Central Jardine Pen Set 50 4.99 249.50 +1991-05-01 Central Andrews Pencil 66 1.99 131.34 +1991-05-01 East Howard Pen 96 4.99 479.04 +1991-05-01 Central Gill Pencil 53 1.29 68.37 +1991-05-01 Central Gill Binder 80 8.99 719.20 +1991-05-01 Central Kivell Desk 5 125.00 625.00 +1991-05-01 East Jones Pen Set 62 4.99 309.38 +1991-05-01 Central Morgan Pen Set 55 12.49 686.95 +1991-05-01 Central Kivell Pen Set 42 23.95 1005.90 +1991-05-01 West Sorvino Desk 3 275.00 825.00 +1991-05-01 Central Gill Pencil 7 1.29 9.03 +1991-05-01 West Sorvino Pen 76 1.99 151.24 +1991-05-01 West Thompson Binder 57 19.99 1139.43 +1991-05-01 Central Andrews Pencil 14 1.29 18.06 +1991-05-01 Central Jardine Binder 11 4.99 54.89 +1991-05-01 Central Jardine Binder 94 19.99 1879.06 +1991-05-01 Central Andrews Binder 28 4.99 139.72 diff --git a/tests/load-numpy.vdj b/tests/load-numpy.vdj new file mode 100644 index 000000000..1cb698ee6 --- /dev/null +++ b/tests/load-numpy.vdj @@ -0,0 +1,3 @@ +#!vd -p +{"sheet": "global", "row": "npy_allow_pickle", "longname": "set-option", "input": "True", "keystrokes": ""} +{"longname": "open-file", "input": "sample_data/goog.npy", "keystrokes": "o"} diff --git a/tests/type-customdate.vdj b/tests/type-customdate.vdj new file mode 100644 index 000000000..e38610fce --- /dev/null +++ b/tests/type-customdate.vdj @@ -0,0 +1,7 @@ +#!vd -p +{"sheet": "global", "row": "disp_formatter", "longname": "set-option", "input": "python", "keystrokes": ""} +{"longname": "open-file", "input": "sample_data/sample.tsv", "keystrokes": "o"} +{"sheet": "sample", "col": "", "row": "", "longname": "select-rows", "input": "", "keystrokes": "gs", "comment": "select all rows"} +{"sheet": "sample", "col": "OrderDate", "row": "0", "longname": "setcol-input", "input": "05/1991", "keystrokes": "ge", "comment": "set contents of current column for selected rows to same input"} +{"sheet": "sample", "col": "", "row": "", "longname": "unselect-rows", "input": "", "keystrokes": "gu", "comment": "unselect all rows"} +{"sheet": "sample", "col": "OrderDate", "row": "", "longname": "type-customdate", "input": "%m/%Y", "comment": "set type of current column to custom date format"} From 3281a72d5a98408616ccfe789c875574e76a0253 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sun, 15 Jan 2023 18:16:14 -0800 Subject: [PATCH 96/98] [dev] update CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 763862beb..5f9988821 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ - [describe] fix custom describe aggregators (reported by @edupont #1574) - [dirsheet] fix incorrect filename with multiple extensions (reported by @kunliugithub #1571) - [display] show `disp_oddspace` for surrogate escapes (reported by @geekscrapy #1544) +- [graph] fix div-by-zero with only one y-value (reported by @midichef #1673) - [install] ensure setuptools files have appropriate permissions (reported by @icp1994 #1591) - [install] update data files in setup.py based on PEP 420 (reported by @Oblomov #1675) - [keystrokes] add `kDN` and `kUP` to translation table (reported by @djpohly #1336) @@ -47,6 +48,7 @@ - [open_txt] fix Exception with `open-config` when no `~/.visidatarc` (reported by @gunchev #1611) - [pdb] fix entering of pdb breakpoints for Python 3.9+ (reported by @jasonwirth #1317) - [sheets] sort all sheets on global **Sheets Sheet** (reported by @franzhuang #1620) +- [types] format int/vlen as true int (reported by @xlucn #1674) - [unzip-http] fix file extraction (`x`) on remote zip file - [unzip-http] handle files smaller than 64K (reported by @frosencrantz #1567) - [zsh-completion] fixed (reported by @pigmonkey #1583; PR by @Freed-Wu #1646) From 95c434a05f373e280078db449a711aecf8036b95 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sun, 15 Jan 2023 20:31:15 -0800 Subject: [PATCH 97/98] [dev] bump to v2.11 --- CHANGELOG.md | 2 +- README.md | 2 +- docs/man.md | 3 ++- setup.py | 2 +- visidata/__init__.py | 2 +- visidata/main.py | 2 +- visidata/man/vd.1 | 4 +++- visidata/man/vd.txt | 5 ++++- visidata/man/visidata.1 | 4 +++- 9 files changed, 17 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f9988821..4dd613af4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # VisiData version history -# v2.11 (2023-01-XX) +# v2.11 (2023-01-15) - [ci] drop support for Python 3.6 (related to https://github.com/actions/setup-python/issues/543) - [ci] add support for Python 3.11 (#1585) diff --git a/README.md b/README.md index 006701be1..3a6e558e2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# VisiData v2.10.2 +# VisiData v2.11 [![twitter @VisiData][1.1]][1] [![Tests](https://github.com/saulpw/visidata/workflows/visidata-ci-build/badge.svg)](https://github.com/saulpw/visidata/actions/workflows/main.yml) diff --git a/docs/man.md b/docs/man.md index 01a0a71f2..a1f7cfc14 100644 --- a/docs/man.md +++ b/docs/man.md @@ -511,6 +511,7 @@ vd(1) --csv-lineterminator=str " lineterminator passed to csv.writer --safety-first False sanitize input/output to handle edge cases, with a performance cost --xlsx-meta-columns False include columns for cell objects, font colors, and fill colors + --sqlite-onconnect=str sqlite statement to execute after opening a connection --fixed-rows=int 1000 number of rows to check for fixed width columns --fixed-maxcols=int 0 max number of fixed-width columns to create (0 is no max) --postgres-schema=str public The desired schema for the Postgres database @@ -533,7 +534,7 @@ vd(1) disp_splitwin_pct 0 height of second sheet on screen color_sidebar black on 114 blue color of sidebar disp_float_fmt {:.02f} default fmtstr to format for float values - disp_int_fmt {:.0f} default fmtstr to format for int values + disp_int_fmt {:d} default fmtstr to format for int values disp_note_none ⌀ visible contents of a cell whose value is None disp_truncator … indicator that the contents are only partially visible disp_oddspace · displayable character for odd whitespace diff --git a/setup.py b/setup.py index 4e6445ec2..68a710140 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ from setuptools import setup # tox can't actually run python3 setup.py: https://github.com/tox-dev/tox/issues/96 #from visidata import __version__ -__version__ = '2.11dev' +__version__ = '2.11' setup(name='visidata', version=__version__, diff --git a/visidata/__init__.py b/visidata/__init__.py index 99ad187c7..8cb0389d7 100644 --- a/visidata/__init__.py +++ b/visidata/__init__.py @@ -1,6 +1,6 @@ 'VisiData: a curses interface for exploring and arranging tabular data' -__version__ = '2.11dev' +__version__ = '2.11' __version_info__ = 'VisiData v' + __version__ __author__ = 'Saul Pwanson ' __status__ = 'Production/Stable' diff --git a/visidata/main.py b/visidata/main.py index fae041924..e0dd789be 100755 --- a/visidata/main.py +++ b/visidata/main.py @@ -2,7 +2,7 @@ # Usage: $0 [] [ ...] # $0 [] --play [--batch] [-w ] [-o ] [field=value ...] -__version__ = '2.11dev' +__version__ = '2.11' __version_info__ = 'saul.pw/VisiData v' + __version__ from copy import copy diff --git a/visidata/man/vd.1 b/visidata/man/vd.1 index 01a2f6457..1225cddd2 100644 --- a/visidata/man/vd.1 +++ b/visidata/man/vd.1 @@ -1046,6 +1046,8 @@ lineterminator passed to csv.writer sanitize input/output to handle edge cases, with a performance cost .It Sy --xlsx-meta-columns No " False" include columns for cell objects, font colors, and fill colors +.It Sy --sqlite-onconnect Ns = Ns Ar "str " No "" +sqlite statement to execute after opening a connection .It Sy --fixed-rows Ns = Ns Ar "int " No "1000" number of rows to check for fixed width columns .It Sy --fixed-maxcols Ns = Ns Ar "int " No "0" @@ -1085,7 +1087,7 @@ height of second sheet on screen color of sidebar .It Sy "disp_float_fmt " No "{:.02f}" default fmtstr to format for float values -.It Sy "disp_int_fmt " No "{:.0f}" +.It Sy "disp_int_fmt " No "{:d}" default fmtstr to format for int values .It Sy "disp_note_none " No "\[u2300]" visible contents of a cell whose value is None diff --git a/visidata/man/vd.txt b/visidata/man/vd.txt index 6baccd353..c41a2ce06 100644 --- a/visidata/man/vd.txt +++ b/visidata/man/vd.txt @@ -748,6 +748,9 @@ COMMANDLINE OPTIONS --xlsx-meta-columns False include columns for cell objects, font colors, and fill colors + --sqlite-onconnect=str sqlite statement to exe‐ + cute after opening a con‐ + nection --fixed-rows=int 1000 number of rows to check for fixed width columns --fixed-maxcols=int 0 max number of fixed-width @@ -789,7 +792,7 @@ COMMANDLINE OPTIONS color_sidebar black on 114 blue color of sidebar disp_float_fmt {:.02f} default fmtstr to format for float values - disp_int_fmt {:.0f} default fmtstr to format for int + disp_int_fmt {:d} default fmtstr to format for int values disp_note_none ⌀ visible contents of a cell whose value is None diff --git a/visidata/man/visidata.1 b/visidata/man/visidata.1 index 01a2f6457..1225cddd2 100644 --- a/visidata/man/visidata.1 +++ b/visidata/man/visidata.1 @@ -1046,6 +1046,8 @@ lineterminator passed to csv.writer sanitize input/output to handle edge cases, with a performance cost .It Sy --xlsx-meta-columns No " False" include columns for cell objects, font colors, and fill colors +.It Sy --sqlite-onconnect Ns = Ns Ar "str " No "" +sqlite statement to execute after opening a connection .It Sy --fixed-rows Ns = Ns Ar "int " No "1000" number of rows to check for fixed width columns .It Sy --fixed-maxcols Ns = Ns Ar "int " No "0" @@ -1085,7 +1087,7 @@ height of second sheet on screen color of sidebar .It Sy "disp_float_fmt " No "{:.02f}" default fmtstr to format for float values -.It Sy "disp_int_fmt " No "{:.0f}" +.It Sy "disp_int_fmt " No "{:d}" default fmtstr to format for int values .It Sy "disp_note_none " No "\[u2300]" visible contents of a cell whose value is None From 773e2bca5bc52475635d3ff83491882cabbe2667 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Sun, 15 Jan 2023 20:36:34 -0800 Subject: [PATCH 98/98] [tests] update golden for numpy test --- tests/golden/load-numpy.tsv | 1398 +++++++++++++++++------------------ 1 file changed, 699 insertions(+), 699 deletions(-) diff --git a/tests/golden/load-numpy.tsv b/tests/golden/load-numpy.tsv index 642354e9a..7e9c271b6 100644 --- a/tests/golden/load-numpy.tsv +++ b/tests/golden/load-numpy.tsv @@ -1,683 +1,683 @@ date open high low close volume adj_close -2004-08-19 100.0 104.06 95.96 100.34 22351900 100.34 -2004-08-20 101.01 109.08 100.5 108.31 11428600 108.31 -2004-08-23 110.75 113.48 109.05 109.4 9137200 109.4 -2004-08-24 111.24 111.6 103.57 104.87 7631300 104.87 -2004-08-25 104.96 108.0 103.88 106.0 4598900 106.0 +2004-08-19 100.00 104.06 95.96 100.34 22351900 100.34 +2004-08-20 101.01 109.08 100.50 108.31 11428600 108.31 +2004-08-23 110.75 113.48 109.05 109.40 9137200 109.40 +2004-08-24 111.24 111.60 103.57 104.87 7631300 104.87 +2004-08-25 104.96 108.00 103.88 106.00 4598900 106.00 2004-08-26 104.95 107.95 104.66 107.91 3551000 107.91 -2004-08-27 108.1 108.62 105.69 106.15 3109000 106.15 +2004-08-27 108.10 108.62 105.69 106.15 3109000 106.15 2004-08-30 105.28 105.49 102.01 102.01 2601000 102.01 -2004-08-31 102.3 103.71 102.16 102.37 2461400 102.37 -2004-09-01 102.7 102.97 99.67 100.25 4573700 100.25 +2004-08-31 102.30 103.71 102.16 102.37 2461400 102.37 +2004-09-01 102.70 102.97 99.67 100.25 4573700 100.25 2004-09-02 99.19 102.37 98.94 101.51 7566900 101.51 2004-09-03 100.95 101.74 99.32 100.01 2578800 100.01 -2004-09-07 101.01 102.0 99.61 101.58 2926700 101.58 -2004-09-08 100.74 103.03 100.5 102.3 2495300 102.3 -2004-09-09 102.53 102.71 101.0 102.31 2032900 102.31 -2004-09-10 101.6 106.56 101.3 105.33 4353800 105.33 -2004-09-13 106.63 108.41 106.46 107.5 3926000 107.5 -2004-09-14 107.45 112.0 106.79 111.49 5419900 111.49 -2004-09-15 110.56 114.23 110.2 112.0 5361900 112.0 -2004-09-16 112.34 115.8 111.65 113.97 4637800 113.97 +2004-09-07 101.01 102.00 99.61 101.58 2926700 101.58 +2004-09-08 100.74 103.03 100.50 102.30 2495300 102.30 +2004-09-09 102.53 102.71 101.00 102.31 2032900 102.31 +2004-09-10 101.60 106.56 101.30 105.33 4353800 105.33 +2004-09-13 106.63 108.41 106.46 107.50 3926000 107.50 +2004-09-14 107.45 112.00 106.79 111.49 5419900 111.49 +2004-09-15 110.56 114.23 110.20 112.00 5361900 112.00 +2004-09-16 112.34 115.80 111.65 113.97 4637800 113.97 2004-09-17 114.42 117.49 113.55 117.49 4741000 117.49 -2004-09-20 116.95 121.6 116.77 119.36 5319700 119.36 +2004-09-20 116.95 121.60 116.77 119.36 5319700 119.36 2004-09-21 119.81 120.42 117.51 117.84 3618000 117.84 -2004-09-22 117.4 119.67 116.81 118.38 3794400 118.38 +2004-09-22 117.40 119.67 116.81 118.38 3794400 118.38 2004-09-23 118.84 122.63 117.02 120.82 4272100 120.82 -2004-09-24 120.94 124.1 119.76 119.83 4566300 119.83 -2004-09-27 119.56 120.88 117.8 118.26 3536600 118.26 -2004-09-28 121.3 127.4 120.21 126.86 8473000 126.86 -2004-09-29 126.7 135.02 126.23 131.08 15273500 131.08 -2004-09-30 129.9 132.3 129.0 129.6 6885900 129.6 -2004-10-01 130.8 134.24 128.9 132.58 7570000 132.58 +2004-09-24 120.94 124.10 119.76 119.83 4566300 119.83 +2004-09-27 119.56 120.88 117.80 118.26 3536600 118.26 +2004-09-28 121.30 127.40 120.21 126.86 8473000 126.86 +2004-09-29 126.70 135.02 126.23 131.08 15273500 131.08 +2004-09-30 129.90 132.30 129.00 129.60 6885900 129.60 +2004-10-01 130.80 134.24 128.90 132.58 7570000 132.58 2004-10-04 135.25 136.87 134.03 135.06 6517900 135.06 2004-10-05 134.66 138.53 132.24 138.37 7494100 138.37 -2004-10-06 137.55 138.45 136.0 137.08 6697400 137.08 +2004-10-06 137.55 138.45 136.00 137.08 6697400 137.08 2004-10-07 136.92 139.88 136.55 138.85 7064600 138.85 2004-10-08 138.72 139.68 137.02 137.73 5540300 137.73 -2004-10-11 137.0 138.86 133.85 135.26 5241300 135.26 -2004-10-12 134.44 137.61 133.4 137.4 5838600 137.4 -2004-10-13 143.32 143.55 140.08 140.9 9893000 140.9 -2004-10-14 141.01 142.38 138.56 142.0 5226300 142.0 -2004-10-15 144.93 145.5 141.95 144.11 6604000 144.11 -2004-10-18 143.2 149.2 141.21 149.16 7025200 149.16 -2004-10-19 150.5 152.4 147.35 147.94 9064000 147.94 -2004-10-20 148.03 148.99 139.6 140.49 11372700 140.49 -2004-10-21 144.4 150.13 141.62 149.38 14589500 149.38 +2004-10-11 137.00 138.86 133.85 135.26 5241300 135.26 +2004-10-12 134.44 137.61 133.40 137.40 5838600 137.40 +2004-10-13 143.32 143.55 140.08 140.90 9893000 140.90 +2004-10-14 141.01 142.38 138.56 142.00 5226300 142.00 +2004-10-15 144.93 145.50 141.95 144.11 6604000 144.11 +2004-10-18 143.20 149.20 141.21 149.16 7025200 149.16 +2004-10-19 150.50 152.40 147.35 147.94 9064000 147.94 +2004-10-20 148.03 148.99 139.60 140.49 11372700 140.49 +2004-10-21 144.40 150.13 141.62 149.38 14589500 149.38 2004-10-22 170.54 180.17 164.08 172.43 36891900 172.43 -2004-10-25 176.4 194.43 172.55 187.4 32764200 187.4 -2004-10-26 186.34 192.64 180.0 181.8 22307100 181.8 +2004-10-25 176.40 194.43 172.55 187.40 32764200 187.40 +2004-10-26 186.34 192.64 180.00 181.80 22307100 181.80 2004-10-27 182.72 189.52 181.77 185.97 13356500 185.97 -2004-10-28 186.68 194.39 185.6 193.3 14846800 193.3 -2004-10-29 198.89 199.95 190.6 190.64 21162500 190.64 +2004-10-28 186.68 194.39 185.60 193.30 14846800 193.30 +2004-10-29 198.89 199.95 190.60 190.64 21162500 190.64 2004-11-01 193.55 197.67 191.27 196.03 12224900 196.03 2004-11-02 198.78 199.25 193.34 194.87 11346300 194.87 -2004-11-03 198.18 201.6 190.75 191.67 13888700 191.67 -2004-11-04 188.44 190.4 183.35 184.7 14409600 184.7 -2004-11-05 181.98 182.3 168.55 169.35 19833100 169.35 -2004-11-08 170.93 175.44 169.4 172.55 11191800 172.55 -2004-11-09 174.1 175.2 165.27 168.7 11064200 168.7 +2004-11-03 198.18 201.60 190.75 191.67 13888700 191.67 +2004-11-04 188.44 190.40 183.35 184.70 14409600 184.70 +2004-11-05 181.98 182.30 168.55 169.35 19833100 169.35 +2004-11-08 170.93 175.44 169.40 172.55 11191800 172.55 +2004-11-09 174.10 175.20 165.27 168.70 11064200 168.70 2004-11-10 170.67 172.52 166.33 167.86 10644000 167.86 2004-11-11 169.13 183.75 167.57 183.02 14985500 183.02 -2004-11-12 185.23 189.8 177.4 182.0 16746100 182.0 +2004-11-12 185.23 189.80 177.40 182.00 16746100 182.00 2004-11-15 180.45 188.32 178.75 184.87 11901500 184.87 -2004-11-16 177.5 179.47 170.83 172.54 20917400 172.54 -2004-11-17 169.02 177.5 169.0 172.5 18132900 172.5 +2004-11-16 177.50 179.47 170.83 172.54 20917400 172.54 +2004-11-17 169.02 177.50 169.00 172.50 18132900 172.50 2004-11-18 170.29 174.42 165.73 167.54 16629600 167.54 -2004-11-19 169.1 169.98 166.52 169.4 8769300 169.4 -2004-11-22 164.47 169.5 161.31 165.1 12368200 165.1 -2004-11-23 167.97 170.83 166.5 167.52 12413300 167.52 +2004-11-19 169.10 169.98 166.52 169.40 8769300 169.40 +2004-11-22 164.47 169.50 161.31 165.10 12368200 165.10 +2004-11-23 167.97 170.83 166.50 167.52 12413300 167.52 2004-11-24 174.82 177.21 172.51 174.76 15281000 174.76 -2004-11-26 175.8 180.03 175.32 179.39 6480100 179.39 +2004-11-26 175.80 180.03 175.32 179.39 6480100 179.39 2004-11-29 180.36 182.95 177.51 181.05 10666600 181.05 -2004-11-30 180.71 183.0 180.25 181.98 7700000 181.98 -2004-12-01 181.95 182.5 179.55 179.96 7864100 179.96 -2004-12-02 179.9 181.51 178.55 179.4 6260900 179.4 -2004-12-03 179.95 181.06 177.6 180.4 5869200 180.4 -2004-12-06 179.13 180.7 176.02 176.29 6254000 176.29 -2004-12-07 176.0 176.2 170.55 171.43 6870900 171.43 +2004-11-30 180.71 183.00 180.25 181.98 7700000 181.98 +2004-12-01 181.95 182.50 179.55 179.96 7864100 179.96 +2004-12-02 179.90 181.51 178.55 179.40 6260900 179.40 +2004-12-03 179.95 181.06 177.60 180.40 5869200 180.40 +2004-12-06 179.13 180.70 176.02 176.29 6254000 176.29 +2004-12-07 176.00 176.20 170.55 171.43 6870900 171.43 2004-12-08 170.35 173.68 168.73 169.98 7541800 169.98 -2004-12-09 170.25 173.5 168.47 173.43 7654000 173.43 +2004-12-09 170.25 173.50 168.47 173.43 7654000 173.43 2004-12-10 173.43 174.88 171.29 171.65 4317200 171.65 2004-12-13 172.17 173.18 169.45 170.45 4818600 170.45 -2004-12-14 171.0 178.82 169.6 178.69 11088400 178.69 +2004-12-14 171.00 178.82 169.60 178.69 11088400 178.69 2004-12-15 177.99 180.69 176.66 179.78 11471000 179.78 2004-12-16 176.95 180.49 175.95 176.47 8572800 176.47 -2004-12-17 176.76 180.5 176.55 180.08 7386200 180.08 -2004-12-20 182.0 188.46 181.87 185.02 9834500 185.02 -2004-12-21 186.31 187.88 183.4 183.75 5516300 183.75 -2004-12-22 183.9 186.85 183.01 186.3 3907000 186.3 -2004-12-23 187.45 188.6 186.0 187.9 3614600 187.9 -2004-12-27 189.15 193.3 189.1 191.91 6104100 191.91 +2004-12-17 176.76 180.50 176.55 180.08 7386200 180.08 +2004-12-20 182.00 188.46 181.87 185.02 9834500 185.02 +2004-12-21 186.31 187.88 183.40 183.75 5516300 183.75 +2004-12-22 183.90 186.85 183.01 186.30 3907000 186.30 +2004-12-23 187.45 188.60 186.00 187.90 3614600 187.90 +2004-12-27 189.15 193.30 189.10 191.91 6104100 191.91 2004-12-28 192.11 193.55 191.01 192.76 4145800 192.76 -2004-12-29 191.78 193.52 191.78 192.9 2678100 192.9 -2004-12-30 192.97 198.23 191.85 197.6 5904300 197.6 +2004-12-29 191.78 193.52 191.78 192.90 2678100 192.90 +2004-12-30 192.97 198.23 191.85 197.60 5904300 197.60 2004-12-31 199.23 199.88 192.56 192.79 7668500 192.79 -2005-01-03 197.4 203.64 195.46 202.71 15844200 202.71 -2005-01-04 201.4 202.93 193.48 194.5 13755900 194.5 -2005-01-05 193.45 196.9 192.23 193.51 8236600 193.51 -2005-01-06 195.08 195.9 187.72 188.55 10387100 188.55 +2005-01-03 197.40 203.64 195.46 202.71 15844200 202.71 +2005-01-04 201.40 202.93 193.48 194.50 13755900 194.50 +2005-01-05 193.45 196.90 192.23 193.51 8236600 193.51 +2005-01-06 195.08 195.90 187.72 188.55 10387100 188.55 2005-01-07 190.64 194.25 188.78 193.85 9662900 193.85 -2005-01-10 194.5 198.1 191.83 195.06 7539600 195.06 +2005-01-10 194.50 198.10 191.83 195.06 7539600 195.06 2005-01-11 195.62 197.71 193.18 193.54 6958700 193.54 -2005-01-12 194.33 195.93 190.5 195.38 8177800 195.38 +2005-01-12 194.33 195.93 190.50 195.38 8177800 195.38 2005-01-13 195.38 197.39 194.05 195.33 6849400 195.33 -2005-01-14 196.0 200.01 194.13 199.97 9640300 199.97 -2005-01-18 200.97 205.02 198.66 203.9 13172600 203.9 -2005-01-19 204.65 205.3 196.71 197.3 11257700 197.3 -2005-01-20 192.5 196.25 192.0 193.92 9001600 193.92 +2005-01-14 196.00 200.01 194.13 199.97 9640300 199.97 +2005-01-18 200.97 205.02 198.66 203.90 13172600 203.90 +2005-01-19 204.65 205.30 196.71 197.30 11257700 197.30 +2005-01-20 192.50 196.25 192.00 193.92 9001600 193.92 2005-01-21 194.54 195.36 188.12 188.28 9258400 188.28 2005-01-24 188.69 189.33 180.32 180.72 14022700 180.72 2005-01-25 181.94 182.24 176.29 177.12 10659200 177.12 2005-01-26 179.27 189.41 179.15 189.24 12307900 189.24 -2005-01-27 188.76 188.86 185.2 188.08 6627400 188.08 -2005-01-28 190.02 194.7 186.34 190.34 12208200 190.34 +2005-01-27 188.76 188.86 185.20 188.08 6627400 188.08 +2005-01-28 190.02 194.70 186.34 190.34 12208200 190.34 2005-01-31 193.69 196.36 191.72 195.62 9596700 195.62 -2005-02-01 194.38 196.66 190.63 191.9 18839000 191.9 -2005-02-02 215.55 216.8 203.66 205.96 32799300 205.96 +2005-02-01 194.38 196.66 190.63 191.90 18839000 191.90 +2005-02-02 215.55 216.80 203.66 205.96 32799300 205.96 2005-02-03 205.99 213.37 205.81 210.86 12988100 210.86 -2005-02-04 206.47 207.75 202.6 204.36 14819300 204.36 -2005-02-07 205.26 206.4 195.51 196.03 12960400 196.03 +2005-02-04 206.47 207.75 202.60 204.36 14819300 204.36 +2005-02-07 205.26 206.40 195.51 196.03 12960400 196.03 2005-02-08 196.96 200.02 194.53 198.64 11480000 198.64 -2005-02-09 200.76 201.6 189.46 191.58 17171500 191.58 +2005-02-09 200.76 201.60 189.46 191.58 17171500 191.58 2005-02-10 191.97 192.21 185.25 187.98 18982700 187.98 -2005-02-11 186.66 192.32 186.07 187.4 13116000 187.4 -2005-02-14 182.85 193.08 181.0 192.99 38562200 192.99 -2005-02-15 193.6 199.84 193.08 195.23 25782800 195.23 -2005-02-16 194.7 199.33 194.3 198.41 16532300 198.41 -2005-02-17 197.83 199.75 196.81 197.9 10414400 197.9 +2005-02-11 186.66 192.32 186.07 187.40 13116000 187.40 +2005-02-14 182.85 193.08 181.00 192.99 38562200 192.99 +2005-02-15 193.60 199.84 193.08 195.23 25782800 195.23 +2005-02-16 194.70 199.33 194.30 198.41 16532300 198.41 +2005-02-17 197.83 199.75 196.81 197.90 10414400 197.90 2005-02-18 198.51 198.84 196.66 197.95 8485900 197.95 -2005-02-22 196.5 198.9 190.39 191.37 13483700 191.37 -2005-02-23 193.3 194.48 188.66 193.95 15586000 193.95 +2005-02-22 196.50 198.90 190.39 191.37 13483700 191.37 +2005-02-23 193.30 194.48 188.66 193.95 15586000 193.95 2005-02-24 183.37 189.85 182.23 188.89 25814300 188.89 2005-02-25 189.15 189.92 185.51 185.87 9973500 185.87 -2005-02-28 186.0 189.87 185.85 187.99 7818400 187.99 -2005-03-01 189.29 189.75 182.0 186.06 9311200 186.06 +2005-02-28 186.00 189.87 185.85 187.99 7818400 187.99 +2005-03-01 189.29 189.75 182.00 186.06 9311200 186.06 2005-03-02 185.95 187.67 184.36 185.18 7285500 185.18 2005-03-03 186.13 187.75 184.31 187.01 7608600 187.01 -2005-03-04 186.7 187.25 185.07 185.9 6774100 185.9 -2005-03-07 187.78 189.6 187.03 188.81 8667400 188.81 -2005-03-08 189.1 189.85 184.97 185.2 8046100 185.2 +2005-03-04 186.70 187.25 185.07 185.90 6774100 185.90 +2005-03-07 187.78 189.60 187.03 188.81 8667400 188.81 +2005-03-08 189.10 189.85 184.97 185.20 8046100 185.20 2005-03-09 184.21 184.65 180.16 181.35 11360400 181.35 -2005-03-10 181.01 181.2 177.4 179.98 10960500 179.98 -2005-03-11 180.44 180.95 177.15 177.8 8028300 177.8 -2005-03-14 178.33 178.4 172.57 174.99 11146600 174.99 -2005-03-15 175.3 180.0 174.21 178.61 10422100 178.61 -2005-03-16 176.7 178.61 175.01 175.6 7106300 175.6 -2005-03-17 177.13 179.64 175.8 179.29 8260600 179.29 -2005-03-18 178.81 180.4 178.31 180.04 7090000 180.04 +2005-03-10 181.01 181.20 177.40 179.98 10960500 179.98 +2005-03-11 180.44 180.95 177.15 177.80 8028300 177.80 +2005-03-14 178.33 178.40 172.57 174.99 11146600 174.99 +2005-03-15 175.30 180.00 174.21 178.61 10422100 178.61 +2005-03-16 176.70 178.61 175.01 175.60 7106300 175.60 +2005-03-17 177.13 179.64 175.80 179.29 8260600 179.29 +2005-03-18 178.81 180.40 178.31 180.04 7090000 180.04 2005-03-21 179.27 182.17 177.25 180.88 7483700 180.88 -2005-03-22 181.18 181.94 177.85 178.6 5631700 178.6 +2005-03-22 181.18 181.94 177.85 178.60 5631700 178.60 2005-03-23 177.97 180.24 177.97 178.98 4845000 178.98 -2005-03-24 180.7 180.86 179.2 179.25 3705200 179.25 -2005-03-28 181.68 184.8 180.95 181.42 8738000 181.42 +2005-03-24 180.70 180.86 179.20 179.25 3705200 179.25 +2005-03-28 181.68 184.80 180.95 181.42 8738000 181.42 2005-03-29 181.05 183.28 178.07 179.57 6473000 179.57 -2005-03-30 180.64 181.45 179.6 180.45 6236100 180.45 +2005-03-30 180.64 181.45 179.60 180.45 6236100 180.45 2005-03-31 177.95 181.39 177.64 180.51 6768600 180.51 2005-04-01 181.76 182.95 179.99 180.04 6182000 180.04 2005-04-04 179.95 185.32 179.84 185.29 8076400 185.29 2005-04-05 187.73 190.26 187.57 188.57 8736700 188.57 2005-04-06 189.24 189.65 187.58 189.22 5252600 189.22 2005-04-07 188.78 194.62 188.64 193.76 9692200 193.76 -2005-04-08 193.69 195.1 191.45 192.05 5116600 192.05 -2005-04-11 193.09 194.8 192.32 193.23 5410500 193.23 -2005-04-12 193.0 194.42 189.41 193.96 7319600 193.96 +2005-04-08 193.69 195.10 191.45 192.05 5116600 192.05 +2005-04-11 193.09 194.80 192.32 193.23 5410500 193.23 +2005-04-12 193.00 194.42 189.41 193.96 7319600 193.96 2005-04-13 193.47 194.32 189.73 192.93 6555800 192.93 -2005-04-14 193.27 194.36 190.1 191.45 6152700 191.45 -2005-04-15 190.1 190.34 184.66 185.0 11577400 185.0 +2005-04-14 193.27 194.36 190.10 191.45 6152700 191.45 +2005-04-15 190.10 190.34 184.66 185.00 11577400 185.00 2005-04-18 184.58 187.88 183.49 186.97 6550300 186.97 -2005-04-19 189.33 192.0 188.03 191.4 8430000 191.4 -2005-04-20 198.58 200.5 195.91 198.1 15451500 198.1 -2005-04-21 200.42 205.0 199.32 204.22 17751900 204.22 -2005-04-22 222.9 224.0 214.26 215.81 33205100 215.81 +2005-04-19 189.33 192.00 188.03 191.40 8430000 191.40 +2005-04-20 198.58 200.50 195.91 198.10 15451500 198.10 +2005-04-21 200.42 205.00 199.32 204.22 17751900 204.22 +2005-04-22 222.90 224.00 214.26 215.81 33205100 215.81 2005-04-25 217.82 224.74 217.52 223.53 19840000 223.53 -2005-04-26 220.22 222.0 218.29 218.75 17272000 218.75 +2005-04-26 220.22 222.00 218.29 218.75 17272000 218.75 2005-04-27 217.99 220.85 216.74 219.78 10264800 219.78 -2005-04-28 219.5 222.08 217.71 219.45 8682800 219.45 -2005-04-29 221.91 222.25 217.82 220.0 9170200 220.0 -2005-05-02 222.05 223.7 220.21 222.29 9767400 222.29 +2005-04-28 219.50 222.08 217.71 219.45 8682800 219.45 +2005-04-29 221.91 222.25 217.82 220.00 9170200 220.00 +2005-05-02 222.05 223.70 220.21 222.29 9767400 222.29 2005-05-03 221.85 228.15 221.32 226.19 17780200 226.19 -2005-05-04 227.23 229.88 227.0 228.5 12083500 228.5 +2005-05-04 227.23 229.88 227.00 228.50 12083500 228.50 2005-05-05 228.62 228.62 225.88 226.98 7509600 226.98 -2005-05-06 228.4 229.25 226.47 228.02 6763900 228.02 -2005-05-09 228.0 228.5 225.43 226.02 5536800 226.02 -2005-05-10 225.47 227.8 224.72 227.8 6345800 227.8 +2005-05-06 228.40 229.25 226.47 228.02 6763900 228.02 +2005-05-09 228.00 228.50 225.43 226.02 5536800 226.02 +2005-05-10 225.47 227.80 224.72 227.80 6345800 227.80 2005-05-11 228.97 231.98 227.93 231.29 11478800 231.29 -2005-05-12 230.81 232.23 228.2 228.72 8948200 228.72 +2005-05-12 230.81 232.23 228.20 228.72 8948200 228.72 2005-05-13 229.18 231.09 227.32 229.24 7415500 229.24 2005-05-16 229.68 231.62 228.57 231.05 5681400 231.05 -2005-05-17 230.56 233.45 230.2 233.13 7808900 233.13 +2005-05-17 230.56 233.45 230.20 233.13 7808900 233.13 2005-05-18 233.61 239.97 233.52 239.16 12312000 239.16 2005-05-19 240.34 241.17 238.27 239.18 9716500 239.18 2005-05-20 241.21 241.67 239.65 241.61 8163500 241.61 -2005-05-23 243.16 258.1 242.71 255.45 21388300 255.45 -2005-05-24 256.96 265.44 253.5 256.0 29043100 256.0 +2005-05-23 243.16 258.10 242.71 255.45 21388300 255.45 +2005-05-24 256.96 265.44 253.50 256.00 29043100 256.00 2005-05-25 252.73 260.98 250.63 260.81 18057900 260.81 -2005-05-26 260.96 263.76 258.3 259.2 13546600 259.2 -2005-05-27 260.46 266.05 259.25 266.0 12184100 266.0 -2005-05-31 269.43 278.4 269.37 277.27 22236800 277.27 -2005-06-01 283.2 292.89 282.02 288.0 35191700 288.0 -2005-06-02 288.73 289.78 284.6 287.9 17974100 287.9 -2005-06-03 286.79 289.3 277.41 280.26 18782300 280.26 +2005-05-26 260.96 263.76 258.30 259.20 13546600 259.20 +2005-05-27 260.46 266.05 259.25 266.00 12184100 266.00 +2005-05-31 269.43 278.40 269.37 277.27 22236800 277.27 +2005-06-01 283.20 292.89 282.02 288.00 35191700 288.00 +2005-06-02 288.73 289.78 284.60 287.90 17974100 287.90 +2005-06-03 286.79 289.30 277.41 280.26 18782300 280.26 2005-06-06 282.39 293.75 281.83 290.94 22525900 290.94 -2005-06-07 297.1 299.59 290.3 293.12 24323000 293.12 -2005-06-08 292.85 293.19 278.0 279.56 25700900 279.56 -2005-06-09 284.72 288.5 280.56 286.31 16441100 286.31 -2005-06-10 286.99 287.28 280.02 282.5 12696600 282.5 +2005-06-07 297.10 299.59 290.30 293.12 24323000 293.12 +2005-06-08 292.85 293.19 278.00 279.56 25700900 279.56 +2005-06-09 284.72 288.50 280.56 286.31 16441100 286.31 +2005-06-10 286.99 287.28 280.02 282.50 12696600 282.50 2005-06-13 279.82 284.19 276.52 282.75 12803200 282.75 2005-06-14 278.59 281.24 277.75 278.35 10091900 278.35 -2005-06-15 275.0 277.3 267.43 274.8 20883100 274.8 -2005-06-16 274.26 278.3 273.07 277.44 12462400 277.44 -2005-06-17 279.0 280.3 275.9 280.3 10434400 280.3 -2005-06-20 276.09 287.67 271.73 286.7 21024700 286.7 -2005-06-21 288.07 290.3 284.97 287.84 15132300 287.84 -2005-06-22 289.67 292.32 288.67 289.3 10474000 289.3 -2005-06-23 288.0 294.81 286.5 289.71 14056400 289.71 -2005-06-24 290.9 298.0 289.58 297.25 17771200 297.25 -2005-06-27 298.9 304.47 293.86 304.1 17802900 304.1 -2005-06-28 306.28 309.25 302.0 302.0 19036500 302.0 -2005-06-29 302.5 304.38 292.15 292.72 18298700 292.72 +2005-06-15 275.00 277.30 267.43 274.80 20883100 274.80 +2005-06-16 274.26 278.30 273.07 277.44 12462400 277.44 +2005-06-17 279.00 280.30 275.90 280.30 10434400 280.30 +2005-06-20 276.09 287.67 271.73 286.70 21024700 286.70 +2005-06-21 288.07 290.30 284.97 287.84 15132300 287.84 +2005-06-22 289.67 292.32 288.67 289.30 10474000 289.30 +2005-06-23 288.00 294.81 286.50 289.71 14056400 289.71 +2005-06-24 290.90 298.00 289.58 297.25 17771200 297.25 +2005-06-27 298.90 304.47 293.86 304.10 17802900 304.10 +2005-06-28 306.28 309.25 302.00 302.00 19036500 302.00 +2005-06-29 302.50 304.38 292.15 292.72 18298700 292.72 2005-06-30 294.34 298.93 291.04 294.15 15094400 294.15 2005-07-01 295.04 296.24 289.22 291.25 9227600 291.25 -2005-07-05 292.1 295.98 290.23 295.71 7494000 295.71 -2005-07-06 297.3 297.6 291.38 291.52 8000300 291.52 -2005-07-07 289.39 295.8 288.51 295.54 10672100 295.54 -2005-07-08 296.25 297.5 294.05 296.23 7457600 296.23 -2005-07-11 296.4 296.6 291.02 293.35 8390300 293.35 -2005-07-12 293.39 294.4 290.93 291.78 5864900 291.78 -2005-07-13 292.51 299.24 292.1 298.86 11437900 298.86 +2005-07-05 292.10 295.98 290.23 295.71 7494000 295.71 +2005-07-06 297.30 297.60 291.38 291.52 8000300 291.52 +2005-07-07 289.39 295.80 288.51 295.54 10672100 295.54 +2005-07-08 296.25 297.50 294.05 296.23 7457600 296.23 +2005-07-11 296.40 296.60 291.02 293.35 8390300 293.35 +2005-07-12 293.39 294.40 290.93 291.78 5864900 291.78 +2005-07-13 292.51 299.24 292.10 298.86 11437900 298.86 2005-07-14 305.34 306.75 300.07 300.89 10667700 300.89 -2005-07-15 301.24 303.4 299.78 301.19 8438400 301.19 -2005-07-18 300.0 301.9 297.75 299.54 6207800 299.54 -2005-07-19 302.1 310.35 301.8 309.9 12621400 309.9 -2005-07-20 305.57 312.61 301.8 312.0 14310400 312.0 -2005-07-21 314.05 317.8 311.21 313.94 19789400 313.94 -2005-07-22 306.37 309.25 296.33 302.4 23386800 302.4 +2005-07-15 301.24 303.40 299.78 301.19 8438400 301.19 +2005-07-18 300.00 301.90 297.75 299.54 6207800 299.54 +2005-07-19 302.10 310.35 301.80 309.90 12621400 309.90 +2005-07-20 305.57 312.61 301.80 312.00 14310400 312.00 +2005-07-21 314.05 317.80 311.21 313.94 19789400 313.94 +2005-07-22 306.37 309.25 296.33 302.40 23386800 302.40 2005-07-25 302.39 303.29 294.96 295.85 9658800 295.85 -2005-07-26 295.01 298.0 292.09 296.09 9816900 296.09 -2005-07-27 297.74 298.23 292.4 296.93 7217900 296.93 -2005-07-28 297.41 297.41 293.28 293.5 5925600 293.5 +2005-07-26 295.01 298.00 292.09 296.09 9816900 296.09 +2005-07-27 297.74 298.23 292.40 296.93 7217900 296.93 +2005-07-28 297.41 297.41 293.28 293.50 5925600 293.50 2005-07-29 292.14 292.84 286.99 287.76 8363300 287.76 -2005-08-01 288.12 292.5 288.1 291.61 5662400 291.61 -2005-08-02 291.6 299.52 291.12 299.19 7290200 299.19 -2005-08-03 298.0 299.72 295.6 297.3 5930600 297.3 -2005-08-04 295.55 299.0 295.25 297.73 5236500 297.73 -2005-08-05 297.5 298.51 291.31 292.35 5939700 292.35 -2005-08-08 293.6 295.65 290.49 291.25 4481800 291.25 +2005-08-01 288.12 292.50 288.10 291.61 5662400 291.61 +2005-08-02 291.60 299.52 291.12 299.19 7290200 299.19 +2005-08-03 298.00 299.72 295.60 297.30 5930600 297.30 +2005-08-04 295.55 299.00 295.25 297.73 5236500 297.73 +2005-08-05 297.50 298.51 291.31 292.35 5939700 292.35 +2005-08-08 293.60 295.65 290.49 291.25 4481800 291.25 2005-08-09 291.96 292.68 288.51 291.57 5779300 291.57 -2005-08-10 291.3 292.33 284.88 285.68 6879000 285.68 +2005-08-10 291.30 292.33 284.88 285.68 6879000 285.68 2005-08-11 285.89 286.58 280.62 284.05 7514900 284.05 -2005-08-12 283.36 290.2 281.64 289.72 6585900 289.72 -2005-08-15 289.8 292.77 283.77 284.0 8174700 284.0 +2005-08-12 283.36 290.20 281.64 289.72 6585900 289.72 +2005-08-15 289.80 292.77 283.77 284.00 8174700 284.00 2005-08-16 284.88 287.79 283.34 285.65 7109200 285.65 -2005-08-17 285.51 286.57 284.0 285.1 3883300 285.1 -2005-08-18 275.91 280.5 275.0 279.99 11872800 279.99 -2005-08-19 280.99 281.45 279.62 280.0 5542900 280.0 +2005-08-17 285.51 286.57 284.00 285.10 3883300 285.10 +2005-08-18 275.91 280.50 275.00 279.99 11872800 279.99 +2005-08-19 280.99 281.45 279.62 280.00 5542900 280.00 2005-08-22 281.24 281.47 273.35 274.01 6813000 274.01 2005-08-23 276.16 279.74 274.12 279.58 5821700 279.58 2005-08-24 277.57 284.75 276.45 282.57 8593100 282.57 -2005-08-25 282.55 284.0 279.97 282.59 4376600 282.59 +2005-08-25 282.55 284.00 279.97 282.59 4376600 282.59 2005-08-26 283.48 285.02 282.66 283.58 3755300 283.58 2005-08-29 282.24 289.12 282.24 288.45 5903000 288.45 2005-08-30 287.39 289.51 285.88 287.27 4792000 287.27 -2005-08-31 288.23 288.5 284.36 286.0 5034000 286.0 -2005-09-01 285.91 287.5 285.0 286.25 2742100 286.25 +2005-08-31 288.23 288.50 284.36 286.00 5034000 286.00 +2005-09-01 285.91 287.50 285.00 286.25 2742100 286.25 2005-09-02 286.51 289.99 286.44 288.45 3434500 288.45 -2005-09-06 289.0 289.39 286.8 287.11 4212300 287.11 -2005-09-07 285.89 295.5 285.28 294.87 7499500 294.87 +2005-09-06 289.00 289.39 286.80 287.11 4212300 287.11 +2005-09-07 285.89 295.50 285.28 294.87 7499500 294.87 2005-09-08 294.83 299.28 293.36 295.39 6613300 295.39 -2005-09-09 297.28 299.1 296.56 299.09 4390500 299.09 -2005-09-12 301.75 311.42 301.0 309.74 10386500 309.74 -2005-09-13 309.0 315.53 306.17 311.68 10299900 311.68 -2005-09-14 308.73 313.28 300.3 303.0 11275800 303.0 +2005-09-09 297.28 299.10 296.56 299.09 4390500 299.09 +2005-09-12 301.75 311.42 301.00 309.74 10386500 309.74 +2005-09-13 309.00 315.53 306.17 311.68 10299900 311.68 +2005-09-14 308.73 313.28 300.30 303.00 11275800 303.00 2005-09-15 299.52 306.75 297.91 302.62 15466200 302.62 -2005-09-16 304.02 304.5 299.87 300.2 7579800 300.2 -2005-09-19 301.0 306.0 300.71 303.79 5761900 303.79 -2005-09-20 306.15 311.3 305.23 307.91 9351000 307.91 -2005-09-21 308.41 313.76 305.96 311.9 10119700 311.9 -2005-09-22 311.5 319.22 310.17 311.37 13006400 311.37 -2005-09-23 313.0 317.21 312.59 315.36 8483800 315.36 -2005-09-26 319.5 320.95 312.56 314.28 9894400 314.28 +2005-09-16 304.02 304.50 299.87 300.20 7579800 300.20 +2005-09-19 301.00 306.00 300.71 303.79 5761900 303.79 +2005-09-20 306.15 311.30 305.23 307.91 9351000 307.91 +2005-09-21 308.41 313.76 305.96 311.90 10119700 311.90 +2005-09-22 311.50 319.22 310.17 311.37 13006400 311.37 +2005-09-23 313.00 317.21 312.59 315.36 8483800 315.36 +2005-09-26 319.50 320.95 312.56 314.28 9894400 314.28 2005-09-27 314.95 318.41 313.38 313.94 6873100 313.94 -2005-09-28 314.22 315.1 305.6 306.0 7997400 306.0 +2005-09-28 314.22 315.10 305.60 306.00 7997400 306.00 2005-09-29 306.68 310.72 306.08 309.62 5613800 309.62 -2005-09-30 314.22 317.5 312.29 316.46 9151300 316.46 +2005-09-30 314.22 317.50 312.29 316.46 9151300 316.46 2005-10-03 313.63 320.11 312.79 318.68 9160300 318.68 -2005-10-04 319.95 321.28 310.74 311.0 9144300 311.0 -2005-10-05 312.69 314.9 308.0 310.71 8328400 310.71 +2005-10-04 319.95 321.28 310.74 311.00 9144300 311.00 +2005-10-05 312.69 314.90 308.00 310.71 8328400 310.71 2005-10-06 314.14 314.48 310.09 312.75 7993800 312.75 2005-10-07 314.79 316.67 310.54 312.99 6770300 312.99 2005-10-10 313.31 314.82 309.15 310.65 5572200 310.65 -2005-10-11 310.61 312.65 304.86 306.1 8542600 306.1 -2005-10-12 305.2 307.19 299.0 300.97 9306200 300.97 -2005-10-13 302.0 302.0 290.68 297.44 10567700 297.44 -2005-10-14 299.9 300.23 292.54 296.14 8519100 296.14 -2005-10-17 297.5 305.2 294.56 305.0 7566700 305.0 +2005-10-11 310.61 312.65 304.86 306.10 8542600 306.10 +2005-10-12 305.20 307.19 299.00 300.97 9306200 300.97 +2005-10-13 302.00 302.00 290.68 297.44 10567700 297.44 +2005-10-14 299.90 300.23 292.54 296.14 8519100 296.14 +2005-10-17 297.50 305.20 294.56 305.00 7566700 305.00 2005-10-18 304.96 307.96 302.74 303.28 7077800 303.28 -2005-10-19 304.0 309.87 303.96 308.7 7010700 308.7 -2005-10-20 309.99 311.13 301.21 303.2 13911700 303.2 -2005-10-21 345.8 346.43 333.0 339.9 22892400 339.9 -2005-10-24 343.37 349.3 342.19 348.65 9431700 348.65 -2005-10-25 345.78 347.4 342.86 346.91 6878300 346.91 -2005-10-26 346.28 356.0 346.19 355.44 8907500 355.44 -2005-10-27 356.6 357.09 351.68 353.06 5134400 353.06 +2005-10-19 304.00 309.87 303.96 308.70 7010700 308.70 +2005-10-20 309.99 311.13 301.21 303.20 13911700 303.20 +2005-10-21 345.80 346.43 333.00 339.90 22892400 339.90 +2005-10-24 343.37 349.30 342.19 348.65 9431700 348.65 +2005-10-25 345.78 347.40 342.86 346.91 6878300 346.91 +2005-10-26 346.28 356.00 346.19 355.44 8907500 355.44 +2005-10-27 356.60 357.09 351.68 353.06 5134400 353.06 2005-10-28 355.27 358.95 355.02 358.17 5903500 358.17 2005-10-31 360.24 374.75 359.51 372.14 14342900 372.14 -2005-11-01 371.86 383.9 369.01 379.38 16356100 379.38 -2005-11-02 381.7 385.0 377.17 379.68 10565400 379.68 +2005-11-01 371.86 383.90 369.01 379.38 16356100 379.38 +2005-11-02 381.70 385.00 377.17 379.68 10565400 379.68 2005-11-03 382.41 386.58 381.38 385.95 7448400 385.95 2005-11-04 389.98 391.79 385.45 390.43 8824900 390.43 -2005-11-07 395.1 397.47 392.15 395.03 9591500 395.03 -2005-11-08 394.25 395.59 388.58 389.9 7897500 389.9 +2005-11-07 395.10 397.47 392.15 395.03 9591500 395.03 +2005-11-08 394.25 395.59 388.58 389.90 7897500 389.90 2005-11-09 386.67 388.29 378.03 379.15 10466900 379.15 -2005-11-10 378.36 391.35 377.43 391.1 9128700 391.1 -2005-11-11 395.12 396.9 388.85 390.4 7063900 390.4 +2005-11-10 378.36 391.35 377.43 391.10 9128700 391.10 +2005-11-11 395.12 396.90 388.85 390.40 7063900 390.40 2005-11-14 392.12 398.22 391.53 396.97 7807900 396.97 -2005-11-15 394.38 397.0 390.95 392.8 8624900 392.8 -2005-11-16 396.2 398.85 394.11 398.15 8695200 398.15 -2005-11-17 401.8 403.81 399.53 403.45 9212200 403.45 -2005-11-18 403.49 404.5 399.85 400.21 7025700 400.21 +2005-11-15 394.38 397.00 390.95 392.80 8624900 392.80 +2005-11-16 396.20 398.85 394.11 398.15 8695200 398.15 +2005-11-17 401.80 403.81 399.53 403.45 9212200 403.45 +2005-11-18 403.49 404.50 399.85 400.21 7025700 400.21 2005-11-21 399.17 409.98 393.49 409.36 10335100 409.36 2005-11-22 408.65 417.31 406.23 416.47 9596000 416.47 2005-11-23 417.04 424.72 415.78 422.86 10085000 422.86 -2005-11-25 425.78 428.75 425.3 428.62 4840100 428.62 +2005-11-25 425.78 428.75 425.30 428.62 4840100 428.62 2005-11-28 429.82 431.24 422.44 423.48 11008400 423.48 -2005-11-29 424.46 426.4 402.14 403.54 21495800 403.54 +2005-11-29 424.46 426.40 402.14 403.54 21495800 403.54 2005-11-30 404.26 408.45 395.56 404.91 15596600 404.91 -2005-12-01 409.2 415.44 408.29 414.09 9744900 414.09 -2005-12-02 416.94 419.53 413.86 417.7 7543500 417.7 -2005-12-05 417.0 417.5 404.28 405.85 10289400 405.85 -2005-12-06 408.7 416.41 401.7 404.54 15114700 404.54 -2005-12-07 406.16 406.7 399.01 404.22 11665900 404.22 -2005-12-08 405.3 410.65 402.64 410.65 8910100 410.65 -2005-12-09 415.0 415.78 408.56 409.2 7643400 409.2 +2005-12-01 409.20 415.44 408.29 414.09 9744900 414.09 +2005-12-02 416.94 419.53 413.86 417.70 7543500 417.70 +2005-12-05 417.00 417.50 404.28 405.85 10289400 405.85 +2005-12-06 408.70 416.41 401.70 404.54 15114700 404.54 +2005-12-07 406.16 406.70 399.01 404.22 11665900 404.22 +2005-12-08 405.30 410.65 402.64 410.65 8910100 410.65 +2005-12-09 415.00 415.78 408.56 409.20 7643400 409.20 2005-12-12 414.63 415.21 409.95 412.61 6950100 412.61 -2005-12-13 412.5 418.0 411.64 417.49 8157000 417.49 +2005-12-13 412.50 418.00 411.64 417.49 8157000 417.49 2005-12-14 417.04 419.73 415.49 418.96 6630400 418.96 -2005-12-15 419.11 423.14 416.5 422.55 6045800 422.55 -2005-12-16 425.34 432.5 422.75 430.15 16330500 430.15 -2005-12-19 432.2 446.21 420.11 424.6 21936800 424.6 -2005-12-20 427.86 432.2 424.67 429.74 10084700 429.74 +2005-12-15 419.11 423.14 416.50 422.55 6045800 422.55 +2005-12-16 425.34 432.50 422.75 430.15 16330500 430.15 +2005-12-19 432.20 446.21 420.11 424.60 21936800 424.60 +2005-12-20 427.86 432.20 424.67 429.74 10084700 429.74 2005-12-21 433.55 436.86 420.71 426.33 11221900 426.33 2005-12-22 431.77 432.86 425.93 432.04 7546600 432.04 -2005-12-23 432.15 432.5 428.78 430.93 4595100 430.93 +2005-12-23 432.15 432.50 428.78 430.93 4595100 430.93 2005-12-27 431.86 431.86 422.76 424.64 6702800 424.64 2005-12-28 424.34 427.78 421.26 426.69 7117900 426.69 2005-12-29 427.98 428.73 419.17 420.15 6945800 420.15 2005-12-30 417.27 418.21 413.74 414.86 7587100 414.86 2006-01-03 422.52 435.67 418.22 435.23 13121200 435.23 -2006-01-04 443.9 448.96 439.75 445.24 15286400 445.24 -2006-01-05 446.0 451.55 441.5 451.24 10808300 451.24 -2006-01-06 456.87 470.5 453.24 465.66 17756900 465.66 -2006-01-09 466.41 473.4 460.94 466.9 12791900 466.9 +2006-01-04 443.90 448.96 439.75 445.24 15286400 445.24 +2006-01-05 446.00 451.55 441.50 451.24 10808300 451.24 +2006-01-06 456.87 470.50 453.24 465.66 17756900 465.66 +2006-01-09 466.41 473.40 460.94 466.90 12791900 466.90 2006-01-10 464.42 470.25 462.04 469.76 9097100 469.76 2006-01-11 471.27 475.11 469.18 471.63 9007400 471.63 -2006-01-12 473.72 474.99 461.5 463.63 10125300 463.63 +2006-01-12 473.72 474.99 461.50 463.63 10125300 463.63 2006-01-13 464.31 466.89 461.61 466.25 7656600 466.25 -2006-01-17 463.06 469.9 462.53 467.11 8270300 467.11 -2006-01-18 447.3 457.36 443.25 444.91 20485700 444.91 -2006-01-19 451.17 453.49 433.0 436.45 14537300 436.45 -2006-01-20 438.7 440.03 394.74 399.46 41116700 399.46 -2006-01-23 407.38 428.39 405.73 427.5 22741400 427.5 +2006-01-17 463.06 469.90 462.53 467.11 8270300 467.11 +2006-01-18 447.30 457.36 443.25 444.91 20485700 444.91 +2006-01-19 451.17 453.49 433.00 436.45 14537300 436.45 +2006-01-20 438.70 440.03 394.74 399.46 41116700 399.46 +2006-01-23 407.38 428.39 405.73 427.50 22741400 427.50 2006-01-24 436.03 444.95 434.48 443.03 15464600 443.03 -2006-01-25 451.26 454.23 429.22 433.0 18739800 433.0 +2006-01-25 451.26 454.23 429.22 433.00 18739800 433.00 2006-01-26 439.54 439.99 423.56 434.27 12926100 434.27 -2006-01-27 435.0 438.22 428.98 433.49 8452200 433.49 -2006-01-30 429.23 433.28 425.0 426.82 8588900 426.82 -2006-01-31 430.57 439.6 423.97 432.66 22066000 432.66 -2006-02-01 389.03 402.0 387.52 401.78 27122500 401.78 -2006-02-02 403.82 406.5 395.98 396.04 11807700 396.04 -2006-02-03 393.62 393.9 372.57 381.55 18281800 381.55 -2006-02-06 385.31 389.9 379.56 385.1 8940400 385.1 -2006-02-07 382.99 383.7 363.35 367.92 16630200 367.92 +2006-01-27 435.00 438.22 428.98 433.49 8452200 433.49 +2006-01-30 429.23 433.28 425.00 426.82 8588900 426.82 +2006-01-31 430.57 439.60 423.97 432.66 22066000 432.66 +2006-02-01 389.03 402.00 387.52 401.78 27122500 401.78 +2006-02-02 403.82 406.50 395.98 396.04 11807700 396.04 +2006-02-03 393.62 393.90 372.57 381.55 18281800 381.55 +2006-02-06 385.31 389.90 379.56 385.10 8940400 385.10 +2006-02-07 382.99 383.70 363.35 367.92 16630200 367.92 2006-02-08 368.48 370.69 354.67 369.08 20804100 369.08 -2006-02-09 371.2 374.4 356.11 358.77 11912400 358.77 -2006-02-10 361.95 364.5 353.14 362.61 15223500 362.61 -2006-02-13 346.64 350.6 341.89 345.7 19717800 345.7 -2006-02-14 345.33 351.69 342.4 343.32 14654000 343.32 -2006-02-15 341.27 346.0 337.83 342.38 12947000 342.38 -2006-02-16 345.67 367.0 344.49 366.46 21315500 366.46 +2006-02-09 371.20 374.40 356.11 358.77 11912400 358.77 +2006-02-10 361.95 364.50 353.14 362.61 15223500 362.61 +2006-02-13 346.64 350.60 341.89 345.70 19717800 345.70 +2006-02-14 345.33 351.69 342.40 343.32 14654000 343.32 +2006-02-15 341.27 346.00 337.83 342.38 12947000 342.38 +2006-02-16 345.67 367.00 344.49 366.46 21315500 366.46 2006-02-17 369.86 372.14 363.62 368.75 14320200 368.75 2006-02-21 366.44 373.54 365.11 366.59 8686000 366.59 2006-02-22 367.15 368.95 363.86 365.49 6476200 365.49 2006-02-23 365.61 381.24 365.39 378.07 12551600 378.07 -2006-02-24 377.3 380.07 373.49 377.4 6484300 377.4 -2006-02-27 381.27 391.7 380.28 390.38 10212200 390.38 -2006-02-28 393.2 397.54 338.51 362.62 39437600 362.62 -2006-03-01 368.56 369.45 361.3 364.8 12061200 364.8 -2006-03-02 364.28 381.1 362.2 376.45 18330300 376.45 -2006-03-03 384.3 387.24 375.76 378.18 11962000 378.18 -2006-03-06 380.91 383.4 367.14 368.1 8939700 368.1 +2006-02-24 377.30 380.07 373.49 377.40 6484300 377.40 +2006-02-27 381.27 391.70 380.28 390.38 10212200 390.38 +2006-02-28 393.20 397.54 338.51 362.62 39437600 362.62 +2006-03-01 368.56 369.45 361.30 364.80 12061200 364.80 +2006-03-02 364.28 381.10 362.20 376.45 18330300 376.45 +2006-03-03 384.30 387.24 375.76 378.18 11962000 378.18 +2006-03-06 380.91 383.40 367.14 368.10 8939700 368.10 2006-03-07 365.02 368.45 358.15 364.45 10378800 364.45 2006-03-08 353.93 360.03 350.54 353.88 11745600 353.88 -2006-03-09 355.39 358.53 341.5 343.0 13910400 343.0 -2006-03-10 343.5 344.5 331.55 337.5 19325600 337.5 -2006-03-13 340.93 346.1 335.45 337.06 13642400 337.06 +2006-03-09 355.39 358.53 341.50 343.00 13910400 343.00 +2006-03-10 343.50 344.50 331.55 337.50 19325600 337.50 +2006-03-13 340.93 346.10 335.45 337.06 13642400 337.06 2006-03-14 337.14 352.37 332.62 351.16 18450700 351.16 -2006-03-15 350.77 352.3 340.53 344.5 12768800 344.5 -2006-03-16 348.61 348.75 337.9 338.77 10016700 338.77 -2006-03-17 338.8 341.78 334.93 339.79 8551700 339.79 +2006-03-15 350.77 352.30 340.53 344.50 12768800 344.50 +2006-03-16 348.61 348.75 337.90 338.77 10016700 338.77 +2006-03-17 338.80 341.78 334.93 339.79 8551700 339.79 2006-03-20 342.34 350.09 341.54 348.19 10407600 348.19 2006-03-21 350.01 351.66 339.08 339.92 9831100 339.92 -2006-03-22 339.75 344.1 337.5 340.22 7596000 340.22 -2006-03-23 342.35 345.75 340.2 341.89 7434700 341.89 -2006-03-24 368.62 370.09 362.51 365.8 15180600 365.8 -2006-03-27 367.09 371.71 365.0 369.69 7023700 369.69 -2006-03-28 371.71 377.86 371.17 377.2 8945800 377.2 -2006-03-29 379.94 399.0 379.51 394.98 19027500 394.98 -2006-03-30 389.19 393.5 383.61 388.44 14711700 388.44 -2006-03-31 388.74 391.87 384.03 390.0 36521400 390.0 -2006-04-03 389.53 392.47 387.93 389.7 8122700 389.7 -2006-04-04 389.9 404.9 388.14 404.34 15715700 404.34 -2006-04-05 408.2 414.57 402.82 407.99 13410500 407.99 +2006-03-22 339.75 344.10 337.50 340.22 7596000 340.22 +2006-03-23 342.35 345.75 340.20 341.89 7434700 341.89 +2006-03-24 368.62 370.09 362.51 365.80 15180600 365.80 +2006-03-27 367.09 371.71 365.00 369.69 7023700 369.69 +2006-03-28 371.71 377.86 371.17 377.20 8945800 377.20 +2006-03-29 379.94 399.00 379.51 394.98 19027500 394.98 +2006-03-30 389.19 393.50 383.61 388.44 14711700 388.44 +2006-03-31 388.74 391.87 384.03 390.00 36521400 390.00 +2006-04-03 389.53 392.47 387.93 389.70 8122700 389.70 +2006-04-04 389.90 404.90 388.14 404.34 15715700 404.34 +2006-04-05 408.20 414.57 402.82 407.99 13410500 407.99 2006-04-06 406.49 413.89 405.43 411.18 8598500 411.18 2006-04-07 412.41 412.85 404.02 406.16 7025900 406.16 2006-04-10 407.08 417.17 405.25 416.38 9320100 416.38 -2006-04-11 416.42 419.1 406.22 409.66 11107200 409.66 -2006-04-12 409.0 411.33 405.19 408.95 6017000 408.95 -2006-04-13 408.63 409.76 400.5 402.16 6552900 402.16 -2006-04-17 403.45 412.5 400.84 406.82 8259500 406.82 -2006-04-18 407.93 409.83 401.5 404.24 8137600 404.24 -2006-04-19 412.57 413.64 406.73 410.5 6781700 410.5 -2006-04-20 411.01 416.0 408.2 415.0 12271500 415.0 -2006-04-21 448.9 450.72 436.17 437.1 22551300 437.1 -2006-04-24 439.4 444.7 436.52 440.5 8836400 440.5 -2006-04-25 439.63 441.04 426.0 427.16 9569000 427.16 +2006-04-11 416.42 419.10 406.22 409.66 11107200 409.66 +2006-04-12 409.00 411.33 405.19 408.95 6017000 408.95 +2006-04-13 408.63 409.76 400.50 402.16 6552900 402.16 +2006-04-17 403.45 412.50 400.84 406.82 8259500 406.82 +2006-04-18 407.93 409.83 401.50 404.24 8137600 404.24 +2006-04-19 412.57 413.64 406.73 410.50 6781700 410.50 +2006-04-20 411.01 416.00 408.20 415.00 12271500 415.00 +2006-04-21 448.90 450.72 436.17 437.10 22551300 437.10 +2006-04-24 439.40 444.70 436.52 440.50 8836400 440.50 +2006-04-25 439.63 441.04 426.00 427.16 9569000 427.16 2006-04-26 427.74 430.04 423.53 425.97 7277800 425.97 2006-04-27 422.91 426.91 419.39 420.03 8337900 420.03 -2006-04-28 418.63 425.73 416.3 417.94 7421300 417.94 -2006-05-01 418.47 419.44 398.55 398.9 10361200 398.9 -2006-05-02 401.08 402.49 388.4 394.8 13104300 394.8 -2006-05-03 396.35 401.5 390.88 394.17 8072200 394.17 +2006-04-28 418.63 425.73 416.30 417.94 7421300 417.94 +2006-05-01 418.47 419.44 398.55 398.90 10361200 398.90 +2006-05-02 401.08 402.49 388.40 394.80 13104300 394.80 +2006-05-03 396.35 401.50 390.88 394.17 8072200 394.17 2006-05-04 395.03 398.87 392.21 394.75 4652000 394.75 -2006-05-05 397.6 400.68 391.78 394.3 6065000 394.3 +2006-05-05 397.60 400.68 391.78 394.30 6065000 394.30 2006-05-08 395.11 397.12 390.05 394.78 5118600 394.78 -2006-05-09 395.7 409.0 393.75 408.8 9140600 408.8 +2006-05-09 395.70 409.00 393.75 408.80 9140600 408.80 2006-05-10 408.31 411.71 401.86 402.98 6187200 402.98 -2006-05-11 403.42 404.71 384.98 387.0 8892800 387.0 +2006-05-11 403.42 404.71 384.98 387.00 8892800 387.00 2006-05-12 383.54 384.87 373.55 374.13 10087600 374.13 -2006-05-15 375.93 380.15 368.25 376.2 8590100 376.2 -2006-05-16 375.99 376.86 369.89 371.3 6491100 371.3 -2006-05-17 370.61 379.84 370.22 374.5 10643800 374.5 +2006-05-15 375.93 380.15 368.25 376.20 8590100 376.20 +2006-05-16 375.99 376.86 369.89 371.30 6491100 371.30 +2006-05-17 370.61 379.84 370.22 374.50 10643800 374.50 2006-05-18 378.78 381.81 370.71 370.99 5835000 370.99 -2006-05-19 373.28 374.5 360.57 370.02 11398200 370.02 +2006-05-19 373.28 374.50 360.57 370.02 11398200 370.02 2006-05-22 367.85 373.03 365.25 370.95 8604400 370.95 2006-05-23 374.21 383.88 373.56 375.58 8983000 375.58 2006-05-24 377.35 383.44 371.61 381.25 9553800 381.25 -2006-05-25 379.08 383.0 372.31 382.99 8194600 382.99 +2006-05-25 379.08 383.00 372.31 382.99 8194600 382.99 2006-05-26 384.55 385.88 380.03 381.35 3667000 381.35 -2006-05-30 378.28 381.0 371.45 371.94 4316000 371.94 -2006-05-31 373.8 378.25 366.78 371.82 7981300 371.82 -2006-06-01 373.54 382.99 371.6 382.62 6278000 382.62 +2006-05-30 378.28 381.00 371.45 371.94 4316000 371.94 +2006-05-31 373.80 378.25 366.78 371.82 7981300 371.82 +2006-06-01 373.54 382.99 371.60 382.62 6278000 382.62 2006-06-02 386.84 387.08 377.45 379.44 6386400 379.44 2006-06-05 376.18 381.45 374.15 374.44 5558500 374.44 -2006-06-06 376.58 390.0 376.3 389.99 10259800 389.99 -2006-06-07 393.24 394.86 386.5 386.51 8911300 386.51 -2006-06-08 387.75 394.27 378.59 393.3 10359500 393.3 +2006-06-06 376.58 390.00 376.30 389.99 10259800 389.99 +2006-06-07 393.24 394.86 386.50 386.51 8911300 386.51 +2006-06-08 387.75 394.27 378.59 393.30 10359500 393.30 2006-06-09 392.19 395.43 385.35 386.57 6157500 386.57 -2006-06-12 388.34 390.49 381.0 381.54 5019100 381.54 -2006-06-13 380.9 387.0 378.12 386.52 7659100 386.52 -2006-06-14 389.83 391.1 378.52 384.39 7772000 384.39 -2006-06-15 386.62 392.25 383.0 391.0 6785700 391.0 -2006-06-16 389.1 390.93 388.0 390.7 5304600 390.7 -2006-06-19 390.85 394.8 386.98 388.14 7633100 388.14 +2006-06-12 388.34 390.49 381.00 381.54 5019100 381.54 +2006-06-13 380.90 387.00 378.12 386.52 7659100 386.52 +2006-06-14 389.83 391.10 378.52 384.39 7772000 384.39 +2006-06-15 386.62 392.25 383.00 391.00 6785700 391.00 +2006-06-16 389.10 390.93 388.00 390.70 5304600 390.70 +2006-06-19 390.85 394.80 386.98 388.14 7633100 388.14 2006-06-20 388.03 391.87 386.51 387.17 4039900 387.17 -2006-06-21 391.06 404.0 389.75 402.13 8744400 402.13 -2006-06-22 401.58 406.0 388.0 399.95 5911900 399.95 +2006-06-21 391.06 404.00 389.75 402.13 8744400 402.13 +2006-06-22 401.58 406.00 388.00 399.95 5911900 399.95 2006-06-23 402.76 409.75 400.74 404.86 5314800 404.86 -2006-06-26 406.75 408.3 403.25 404.22 3551200 404.22 -2006-06-27 405.71 408.0 401.01 402.32 4107100 402.32 +2006-06-26 406.75 408.30 403.25 404.22 3551200 404.22 +2006-06-27 405.71 408.00 401.01 402.32 4107100 402.32 2006-06-28 404.01 406.48 401.13 406.11 3710500 406.11 -2006-06-29 407.99 418.2 405.82 417.81 6658200 417.81 -2006-06-30 415.6 419.33 412.33 419.33 6258000 419.33 -2006-07-03 420.04 423.77 419.45 423.2 2156700 423.2 -2006-07-05 421.52 422.8 415.64 421.46 4985600 421.46 +2006-06-29 407.99 418.20 405.82 417.81 6658200 417.81 +2006-06-30 415.60 419.33 412.33 419.33 6258000 419.33 +2006-07-03 420.04 423.77 419.45 423.20 2156700 423.20 +2006-07-05 421.52 422.80 415.64 421.46 4985600 421.46 2006-07-06 423.38 425.38 421.98 423.19 3687100 423.19 2006-07-07 426.05 427.89 415.88 420.45 6041900 420.45 -2006-07-10 423.44 425.23 416.38 418.2 4436400 418.2 +2006-07-10 423.44 425.23 416.38 418.20 4436400 418.20 2006-07-11 418.51 425.05 413.03 424.56 5971300 424.56 2006-07-12 422.09 422.74 416.73 417.25 4906700 417.25 -2006-07-13 414.0 418.34 406.83 408.83 6924500 408.83 -2006-07-14 410.33 411.49 398.61 403.5 7552100 403.5 -2006-07-17 404.63 411.0 403.72 407.89 5811900 407.89 +2006-07-13 414.00 418.34 406.83 408.83 6924500 408.83 +2006-07-14 410.33 411.49 398.61 403.50 7552100 403.50 +2006-07-17 404.63 411.00 403.72 407.89 5811900 407.89 2006-07-18 409.75 410.57 397.74 403.05 8536800 403.05 -2006-07-19 395.01 401.14 394.66 399.0 8518500 399.0 +2006-07-19 395.01 401.14 394.66 399.00 8518500 399.00 2006-07-20 404.28 404.44 385.66 387.12 12538700 387.12 2006-07-21 386.14 391.75 377.69 390.11 11754600 390.11 -2006-07-24 392.82 393.89 381.21 390.9 8086100 390.9 -2006-07-25 385.02 391.31 383.8 389.36 5761100 389.36 -2006-07-26 388.2 391.91 383.0 385.5 5531900 385.5 -2006-07-27 387.37 387.49 377.95 382.4 5641100 382.4 -2006-07-28 382.0 389.56 381.73 388.12 4083600 388.12 -2006-07-31 388.0 389.17 383.31 386.6 4595300 386.6 +2006-07-24 392.82 393.89 381.21 390.90 8086100 390.90 +2006-07-25 385.02 391.31 383.80 389.36 5761100 389.36 +2006-07-26 388.20 391.91 383.00 385.50 5531900 385.50 +2006-07-27 387.37 387.49 377.95 382.40 5641100 382.40 +2006-07-28 382.00 389.56 381.73 388.12 4083600 388.12 +2006-07-31 388.00 389.17 383.31 386.60 4595300 386.60 2006-08-01 385.11 385.77 375.51 375.51 5463200 375.51 -2006-08-02 375.6 377.17 365.2 367.23 7097800 367.23 +2006-08-02 375.60 377.17 365.20 367.23 7097800 367.23 2006-08-03 364.98 377.91 363.36 375.39 6327000 375.39 2006-08-04 379.56 380.68 371.75 373.85 5095200 373.85 -2006-08-07 371.5 379.73 371.15 377.95 3946900 377.95 -2006-08-08 382.82 384.5 379.09 381.0 5743200 381.0 -2006-08-09 382.8 384.68 376.36 376.94 4311000 376.94 -2006-08-10 373.88 377.67 372.46 374.2 4261900 374.2 -2006-08-11 374.4 375.28 368.0 368.5 3766500 368.5 -2006-08-14 371.5 375.13 368.67 369.43 4968300 369.43 -2006-08-15 374.11 381.67 372.6 380.97 6698200 380.97 +2006-08-07 371.50 379.73 371.15 377.95 3946900 377.95 +2006-08-08 382.82 384.50 379.09 381.00 5743200 381.00 +2006-08-09 382.80 384.68 376.36 376.94 4311000 376.94 +2006-08-10 373.88 377.67 372.46 374.20 4261900 374.20 +2006-08-11 374.40 375.28 368.00 368.50 3766500 368.50 +2006-08-14 371.50 375.13 368.67 369.43 4968300 369.43 +2006-08-15 374.11 381.67 372.60 380.97 6698200 380.97 2006-08-16 383.48 388.45 382.12 387.72 5853200 387.72 -2006-08-17 386.39 390.0 383.92 385.8 5080200 385.8 +2006-08-17 386.39 390.00 383.92 385.80 5080200 385.80 2006-08-18 386.31 387.09 380.75 383.36 4952200 383.36 -2006-08-21 378.1 379.0 375.22 377.3 4023300 377.3 +2006-08-21 378.10 379.00 375.22 377.30 4023300 377.30 2006-08-22 377.73 379.26 374.84 378.29 4164100 378.29 2006-08-23 377.64 378.27 372.66 373.43 3642300 373.43 -2006-08-24 374.44 376.4 372.26 373.73 3482500 373.73 -2006-08-25 373.08 375.32 372.5 373.26 2466700 373.26 -2006-08-28 375.61 380.95 375.0 380.95 4164000 380.95 -2006-08-29 380.78 382.32 377.2 378.95 4460000 378.95 +2006-08-24 374.44 376.40 372.26 373.73 3482500 373.73 +2006-08-25 373.08 375.32 372.50 373.26 2466700 373.26 +2006-08-28 375.61 380.95 375.00 380.95 4164000 380.95 +2006-08-29 380.78 382.32 377.20 378.95 4460000 378.95 2006-08-30 379.21 384.65 378.51 380.75 4044400 380.75 -2006-08-31 381.49 382.15 378.2 378.53 2959900 378.53 -2006-09-01 380.99 381.28 377.19 378.6 2672900 378.6 -2006-09-05 379.87 385.4 377.44 384.36 4074300 384.36 -2006-09-06 382.1 383.19 379.66 380.14 3724100 380.14 -2006-09-07 379.39 381.75 377.4 378.49 3842000 378.49 +2006-08-31 381.49 382.15 378.20 378.53 2959900 378.53 +2006-09-01 380.99 381.28 377.19 378.60 2672900 378.60 +2006-09-05 379.87 385.40 377.44 384.36 4074300 384.36 +2006-09-06 382.10 383.19 379.66 380.14 3724100 380.14 +2006-09-07 379.39 381.75 377.40 378.49 3842000 378.49 2006-09-08 376.72 380.79 376.72 377.85 3083400 377.85 2006-09-11 378.26 384.69 377.77 384.09 4529200 384.09 -2006-09-12 385.0 392.73 384.88 391.9 5442200 391.9 -2006-09-13 395.15 406.76 395.1 406.57 9768200 406.57 -2006-09-14 404.3 406.28 401.93 403.98 5366100 403.98 +2006-09-12 385.00 392.73 384.88 391.90 5442200 391.90 +2006-09-13 395.15 406.76 395.10 406.57 9768200 406.57 +2006-09-14 404.30 406.28 401.93 403.98 5366100 403.98 2006-09-15 407.48 410.05 406.74 409.88 7838200 409.88 -2006-09-18 410.0 418.69 409.47 414.69 7106700 414.69 +2006-09-18 410.00 418.69 409.47 414.69 7106700 414.69 2006-09-19 415.46 415.49 392.74 403.81 14292900 403.81 -2006-09-20 407.1 407.39 394.62 397.0 9147800 397.0 -2006-09-21 400.3 408.45 399.86 406.85 10692100 406.85 +2006-09-20 407.10 407.39 394.62 397.00 9147800 397.00 +2006-09-21 400.30 408.45 399.86 406.85 10692100 406.85 2006-09-22 404.98 407.45 401.36 403.78 4649600 403.78 -2006-09-25 405.58 409.45 402.5 403.98 5737300 403.98 -2006-09-26 405.5 407.68 401.77 406.87 5289400 406.87 -2006-09-27 406.3 411.22 402.37 402.92 5876700 402.92 +2006-09-25 405.58 409.45 402.50 403.98 5737300 403.98 +2006-09-26 405.50 407.68 401.77 406.87 5289400 406.87 +2006-09-27 406.30 411.22 402.37 402.92 5876700 402.92 2006-09-28 404.08 406.98 400.54 403.58 5107400 403.58 -2006-09-29 405.13 405.62 401.41 401.9 3310900 401.9 -2006-10-02 401.9 406.0 400.8 401.44 3651900 401.44 +2006-09-29 405.13 405.62 401.41 401.90 3310900 401.90 +2006-10-02 401.90 406.00 400.80 401.44 3651900 401.44 2006-10-03 401.29 406.46 398.19 404.04 5464700 404.04 -2006-10-04 404.97 415.77 403.05 415.7 6661800 415.7 -2006-10-05 414.7 418.24 410.86 411.81 5789800 411.81 -2006-10-06 410.22 421.91 409.75 420.5 7336500 420.5 -2006-10-09 424.8 431.95 423.42 429.0 7583300 429.0 +2006-10-04 404.97 415.77 403.05 415.70 6661800 415.70 +2006-10-05 414.70 418.24 410.86 411.81 5789800 411.81 +2006-10-06 410.22 421.91 409.75 420.50 7336500 420.50 +2006-10-09 424.80 431.95 423.42 429.00 7583300 429.00 2006-10-10 431.56 437.85 422.39 426.65 9788600 426.65 -2006-10-11 425.02 429.91 423.76 426.5 5635400 426.5 -2006-10-12 428.56 429.68 424.0 427.44 4844000 427.44 -2006-10-13 427.76 429.5 425.56 427.3 3622500 427.3 -2006-10-16 427.7 429.2 421.34 421.75 4319400 421.75 -2006-10-17 420.3 423.75 416.7 420.64 5211000 420.64 -2006-10-18 422.99 424.75 417.5 419.31 6017300 419.31 -2006-10-19 420.23 429.5 419.57 426.06 11503500 426.06 -2006-10-20 458.99 460.1 453.59 459.67 11647900 459.67 +2006-10-11 425.02 429.91 423.76 426.50 5635400 426.50 +2006-10-12 428.56 429.68 424.00 427.44 4844000 427.44 +2006-10-13 427.76 429.50 425.56 427.30 3622500 427.30 +2006-10-16 427.70 429.20 421.34 421.75 4319400 421.75 +2006-10-17 420.30 423.75 416.70 420.64 5211000 420.64 +2006-10-18 422.99 424.75 417.50 419.31 6017300 419.31 +2006-10-19 420.23 429.50 419.57 426.06 11503500 426.06 +2006-10-20 458.99 460.10 453.59 459.67 11647900 459.67 2006-10-23 462.28 484.64 460.37 480.78 15104500 480.78 2006-10-24 476.28 477.86 471.41 473.31 8660200 473.31 -2006-10-25 477.49 488.5 475.11 486.6 9187500 486.6 -2006-10-26 487.68 491.96 484.2 485.1 7031700 485.1 -2006-10-27 483.9 485.24 472.49 475.2 6604000 475.2 +2006-10-25 477.49 488.50 475.11 486.60 9187500 486.60 +2006-10-26 487.68 491.96 484.20 485.10 7031700 485.10 +2006-10-27 483.90 485.24 472.49 475.20 6604000 475.20 2006-10-30 474.82 480.46 470.01 476.57 6563100 476.57 2006-10-31 478.06 482.16 473.84 476.39 6285400 476.39 -2006-11-01 478.76 479.13 465.26 467.5 5426300 467.5 -2006-11-02 467.5 473.73 466.38 469.91 5236700 469.91 -2006-11-03 472.23 473.75 465.06 471.8 4907700 471.8 +2006-11-01 478.76 479.13 465.26 467.50 5426300 467.50 +2006-11-02 467.50 473.73 466.38 469.91 5236700 469.91 +2006-11-03 472.23 473.75 465.06 471.80 4907700 471.80 2006-11-06 473.77 479.66 472.33 476.95 4991500 476.95 2006-11-07 476.95 479.02 471.77 472.57 4897100 472.57 -2006-11-08 470.35 481.74 468.6 475.0 7965000 475.0 -2006-11-09 476.5 479.49 471.86 472.63 4879200 472.63 +2006-11-08 470.35 481.74 468.60 475.00 7965000 475.00 +2006-11-09 476.50 479.49 471.86 472.63 4879200 472.63 2006-11-10 473.78 474.72 470.29 473.55 2796700 473.55 -2006-11-13 474.9 481.17 474.14 481.03 4341900 481.03 -2006-11-14 480.7 489.95 480.5 489.3 7223400 489.3 +2006-11-13 474.90 481.17 474.14 481.03 4341900 481.03 +2006-11-14 480.70 489.95 480.50 489.30 7223400 489.30 2006-11-15 493.43 499.85 491.93 491.93 8370700 491.93 -2006-11-16 495.0 497.68 492.56 495.9 5092600 495.9 -2006-11-17 493.25 499.66 493.0 498.79 5511000 498.79 -2006-11-20 498.4 498.4 492.65 495.05 5124500 495.05 -2006-11-21 496.54 510.0 495.83 509.65 8427500 509.65 -2006-11-22 510.97 513.0 505.78 508.01 4500700 508.01 -2006-11-24 504.5 507.5 504.0 505.0 1732700 505.0 +2006-11-16 495.00 497.68 492.56 495.90 5092600 495.90 +2006-11-17 493.25 499.66 493.00 498.79 5511000 498.79 +2006-11-20 498.40 498.40 492.65 495.05 5124500 495.05 +2006-11-21 496.54 510.00 495.83 509.65 8427500 509.65 +2006-11-22 510.97 513.00 505.78 508.01 4500700 508.01 +2006-11-24 504.50 507.50 504.00 505.00 1732700 505.00 2006-11-27 501.37 501.78 484.75 484.75 7324700 484.75 -2006-11-28 481.13 489.86 477.03 489.5 7797600 489.5 +2006-11-28 481.13 489.86 477.03 489.50 7797600 489.50 2006-11-29 494.24 494.74 482.25 484.65 6315300 484.65 -2006-11-30 484.19 490.4 481.55 484.81 5577500 484.81 -2006-12-01 485.98 488.39 478.5 480.8 5631400 480.8 -2006-12-04 483.0 487.43 479.35 484.85 4899900 484.85 -2006-12-05 487.4 489.44 484.89 487.0 4103000 487.0 -2006-12-06 486.96 492.4 484.52 488.71 4450300 488.71 -2006-12-07 490.23 491.8 482.42 482.64 4664300 482.64 -2006-12-08 481.94 488.6 480.0 484.11 3974900 484.11 -2006-12-11 484.92 488.9 483.8 483.93 3263400 483.93 +2006-11-30 484.19 490.40 481.55 484.81 5577500 484.81 +2006-12-01 485.98 488.39 478.50 480.80 5631400 480.80 +2006-12-04 483.00 487.43 479.35 484.85 4899900 484.85 +2006-12-05 487.40 489.44 484.89 487.00 4103000 487.00 +2006-12-06 486.96 492.40 484.52 488.71 4450300 488.71 +2006-12-07 490.23 491.80 482.42 482.64 4664300 482.64 +2006-12-08 481.94 488.60 480.00 484.11 3974900 484.11 +2006-12-11 484.92 488.90 483.80 483.93 3263400 483.93 2006-12-12 483.85 486.36 480.28 481.78 4181000 481.78 -2006-12-13 484.69 485.5 477.02 478.99 4662100 478.99 +2006-12-13 484.69 485.50 477.02 478.99 4662100 478.99 2006-12-14 480.25 483.75 477.26 482.12 4748900 482.12 -2006-12-15 482.64 484.11 479.84 480.3 5190800 480.3 -2006-12-18 482.51 482.74 460.72 462.8 8016600 462.8 -2006-12-19 461.72 469.31 458.5 468.63 6587000 468.63 -2006-12-20 470.0 471.5 462.33 462.9 4367800 462.9 -2006-12-21 464.18 465.25 452.34 456.2 6953300 456.2 -2006-12-22 457.5 458.64 452.73 455.58 3988300 455.58 +2006-12-15 482.64 484.11 479.84 480.30 5190800 480.30 +2006-12-18 482.51 482.74 460.72 462.80 8016600 462.80 +2006-12-19 461.72 469.31 458.50 468.63 6587000 468.63 +2006-12-20 470.00 471.50 462.33 462.90 4367800 462.90 +2006-12-21 464.18 465.25 452.34 456.20 6953300 456.20 +2006-12-22 457.50 458.64 452.73 455.58 3988300 455.58 2006-12-26 456.52 459.47 454.59 457.53 2074300 457.53 -2006-12-27 460.0 468.08 459.1 468.03 4231500 468.03 +2006-12-27 460.00 468.08 459.10 468.03 4231500 468.03 2006-12-28 467.12 468.58 462.25 462.56 3116200 462.56 -2006-12-29 462.1 464.47 459.86 460.48 2559200 460.48 -2007-01-03 466.0 476.66 461.11 467.59 7706500 467.59 -2007-01-04 469.0 483.95 468.35 483.26 7887600 483.26 -2007-01-05 482.5 487.5 478.11 487.19 6872100 487.19 -2007-01-08 487.69 489.87 482.2 483.58 4754400 483.58 -2007-01-09 485.45 488.25 481.2 485.5 5381400 485.5 +2006-12-29 462.10 464.47 459.86 460.48 2559200 460.48 +2007-01-03 466.00 476.66 461.11 467.59 7706500 467.59 +2007-01-04 469.00 483.95 468.35 483.26 7887600 483.26 +2007-01-05 482.50 487.50 478.11 487.19 6872100 487.19 +2007-01-08 487.69 489.87 482.20 483.58 4754400 483.58 +2007-01-09 485.45 488.25 481.20 485.50 5381400 485.50 2007-01-10 484.43 493.55 482.04 489.46 5968500 489.46 -2007-01-11 497.2 501.75 496.18 499.72 7208200 499.72 -2007-01-12 501.99 505.0 500.0 505.0 4473700 505.0 -2007-01-16 507.55 513.0 503.3 504.28 7568900 504.28 +2007-01-11 497.20 501.75 496.18 499.72 7208200 499.72 +2007-01-12 501.99 505.00 500.00 505.00 4473700 505.00 +2007-01-16 507.55 513.00 503.30 504.28 7568900 504.28 2007-01-17 503.39 507.77 494.38 497.28 6699100 497.28 2007-01-18 494.52 496.48 487.43 487.83 5932000 487.83 2007-01-19 487.98 490.76 486.74 489.75 4978300 489.75 -2007-01-22 492.5 492.65 478.5 480.84 5404300 480.84 +2007-01-22 492.50 492.65 478.50 480.84 5404300 480.84 2007-01-23 480.79 484.75 477.29 479.05 4665500 479.05 2007-01-24 484.45 499.54 483.29 499.07 6059300 499.07 -2007-01-25 501.0 504.5 485.66 488.09 6368500 488.09 -2007-01-26 490.93 497.9 487.03 495.84 5496500 495.84 -2007-01-29 498.0 498.75 490.5 492.47 4775700 492.47 -2007-01-30 494.0 498.0 491.22 494.32 4180500 494.32 -2007-01-31 496.49 505.0 495.51 501.5 12206100 501.5 -2007-02-01 506.0 506.01 481.53 481.75 15658700 481.75 -2007-02-02 482.61 485.0 477.81 481.5 6286500 481.5 -2007-02-05 477.5 478.0 466.19 467.16 7206900 467.16 -2007-02-06 468.1 473.3 467.26 471.48 5321900 471.48 +2007-01-25 501.00 504.50 485.66 488.09 6368500 488.09 +2007-01-26 490.93 497.90 487.03 495.84 5496500 495.84 +2007-01-29 498.00 498.75 490.50 492.47 4775700 492.47 +2007-01-30 494.00 498.00 491.22 494.32 4180500 494.32 +2007-01-31 496.49 505.00 495.51 501.50 12206100 501.50 +2007-02-01 506.00 506.01 481.53 481.75 15658700 481.75 +2007-02-02 482.61 485.00 477.81 481.50 6286500 481.50 +2007-02-05 477.50 478.00 466.19 467.16 7206900 467.16 +2007-02-06 468.10 473.30 467.26 471.48 5321900 471.48 2007-02-07 473.82 474.35 468.78 470.01 4119800 470.01 2007-02-08 468.05 473.75 465.15 471.03 4076700 471.03 -2007-02-09 471.65 472.68 461.5 461.89 4858600 461.89 +2007-02-09 471.65 472.68 461.50 461.89 4858600 461.89 2007-02-12 460.68 462.39 455.02 458.29 5754500 458.29 -2007-02-13 459.15 462.78 457.26 459.1 4062600 459.1 -2007-02-14 460.0 469.13 459.22 465.93 5698800 465.93 -2007-02-15 466.0 466.13 460.72 461.47 4042400 461.47 -2007-02-16 462.8 470.15 462.06 469.94 6177000 469.94 -2007-02-20 468.47 472.75 464.71 472.1 4067600 472.1 +2007-02-13 459.15 462.78 457.26 459.10 4062600 459.10 +2007-02-14 460.00 469.13 459.22 465.93 5698800 465.93 +2007-02-15 466.00 466.13 460.72 461.47 4042400 461.47 +2007-02-16 462.80 470.15 462.06 469.94 6177000 469.94 +2007-02-20 468.47 472.75 464.71 472.10 4067600 472.10 2007-02-21 469.84 478.68 467.74 475.86 5640600 475.86 2007-02-22 478.69 484.24 474.39 475.85 5743900 475.85 -2007-02-23 475.75 476.95 467.8 470.62 3882600 470.62 +2007-02-23 475.75 476.95 467.80 470.62 3882600 470.62 2007-02-26 472.83 475.25 463.75 464.93 3969900 464.93 -2007-02-27 455.0 459.8 447.17 448.77 9312800 448.77 +2007-02-27 455.00 459.80 447.17 448.77 9312800 448.77 2007-02-28 450.41 453.67 443.04 449.45 8032300 449.45 -2007-03-01 442.67 452.42 440.0 448.23 8685200 448.23 -2007-03-02 445.11 448.7 438.68 438.68 6583600 438.68 -2007-03-05 437.02 445.5 437.0 440.95 6355100 440.95 -2007-03-06 447.47 459.0 447.38 457.55 7533700 457.55 +2007-03-01 442.67 452.42 440.00 448.23 8685200 448.23 +2007-03-02 445.11 448.70 438.68 438.68 6583600 438.68 +2007-03-05 437.02 445.50 437.00 440.95 6355100 440.95 +2007-03-06 447.47 459.00 447.38 457.55 7533700 457.55 2007-03-07 462.69 463.14 454.29 455.64 6534100 455.64 -2007-03-08 459.22 465.5 454.1 454.72 5362800 454.72 -2007-03-09 458.0 458.4 450.1 452.96 4977700 452.96 +2007-03-08 459.22 465.50 454.10 454.72 5362800 454.72 +2007-03-09 458.00 458.40 450.10 452.96 4977700 452.96 2007-03-12 452.57 455.25 451.11 454.75 3465400 454.75 2007-03-13 450.11 451.93 442.83 443.03 6377300 443.03 -2007-03-14 443.23 448.66 439.0 448.0 8016900 448.0 +2007-03-14 443.23 448.66 439.00 448.00 8016900 448.00 2007-03-15 447.86 449.82 443.94 446.19 3944200 446.19 -2007-03-16 445.65 446.7 439.89 440.85 5659100 440.85 -2007-03-19 443.25 448.5 440.63 447.23 5197700 447.23 -2007-03-20 445.79 447.6 443.6 445.28 3421500 445.28 -2007-03-21 445.3 456.57 445.21 456.55 5798300 456.55 +2007-03-16 445.65 446.70 439.89 440.85 5659100 440.85 +2007-03-19 443.25 448.50 440.63 447.23 5197700 447.23 +2007-03-20 445.79 447.60 443.60 445.28 3421500 445.28 +2007-03-21 445.30 456.57 445.21 456.55 5798300 456.55 2007-03-22 455.61 462.17 452.53 462.04 5680700 462.04 2007-03-23 461.45 463.39 457.08 461.83 4111300 461.83 -2007-03-26 460.55 465.0 455.62 465.0 4710300 465.0 +2007-03-26 460.55 465.00 455.62 465.00 4710300 465.00 2007-03-27 463.55 465.23 460.34 463.62 3741200 463.62 2007-03-28 461.87 465.44 460.15 461.88 4591600 461.88 -2007-03-29 464.55 466.0 455.0 460.92 3988500 460.92 -2007-03-30 462.1 463.4 456.14 458.16 3380200 458.16 +2007-03-29 464.55 466.00 455.00 460.92 3988500 460.92 +2007-03-30 462.10 463.40 456.14 458.16 3380200 458.16 2007-04-02 457.76 458.53 452.12 458.53 3448500 458.53 -2007-04-03 464.05 474.25 464.0 472.6 6501800 472.6 -2007-04-04 472.14 473.0 469.58 471.02 3778800 471.02 -2007-04-05 471.3 472.09 469.62 471.51 2715800 471.51 -2007-04-09 472.98 473.0 465.59 468.21 3062100 468.21 -2007-04-10 467.09 470.79 465.16 466.5 2979300 466.5 -2007-04-11 466.06 469.4 462.61 464.53 3812000 464.53 -2007-04-12 464.0 468.0 462.24 467.39 2707900 467.39 +2007-04-03 464.05 474.25 464.00 472.60 6501800 472.60 +2007-04-04 472.14 473.00 469.58 471.02 3778800 471.02 +2007-04-05 471.30 472.09 469.62 471.51 2715800 471.51 +2007-04-09 472.98 473.00 465.59 468.21 3062100 468.21 +2007-04-10 467.09 470.79 465.16 466.50 2979300 466.50 +2007-04-11 466.06 469.40 462.61 464.53 3812000 464.53 +2007-04-12 464.00 468.00 462.24 467.39 2707900 467.39 2007-04-13 468.45 468.77 463.36 466.29 2794800 466.29 2007-04-16 468.46 476.99 468.15 474.27 5077900 474.27 -2007-04-17 473.8 476.39 471.6 472.8 3210100 472.8 -2007-04-18 471.26 479.9 469.53 476.01 5670500 476.01 -2007-04-19 474.5 481.95 469.59 471.65 11009600 471.65 -2007-04-20 490.52 492.5 482.02 482.48 12161500 482.48 -2007-04-23 480.1 485.0 478.26 479.08 5674600 479.08 +2007-04-17 473.80 476.39 471.60 472.80 3210100 472.80 +2007-04-18 471.26 479.90 469.53 476.01 5670500 476.01 +2007-04-19 474.50 481.95 469.59 471.65 11009600 471.65 +2007-04-20 490.52 492.50 482.02 482.48 12161500 482.48 +2007-04-23 480.10 485.00 478.26 479.08 5674600 479.08 2007-04-24 478.61 479.98 475.55 477.53 3694700 477.53 -2007-04-25 480.0 481.37 476.11 477.99 3966800 477.99 -2007-04-26 478.1 484.45 477.11 481.18 4124900 481.18 -2007-04-27 480.07 482.4 478.33 479.01 2925700 479.01 +2007-04-25 480.00 481.37 476.11 477.99 3966800 477.99 +2007-04-26 478.10 484.45 477.11 481.18 4124900 481.18 +2007-04-27 480.07 482.40 478.33 479.01 2925700 479.01 2007-04-30 479.15 481.35 471.38 471.38 3641200 471.38 -2007-05-01 472.19 472.81 464.17 469.0 3658200 469.0 +2007-05-01 472.19 472.81 464.17 469.00 3658200 469.00 2007-05-02 468.65 471.08 465.73 465.78 3062700 465.78 2007-05-03 466.22 474.07 465.29 473.23 3594200 473.23 2007-05-04 470.12 474.84 465.88 471.12 3950000 471.12 @@ -685,364 +685,364 @@ date open high low close volume adj_close 2007-05-08 466.13 468.17 464.73 466.81 2905100 466.81 2007-05-09 466.15 471.73 463.88 469.25 3889900 469.25 2007-05-10 467.04 469.49 461.02 461.47 3686300 461.47 -2007-05-11 461.83 467.0 461.0 466.74 2944100 466.74 -2007-05-14 465.48 467.51 460.0 461.78 3872700 461.78 -2007-05-15 461.96 462.54 457.41 458.0 4119000 458.0 -2007-05-16 462.0 473.14 459.02 472.61 6554200 472.61 +2007-05-11 461.83 467.00 461.00 466.74 2944100 466.74 +2007-05-14 465.48 467.51 460.00 461.78 3872700 461.78 +2007-05-15 461.96 462.54 457.41 458.00 4119000 458.00 +2007-05-16 462.00 473.14 459.02 472.61 6554200 472.61 2007-05-17 472.46 475.22 470.81 470.96 4660600 470.96 -2007-05-18 472.03 472.7 469.75 470.32 3695900 470.32 -2007-05-21 469.53 479.2 466.72 470.6 6159300 470.6 -2007-05-22 473.0 479.01 473.0 475.86 3839000 475.86 +2007-05-18 472.03 472.70 469.75 470.32 3695900 470.32 +2007-05-21 469.53 479.20 466.72 470.60 6159300 470.60 +2007-05-22 473.00 479.01 473.00 475.86 3839000 475.86 2007-05-23 480.82 483.41 473.75 473.97 5060200 473.97 -2007-05-24 475.15 479.2 471.5 474.33 4173600 474.33 -2007-05-25 479.7 484.95 477.27 483.52 5348500 483.52 -2007-05-29 485.0 491.8 484.0 487.11 5218000 487.11 -2007-05-30 484.5 498.84 483.0 498.6 7245800 498.6 +2007-05-24 475.15 479.20 471.50 474.33 4173600 474.33 +2007-05-25 479.70 484.95 477.27 483.52 5348500 483.52 +2007-05-29 485.00 491.80 484.00 487.11 5218000 487.11 +2007-05-30 484.50 498.84 483.00 498.60 7245800 498.60 2007-05-31 500.56 508.78 497.06 497.91 8924300 497.91 -2007-06-01 501.0 505.02 497.93 500.4 4799000 500.4 +2007-06-01 501.00 505.02 497.93 500.40 4799000 500.40 2007-06-04 497.91 510.51 497.59 507.07 7101000 507.07 -2007-06-05 509.75 519.0 506.61 518.84 10447100 518.84 +2007-06-05 509.75 519.00 506.61 518.84 10447100 518.84 2007-06-06 516.75 520.78 515.26 518.25 7886700 518.25 -2007-06-07 519.75 526.5 512.51 515.06 10630500 515.06 -2007-06-08 516.2 519.64 509.46 515.49 6358200 515.49 -2007-06-11 514.02 518.25 510.0 511.34 4647700 511.34 +2007-06-07 519.75 526.50 512.51 515.06 10630500 515.06 +2007-06-08 516.20 519.64 509.46 515.49 6358200 515.49 +2007-06-11 514.02 518.25 510.00 511.34 4647700 511.34 2007-06-12 508.71 511.67 503.17 504.77 6419500 504.77 2007-06-13 507.09 508.54 498.69 505.24 7034000 505.24 -2007-06-14 505.38 505.88 501.7 502.84 4621200 502.84 -2007-06-15 508.19 509.0 501.23 505.89 6174100 505.89 -2007-06-18 506.18 516.0 504.24 515.2 4835900 515.2 +2007-06-14 505.38 505.88 501.70 502.84 4621200 502.84 +2007-06-15 508.19 509.00 501.23 505.89 6174100 505.89 +2007-06-18 506.18 516.00 504.24 515.20 4835900 515.20 2007-06-19 514.01 517.25 511.54 514.31 4355300 514.31 2007-06-20 516.96 518.75 509.06 509.97 4338200 509.97 2007-06-21 510.98 515.29 506.28 514.11 4409700 514.11 -2007-06-22 516.42 524.99 516.1 524.98 7203700 524.98 +2007-06-22 516.42 524.99 516.10 524.98 7203700 524.98 2007-06-25 528.98 534.99 523.38 527.42 7925000 527.42 -2007-06-26 532.73 533.2 526.24 530.26 5689500 530.26 -2007-06-27 525.0 527.99 519.56 526.29 6123100 526.29 -2007-06-28 524.88 529.5 523.8 525.01 4168400 525.01 -2007-06-29 526.02 527.4 519.46 522.7 3880600 522.7 -2007-07-02 525.49 531.85 524.2 530.38 3487600 530.38 -2007-07-03 531.06 534.4 527.5 534.34 1871800 534.34 -2007-07-05 535.56 544.4 532.15 541.63 4942900 541.63 -2007-07-06 541.25 543.87 538.73 539.4 2747000 539.4 -2007-07-09 543.0 548.74 540.26 542.56 3729800 542.56 -2007-07-10 543.79 547.0 541.65 543.34 3856000 543.34 -2007-07-11 543.61 546.5 540.01 544.47 3309300 544.47 +2007-06-26 532.73 533.20 526.24 530.26 5689500 530.26 +2007-06-27 525.00 527.99 519.56 526.29 6123100 526.29 +2007-06-28 524.88 529.50 523.80 525.01 4168400 525.01 +2007-06-29 526.02 527.40 519.46 522.70 3880600 522.70 +2007-07-02 525.49 531.85 524.20 530.38 3487600 530.38 +2007-07-03 531.06 534.40 527.50 534.34 1871800 534.34 +2007-07-05 535.56 544.40 532.15 541.63 4942900 541.63 +2007-07-06 541.25 543.87 538.73 539.40 2747000 539.40 +2007-07-09 543.00 548.74 540.26 542.56 3729800 542.56 +2007-07-10 543.79 547.00 541.65 543.34 3856000 543.34 +2007-07-11 543.61 546.50 540.01 544.47 3309300 544.47 2007-07-12 545.86 547.32 540.22 545.33 3441600 545.33 2007-07-13 547.91 552.67 547.25 552.16 5237100 552.16 -2007-07-16 550.3 558.58 549.31 552.99 6599500 552.99 -2007-07-17 555.04 557.73 552.38 555.0 4328600 555.0 -2007-07-18 553.89 554.5 543.81 549.5 6080000 549.5 +2007-07-16 550.30 558.58 549.31 552.99 6599500 552.99 +2007-07-17 555.04 557.73 552.38 555.00 4328600 555.00 +2007-07-18 553.89 554.50 543.81 549.50 6080000 549.50 2007-07-19 553.46 553.52 542.24 548.59 11127200 548.59 -2007-07-20 511.9 523.18 509.5 520.12 17772300 520.12 -2007-07-23 519.01 520.0 512.15 512.51 6356700 512.51 -2007-07-24 509.3 518.69 507.11 514.0 5572100 514.0 +2007-07-20 511.90 523.18 509.50 520.12 17772300 520.12 +2007-07-23 519.01 520.00 512.15 512.51 6356700 512.51 +2007-07-24 509.30 518.69 507.11 514.00 5572100 514.00 2007-07-25 516.98 517.02 505.56 509.76 5545000 509.76 -2007-07-26 508.74 512.59 498.88 508.0 6883400 508.0 -2007-07-27 508.53 516.62 505.5 511.89 5509100 511.89 -2007-07-30 512.92 519.34 510.5 516.11 3963300 516.11 -2007-07-31 520.23 520.44 510.0 510.0 4270500 510.0 -2007-08-01 510.5 516.51 508.14 512.94 4421500 512.94 -2007-08-02 513.72 514.99 509.0 511.01 3154900 511.01 -2007-08-03 510.05 513.2 503.0 503.0 3176200 503.0 -2007-08-06 503.0 510.15 502.5 510.0 3651500 510.0 +2007-07-26 508.74 512.59 498.88 508.00 6883400 508.00 +2007-07-27 508.53 516.62 505.50 511.89 5509100 511.89 +2007-07-30 512.92 519.34 510.50 516.11 3963300 516.11 +2007-07-31 520.23 520.44 510.00 510.00 4270500 510.00 +2007-08-01 510.50 516.51 508.14 512.94 4421500 512.94 +2007-08-02 513.72 514.99 509.00 511.01 3154900 511.01 +2007-08-03 510.05 513.20 503.00 503.00 3176200 503.00 +2007-08-06 503.00 510.15 502.50 510.00 3651500 510.00 2007-08-07 509.75 519.88 509.04 516.02 4264300 516.02 2007-08-08 519.34 525.78 517.09 525.78 4068800 525.78 -2007-08-09 520.8 526.82 514.63 514.73 4846500 514.73 +2007-08-09 520.80 526.82 514.63 514.73 4846500 514.73 2007-08-10 510.18 518.72 505.63 515.75 5875200 515.75 -2007-08-13 519.54 519.75 513.03 515.5 3179300 515.5 -2007-08-14 515.72 517.4 508.0 508.6 3633700 508.6 -2007-08-15 509.0 511.69 496.71 497.55 5409500 497.55 +2007-08-13 519.54 519.75 513.03 515.50 3179300 515.50 +2007-08-14 515.72 517.40 508.00 508.60 3633700 508.60 +2007-08-15 509.00 511.69 496.71 497.55 5409500 497.55 2007-08-16 492.02 496.43 480.46 491.52 8645600 491.52 -2007-08-17 497.44 501.0 491.65 500.04 5479400 500.04 -2007-08-20 502.46 502.56 496.0 497.92 2697300 497.92 +2007-08-17 497.44 501.00 491.65 500.04 5479400 500.04 +2007-08-20 502.46 502.56 496.00 497.92 2697300 497.92 2007-08-21 498.94 508.16 497.77 506.61 3610600 506.61 2007-08-22 509.96 516.25 509.25 512.75 3252700 512.75 -2007-08-23 516.0 516.13 507.0 512.19 3076700 512.19 -2007-08-24 512.61 515.55 508.5 515.0 2472700 515.0 -2007-08-27 514.43 517.45 511.4 513.26 2325100 513.26 -2007-08-28 511.53 514.98 505.79 506.4 3273900 506.4 -2007-08-29 507.84 513.3 507.23 512.88 2549300 512.88 -2007-08-30 512.36 515.4 510.58 511.4 2651700 511.4 -2007-08-31 513.1 516.5 511.47 515.25 2977600 515.25 -2007-09-04 515.02 528.0 514.62 525.15 3693700 525.15 -2007-09-05 523.4 529.48 522.25 527.8 3312900 527.8 +2007-08-23 516.00 516.13 507.00 512.19 3076700 512.19 +2007-08-24 512.61 515.55 508.50 515.00 2472700 515.00 +2007-08-27 514.43 517.45 511.40 513.26 2325100 513.26 +2007-08-28 511.53 514.98 505.79 506.40 3273900 506.40 +2007-08-29 507.84 513.30 507.23 512.88 2549300 512.88 +2007-08-30 512.36 515.40 510.58 511.40 2651700 511.40 +2007-08-31 513.10 516.50 511.47 515.25 2977600 515.25 +2007-09-04 515.02 528.00 514.62 525.15 3693700 525.15 +2007-09-05 523.40 529.48 522.25 527.80 3312900 527.80 2007-09-06 529.36 529.83 518.24 523.52 3625900 523.52 -2007-09-07 517.86 521.24 516.8 519.35 3663600 519.35 +2007-09-07 517.86 521.24 516.80 519.35 3663600 519.35 2007-09-10 521.28 522.07 510.88 514.48 3225800 514.48 2007-09-11 516.99 521.65 515.73 521.33 2703600 521.33 -2007-09-12 520.53 527.98 519.0 522.65 2986000 522.65 +2007-09-12 520.53 527.98 519.00 522.65 2986000 522.65 2007-09-13 524.06 527.21 523.22 524.78 1891100 524.78 -2007-09-14 523.2 530.27 522.22 528.75 2764900 528.75 -2007-09-17 526.53 529.28 524.07 525.3 2197500 525.3 +2007-09-14 523.20 530.27 522.22 528.75 2764900 528.75 +2007-09-17 526.53 529.28 524.07 525.30 2197500 525.30 2007-09-18 526.52 537.25 524.27 535.27 4215700 535.27 2007-09-19 539.27 549.45 538.86 546.85 5526900 546.85 -2007-09-20 547.0 556.8 546.03 552.83 5525000 552.83 -2007-09-21 556.34 560.79 552.83 560.1 8011700 560.1 -2007-09-24 561.0 571.46 560.0 568.02 5297000 568.02 -2007-09-25 564.0 569.56 562.86 569.0 2730600 569.0 -2007-09-26 570.4 571.79 563.81 568.16 3346100 568.16 -2007-09-27 571.73 571.74 565.78 567.5 2056300 567.5 -2007-09-28 567.0 569.55 564.12 567.27 2639500 567.27 +2007-09-20 547.00 556.80 546.03 552.83 5525000 552.83 +2007-09-21 556.34 560.79 552.83 560.10 8011700 560.10 +2007-09-24 561.00 571.46 560.00 568.02 5297000 568.02 +2007-09-25 564.00 569.56 562.86 569.00 2730600 569.00 +2007-09-26 570.40 571.79 563.81 568.16 3346100 568.16 +2007-09-27 571.73 571.74 565.78 567.50 2056300 567.50 +2007-09-28 567.00 569.55 564.12 567.27 2639500 567.27 2007-10-01 569.97 584.35 569.61 582.55 4711300 582.55 2007-10-02 583.38 596.81 580.01 584.39 7067500 584.39 2007-10-03 586.25 588.99 580.36 584.02 3879500 584.02 2007-10-04 585.09 585.09 577.06 579.03 2986700 579.03 -2007-10-05 587.11 596.0 587.01 594.05 5068700 594.05 -2007-10-08 595.0 610.26 593.95 609.62 5028000 609.62 +2007-10-05 587.11 596.00 587.01 594.05 5068700 594.05 +2007-10-08 595.00 610.26 593.95 609.62 5028000 609.62 2007-10-09 615.11 623.78 608.39 615.18 8767800 615.18 -2007-10-10 621.36 625.68 616.8 625.39 5385600 625.39 -2007-10-11 633.64 641.41 609.0 622.0 11799000 622.0 -2007-10-12 623.98 638.4 618.24 637.39 6823700 637.39 +2007-10-10 621.36 625.68 616.80 625.39 5385600 625.39 +2007-10-11 633.64 641.41 609.00 622.00 11799000 622.00 +2007-10-12 623.98 638.40 618.24 637.39 6823700 637.39 2007-10-15 638.47 639.86 615.55 620.11 6943800 620.11 -2007-10-16 618.49 625.92 611.99 616.0 6025300 616.0 -2007-10-17 630.45 634.0 621.59 633.48 6030500 633.48 -2007-10-18 635.41 641.37 628.5 639.62 12289200 639.62 +2007-10-16 618.49 625.92 611.99 616.00 6025300 616.00 +2007-10-17 630.45 634.00 621.59 633.48 6030500 633.48 +2007-10-18 635.41 641.37 628.50 639.62 12289200 639.62 2007-10-19 654.56 658.49 643.23 644.71 15789000 644.71 -2007-10-22 638.67 655.0 636.28 650.75 6664400 650.75 -2007-10-23 661.25 677.6 660.0 675.77 6793700 675.77 +2007-10-22 638.67 655.00 636.28 650.75 6664400 650.75 +2007-10-23 661.25 677.60 660.00 675.77 6793700 675.77 2007-10-24 672.71 677.47 659.56 675.82 7404200 675.82 2007-10-25 678.68 678.97 663.55 668.51 5795500 668.51 -2007-10-26 674.03 676.54 668.06 674.6 3353900 674.6 -2007-10-29 677.77 680.0 672.09 679.23 3066300 679.23 +2007-10-26 674.03 676.54 668.06 674.60 3353900 674.60 +2007-10-29 677.77 680.00 672.09 679.23 3066300 679.23 2007-10-30 677.51 699.91 677.51 694.77 6900600 694.77 -2007-10-31 700.69 707.0 696.04 707.0 6876800 707.0 +2007-10-31 700.69 707.00 696.04 707.00 6876800 707.00 2007-11-01 702.79 713.72 701.78 703.21 6527200 703.21 2007-11-02 710.51 713.58 697.34 711.25 5841500 711.25 2007-11-05 706.99 730.23 706.07 725.65 8883700 725.65 -2007-11-06 737.56 741.79 725.0 741.79 8436300 741.79 +2007-11-06 737.56 741.79 725.00 741.79 8436300 741.79 2007-11-07 741.13 747.24 723.14 732.94 8252900 732.94 -2007-11-08 734.6 734.89 677.18 693.84 16512200 693.84 +2007-11-08 734.60 734.89 677.18 693.84 16512200 693.84 2007-11-09 675.78 681.88 661.21 663.97 11388100 663.97 2007-11-12 657.74 669.93 626.21 632.07 10227300 632.07 2007-11-13 644.99 660.92 632.07 660.55 8426100 660.55 2007-11-14 673.28 675.49 636.27 641.68 8094700 641.68 -2007-11-15 638.57 647.5 624.0 629.65 6967700 629.65 +2007-11-15 638.57 647.50 624.00 629.65 6967700 629.65 2007-11-16 633.94 635.49 616.02 633.63 9042800 633.63 -2007-11-19 629.59 636.77 618.5 625.85 5527400 625.85 -2007-11-20 636.48 659.1 632.87 648.54 9840600 648.54 +2007-11-19 629.59 636.77 618.50 625.85 5527400 625.85 +2007-11-20 636.48 659.10 632.87 648.54 9840600 648.54 2007-11-21 643.77 669.97 642.08 660.52 7013500 660.52 -2007-11-23 670.0 678.28 668.11 676.7 2738700 676.7 -2007-11-26 680.2 693.4 665.0 666.0 6790100 666.0 -2007-11-27 674.8 676.43 650.26 673.57 8904500 673.57 -2007-11-28 682.11 694.3 672.14 692.26 7916500 692.26 -2007-11-29 690.75 702.79 687.77 697.0 6208000 697.0 -2007-11-30 711.0 711.06 682.11 693.0 7895500 693.0 -2007-12-03 691.01 695.0 681.14 681.53 4325100 681.53 -2007-12-04 678.31 692.0 677.12 684.16 4231800 684.16 -2007-12-05 692.73 698.93 687.5 698.51 4209600 698.51 -2007-12-06 697.8 716.56 697.01 715.26 4909000 715.26 -2007-12-07 714.99 718.0 710.5 714.87 3852100 714.87 -2007-12-10 715.99 724.8 714.0 718.42 3856200 718.42 -2007-12-11 719.94 720.99 698.78 699.2 6139100 699.2 -2007-12-12 714.0 714.32 688.5 699.35 6159100 699.35 +2007-11-23 670.00 678.28 668.11 676.70 2738700 676.70 +2007-11-26 680.20 693.40 665.00 666.00 6790100 666.00 +2007-11-27 674.80 676.43 650.26 673.57 8904500 673.57 +2007-11-28 682.11 694.30 672.14 692.26 7916500 692.26 +2007-11-29 690.75 702.79 687.77 697.00 6208000 697.00 +2007-11-30 711.00 711.06 682.11 693.00 7895500 693.00 +2007-12-03 691.01 695.00 681.14 681.53 4325100 681.53 +2007-12-04 678.31 692.00 677.12 684.16 4231800 684.16 +2007-12-05 692.73 698.93 687.50 698.51 4209600 698.51 +2007-12-06 697.80 716.56 697.01 715.26 4909000 715.26 +2007-12-07 714.99 718.00 710.50 714.87 3852100 714.87 +2007-12-10 715.99 724.80 714.00 718.42 3856200 718.42 +2007-12-11 719.94 720.99 698.78 699.20 6139100 699.20 +2007-12-12 714.00 714.32 688.50 699.35 6159100 699.35 2007-12-13 696.31 697.62 681.21 694.05 5040800 694.05 -2007-12-14 687.51 699.7 687.26 689.96 3673500 689.96 -2007-12-17 688.0 695.42 663.67 669.23 5486000 669.23 -2007-12-18 674.16 676.71 652.5 673.35 7166700 673.35 -2007-12-19 674.21 679.5 669.0 677.37 4421100 677.37 -2007-12-20 685.83 691.0 680.61 689.69 4422200 689.69 +2007-12-14 687.51 699.70 687.26 689.96 3673500 689.96 +2007-12-17 688.00 695.42 663.67 669.23 5486000 669.23 +2007-12-18 674.16 676.71 652.50 673.35 7166700 673.35 +2007-12-19 674.21 679.50 669.00 677.37 4421100 677.37 +2007-12-20 685.83 691.00 680.61 689.69 4422200 689.69 2007-12-21 697.88 699.26 693.24 696.69 5382000 696.69 2007-12-24 694.99 700.73 693.06 700.73 1628400 700.73 2007-12-26 698.99 713.22 698.21 710.84 2530000 710.84 -2007-12-27 707.07 716.0 700.74 700.74 2942500 700.74 +2007-12-27 707.07 716.00 700.74 700.74 2942500 700.74 2007-12-28 704.93 707.95 696.54 702.53 2562700 702.53 2007-12-31 698.57 702.49 690.58 691.48 2376200 691.48 2008-01-02 692.87 697.37 677.73 685.19 4306900 685.19 2008-01-03 685.26 686.85 676.52 685.33 3252500 685.33 -2008-01-04 679.69 680.96 655.0 657.0 5359800 657.0 +2008-01-04 679.69 680.96 655.00 657.00 5359800 657.00 2008-01-07 653.94 662.28 637.35 649.25 6403400 649.25 -2008-01-08 653.0 659.96 631.0 631.68 5339100 631.68 -2008-01-09 630.04 653.34 622.51 653.2 6739700 653.2 -2008-01-10 645.01 657.2 640.11 646.73 6334200 646.73 -2008-01-11 642.7 649.47 630.11 638.25 4977000 638.25 -2008-01-14 651.14 657.4 645.25 653.82 4447500 653.82 -2008-01-15 645.9 649.05 635.38 637.65 5568200 637.65 +2008-01-08 653.00 659.96 631.00 631.68 5339100 631.68 +2008-01-09 630.04 653.34 622.51 653.20 6739700 653.20 +2008-01-10 645.01 657.20 640.11 646.73 6334200 646.73 +2008-01-11 642.70 649.47 630.11 638.25 4977000 638.25 +2008-01-14 651.14 657.40 645.25 653.82 4447500 653.82 +2008-01-15 645.90 649.05 635.38 637.65 5568200 637.65 2008-01-16 628.97 639.99 601.93 615.95 10560000 615.95 2008-01-17 620.76 625.74 598.01 600.79 8216800 600.79 2008-01-18 608.36 609.99 598.45 600.25 8539600 600.25 -2008-01-22 562.03 597.5 561.2 584.35 9501500 584.35 -2008-01-23 560.71 568.0 519.0 548.62 16965700 548.62 -2008-01-24 558.8 579.69 554.14 574.49 9400900 574.49 -2008-01-25 591.81 595.0 566.18 566.4 6966000 566.4 -2008-01-28 570.97 572.24 548.6 555.98 5816700 555.98 +2008-01-22 562.03 597.50 561.20 584.35 9501500 584.35 +2008-01-23 560.71 568.00 519.00 548.62 16965700 548.62 +2008-01-24 558.80 579.69 554.14 574.49 9400900 574.49 +2008-01-25 591.81 595.00 566.18 566.40 6966000 566.40 +2008-01-28 570.97 572.24 548.60 555.98 5816700 555.98 2008-01-29 560.47 561.33 540.67 550.52 6283000 550.52 2008-01-30 549.19 560.43 543.51 548.27 7939600 548.27 -2008-01-31 539.01 573.0 534.29 564.3 14871300 564.3 -2008-02-01 528.67 536.67 510.0 515.9 17600500 515.9 +2008-01-31 539.01 573.00 534.29 564.30 14871300 564.30 +2008-02-01 528.67 536.67 510.00 515.90 17600500 515.90 2008-02-04 509.07 512.78 492.55 495.43 13157100 495.43 -2008-02-05 489.43 509.0 488.52 506.8 11203300 506.8 +2008-02-05 489.43 509.00 488.52 506.80 11203300 506.80 2008-02-06 511.14 511.17 497.93 501.71 7636400 501.71 2008-02-07 496.86 514.19 494.76 504.95 7928900 504.95 -2008-02-08 509.41 517.73 508.7 516.69 6828900 516.69 -2008-02-11 520.52 523.71 513.4 521.16 5826000 521.16 -2008-02-12 523.39 530.6 513.03 518.09 6662300 518.09 -2008-02-13 522.5 534.99 518.69 534.62 6624700 534.62 -2008-02-14 538.35 541.04 531.0 532.25 6476700 532.25 +2008-02-08 509.41 517.73 508.70 516.69 6828900 516.69 +2008-02-11 520.52 523.71 513.40 521.16 5826000 521.16 +2008-02-12 523.39 530.60 513.03 518.09 6662300 518.09 +2008-02-13 522.50 534.99 518.69 534.62 6624700 534.62 +2008-02-14 538.35 541.04 531.00 532.25 6476700 532.25 2008-02-15 528.31 532.66 524.33 529.64 5240100 529.64 -2008-02-19 534.94 535.06 506.5 508.95 6350400 508.95 -2008-02-20 503.51 511.01 498.82 509.0 6662200 509.0 -2008-02-21 512.85 513.21 499.5 502.86 5677800 502.86 -2008-02-22 502.06 509.0 497.55 507.8 5515900 507.8 -2008-02-25 505.95 506.5 485.74 486.44 8350800 486.44 -2008-02-26 461.2 466.47 446.85 464.19 23287300 464.19 +2008-02-19 534.94 535.06 506.50 508.95 6350400 508.95 +2008-02-20 503.51 511.01 498.82 509.00 6662200 509.00 +2008-02-21 512.85 513.21 499.50 502.86 5677800 502.86 +2008-02-22 502.06 509.00 497.55 507.80 5515900 507.80 +2008-02-25 505.95 506.50 485.74 486.44 8350800 486.44 +2008-02-26 461.20 466.47 446.85 464.19 23287300 464.19 2008-02-27 460.13 475.49 459.64 472.86 10121900 472.86 -2008-02-28 470.5 479.09 467.36 475.39 6586900 475.39 +2008-02-28 470.50 479.09 467.36 475.39 6586900 475.39 2008-02-29 471.87 479.74 464.65 471.18 9425400 471.18 2008-03-03 471.51 472.72 450.11 457.02 7554500 457.02 -2008-03-04 450.95 453.36 435.78 444.6 13621700 444.6 -2008-03-05 445.25 454.17 444.0 447.7 7436600 447.7 -2008-03-06 447.69 453.3 431.18 432.7 7470100 432.7 -2008-03-07 428.88 440.0 426.24 433.35 8071800 433.35 -2008-03-10 428.83 431.0 413.04 413.62 7987600 413.62 +2008-03-04 450.95 453.36 435.78 444.60 13621700 444.60 +2008-03-05 445.25 454.17 444.00 447.70 7436600 447.70 +2008-03-06 447.69 453.30 431.18 432.70 7470100 432.70 +2008-03-07 428.88 440.00 426.24 433.35 8071800 433.35 +2008-03-10 428.83 431.00 413.04 413.62 7987600 413.62 2008-03-11 425.26 440.15 424.65 439.84 8826900 439.84 2008-03-12 440.01 447.88 438.07 440.18 6651900 440.18 2008-03-13 432.67 446.98 428.78 443.01 7726600 443.01 2008-03-14 442.98 449.34 430.62 437.92 6574400 437.92 2008-03-17 427.99 433.71 412.11 419.87 7888200 419.87 2008-03-18 428.98 440.84 425.53 439.16 7237200 439.16 -2008-03-19 441.11 447.5 431.67 432.0 6179000 432.0 -2008-03-20 427.32 435.7 417.5 433.55 9900400 433.55 +2008-03-19 441.11 447.50 431.67 432.00 6179000 432.00 +2008-03-20 427.32 435.70 417.50 433.55 9900400 433.55 2008-03-24 438.43 465.78 437.72 460.56 6763500 460.56 -2008-03-25 457.46 457.47 446.0 450.78 5831600 450.78 +2008-03-25 457.46 457.47 446.00 450.78 5831600 450.78 2008-03-26 452.59 462.87 449.29 458.19 5214200 458.19 -2008-03-27 446.0 448.61 440.49 444.08 5832200 444.08 +2008-03-27 446.00 448.61 440.49 444.08 5832200 444.08 2008-03-28 447.46 453.57 434.31 438.08 4376200 438.08 2008-03-31 435.64 442.69 432.01 440.47 4446400 440.47 -2008-04-01 447.74 466.5 446.87 465.71 6093100 465.71 -2008-04-02 469.9 475.74 460.39 465.7 5999000 465.7 +2008-04-01 447.74 466.50 446.87 465.71 6093100 465.71 +2008-04-02 469.90 475.74 460.39 465.70 5999000 465.70 2008-04-03 461.73 463.29 448.13 455.12 6778400 455.12 -2008-04-04 457.01 477.83 456.2 471.09 5897200 471.09 +2008-04-04 457.01 477.83 456.20 471.09 5897200 471.09 2008-04-07 477.03 485.44 473.53 476.82 5943500 476.82 2008-04-08 473.04 474.14 462.01 467.81 4547000 467.81 -2008-04-09 469.13 472.0 457.54 464.19 6048100 464.19 +2008-04-09 469.13 472.00 457.54 464.19 6048100 464.19 2008-04-10 464.96 473.86 461.85 469.08 5072400 469.08 2008-04-11 464.07 467.26 455.01 457.45 4151500 457.45 2008-04-14 457.16 457.45 450.15 451.66 3842600 451.66 2008-04-15 458.13 459.72 443.72 446.84 4577600 446.84 -2008-04-16 444.4 458.28 441.0 455.03 7620200 455.03 +2008-04-16 444.40 458.28 441.00 455.03 7620200 455.03 2008-04-17 455.63 459.37 446.52 449.54 13353000 449.54 -2008-04-18 535.21 547.7 524.77 539.41 18235600 539.41 +2008-04-18 535.21 547.70 524.77 539.41 18235600 539.41 2008-04-21 539.39 542.59 530.29 537.79 7439700 537.79 -2008-04-22 537.57 560.83 537.56 555.0 7938500 555.0 +2008-04-22 537.57 560.83 537.56 555.00 7938500 555.00 2008-04-23 557.94 559.31 540.95 546.49 4921500 546.49 2008-04-24 551.29 554.49 540.02 543.04 4135100 543.04 -2008-04-25 549.02 553.0 542.73 544.06 4164400 544.06 -2008-04-28 545.88 556.81 539.0 552.12 4008600 552.12 -2008-04-29 550.83 563.4 550.01 558.47 4346000 558.47 +2008-04-25 549.02 553.00 542.73 544.06 4164400 544.06 +2008-04-28 545.88 556.81 539.00 552.12 4008600 552.12 +2008-04-29 550.83 563.40 550.01 558.47 4346000 558.47 2008-04-30 562.21 584.86 558.47 574.29 7903000 574.29 2008-05-01 578.31 594.93 576.97 593.08 6602800 593.08 -2008-05-02 598.49 602.45 579.3 581.29 6998800 581.29 -2008-05-05 598.86 599.0 587.13 594.9 6281000 594.9 -2008-05-06 591.0 592.0 583.0 586.36 4629300 586.36 -2008-05-07 590.27 599.49 576.43 579.0 6613000 579.0 -2008-05-08 586.2 589.3 578.91 583.01 5122900 583.01 -2008-05-09 579.0 585.0 571.3 573.2 4484900 573.2 +2008-05-02 598.49 602.45 579.30 581.29 6998800 581.29 +2008-05-05 598.86 599.00 587.13 594.90 6281000 594.90 +2008-05-06 591.00 592.00 583.00 586.36 4629300 586.36 +2008-05-07 590.27 599.49 576.43 579.00 6613000 579.00 +2008-05-08 586.20 589.30 578.91 583.01 5122900 583.01 +2008-05-09 579.00 585.00 571.30 573.20 4484900 573.20 2008-05-12 574.75 586.75 568.91 584.94 4863900 584.94 -2008-05-13 586.23 587.95 578.55 583.0 5163500 583.0 -2008-05-14 586.49 591.19 575.25 576.3 4375800 576.3 -2008-05-15 579.0 582.95 575.61 581.0 4342700 581.0 +2008-05-13 586.23 587.95 578.55 583.00 5163500 583.00 +2008-05-14 586.49 591.19 575.25 576.30 4375800 576.30 +2008-05-15 579.00 582.95 575.61 581.00 4342700 581.00 2008-05-16 581.43 584.68 578.32 580.07 4274100 580.07 2008-05-19 578.55 588.88 573.52 577.52 5604500 577.52 -2008-05-20 574.63 582.48 572.91 578.6 3313600 578.6 +2008-05-20 574.63 582.48 572.91 578.60 3313600 578.60 2008-05-21 578.52 581.41 547.89 549.99 6468100 549.99 2008-05-22 551.95 554.21 540.25 549.46 5076300 549.46 -2008-05-23 546.96 553.0 537.81 544.62 4431500 544.62 -2008-05-27 544.96 562.6 543.85 560.9 3865500 560.9 -2008-05-28 567.94 571.49 561.1 568.24 4050400 568.24 -2008-05-29 574.79 585.88 573.2 583.0 4845000 583.0 -2008-05-30 583.47 589.92 581.3 585.8 3225200 585.8 -2008-06-02 582.5 583.89 571.27 575.0 3674200 575.0 -2008-06-03 576.5 580.5 560.61 567.3 4305300 567.3 -2008-06-04 565.33 578.0 564.55 572.22 3363200 572.22 -2008-06-05 577.08 588.04 576.21 586.3 3916700 586.3 -2008-06-06 579.75 580.72 567.0 567.0 4734500 567.0 -2008-06-09 568.06 570.0 545.4 557.87 5288300 557.87 +2008-05-23 546.96 553.00 537.81 544.62 4431500 544.62 +2008-05-27 544.96 562.60 543.85 560.90 3865500 560.90 +2008-05-28 567.94 571.49 561.10 568.24 4050400 568.24 +2008-05-29 574.79 585.88 573.20 583.00 4845000 583.00 +2008-05-30 583.47 589.92 581.30 585.80 3225200 585.80 +2008-06-02 582.50 583.89 571.27 575.00 3674200 575.00 +2008-06-03 576.50 580.50 560.61 567.30 4305300 567.30 +2008-06-04 565.33 578.00 564.55 572.22 3363200 572.22 +2008-06-05 577.08 588.04 576.21 586.30 3916700 586.30 +2008-06-06 579.75 580.72 567.00 567.00 4734500 567.00 +2008-06-09 568.06 570.00 545.40 557.87 5288300 557.87 2008-06-10 549.56 558.82 546.78 554.17 3657400 554.17 -2008-06-11 556.24 557.34 544.46 545.2 3812900 545.2 -2008-06-12 548.76 558.0 546.88 552.95 5491600 552.95 -2008-06-13 561.49 575.7 561.34 571.51 6184400 571.51 -2008-06-16 566.5 579.1 566.5 572.81 3542800 572.81 +2008-06-11 556.24 557.34 544.46 545.20 3812900 545.20 +2008-06-12 548.76 558.00 546.88 552.95 5491600 552.95 +2008-06-13 561.49 575.70 561.34 571.51 6184400 571.51 +2008-06-16 566.50 579.10 566.50 572.81 3542800 572.81 2008-06-17 576.35 578.07 568.38 569.46 3462900 569.46 2008-06-18 564.51 568.99 559.16 562.38 3381200 562.38 -2008-06-19 555.35 563.78 550.81 560.2 5683100 560.2 +2008-06-19 555.35 563.78 550.81 560.20 5683100 560.20 2008-06-20 556.98 556.98 544.51 546.43 5983100 546.43 2008-06-23 545.36 553.15 542.02 545.21 3635900 545.21 -2008-06-24 545.14 551.19 535.1 542.3 4672600 542.3 -2008-06-25 544.97 557.8 543.67 551.0 4122200 551.0 -2008-06-26 544.1 544.93 528.26 528.82 5659500 528.82 -2008-06-27 527.68 530.0 515.09 528.07 5436900 528.07 -2008-06-30 532.47 538.0 523.06 526.42 3765300 526.42 -2008-07-01 519.58 536.72 517.0 534.73 4959900 534.73 +2008-06-24 545.14 551.19 535.10 542.30 4672600 542.30 +2008-06-25 544.97 557.80 543.67 551.00 4122200 551.00 +2008-06-26 544.10 544.93 528.26 528.82 5659500 528.82 +2008-06-27 527.68 530.00 515.09 528.07 5436900 528.07 +2008-06-30 532.47 538.00 523.06 526.42 3765300 526.42 +2008-07-01 519.58 536.72 517.00 534.73 4959900 534.73 2008-07-02 536.51 540.38 526.06 527.04 4223000 527.04 -2008-07-03 530.88 539.23 527.5 537.0 2400500 537.0 -2008-07-07 542.3 549.0 535.6 543.91 4255200 543.91 -2008-07-08 545.99 555.19 540.0 554.53 4932400 554.53 +2008-07-03 530.88 539.23 527.50 537.00 2400500 537.00 +2008-07-07 542.30 549.00 535.60 543.91 4255200 543.91 +2008-07-08 545.99 555.19 540.00 554.53 4932400 554.53 2008-07-09 550.76 555.68 540.73 541.55 4154000 541.55 -2008-07-10 545.0 549.5 530.72 540.57 4331700 540.57 -2008-07-11 536.5 539.5 519.43 533.8 4981400 533.8 -2008-07-14 539.0 540.06 515.45 521.62 4424800 521.62 -2008-07-15 516.28 527.5 501.1 516.09 6071000 516.09 -2008-07-16 514.04 536.5 510.6 535.6 4742200 535.6 -2008-07-17 534.16 537.05 524.5 533.44 8787400 533.44 +2008-07-10 545.00 549.50 530.72 540.57 4331700 540.57 +2008-07-11 536.50 539.50 519.43 533.80 4981400 533.80 +2008-07-14 539.00 540.06 515.45 521.62 4424800 521.62 +2008-07-15 516.28 527.50 501.10 516.09 6071000 516.09 +2008-07-16 514.04 536.50 510.60 535.60 4742200 535.60 +2008-07-17 534.16 537.05 524.50 533.44 8787400 533.44 2008-07-18 498.35 498.98 478.19 481.32 11292400 481.32 -2008-07-21 480.88 484.09 465.7 468.8 5901500 468.8 -2008-07-22 466.72 480.25 465.6 477.11 4691500 477.11 -2008-07-23 481.61 497.23 478.1 489.22 4894100 489.22 -2008-07-24 496.7 496.87 475.62 475.62 3540900 475.62 -2008-07-25 486.49 493.13 481.5 491.98 3183500 491.98 +2008-07-21 480.88 484.09 465.70 468.80 5901500 468.80 +2008-07-22 466.72 480.25 465.60 477.11 4691500 477.11 +2008-07-23 481.61 497.23 478.10 489.22 4894100 489.22 +2008-07-24 496.70 496.87 475.62 475.62 3540900 475.62 +2008-07-25 486.49 493.13 481.50 491.98 3183500 491.98 2008-07-28 492.09 492.09 475.13 477.12 3160000 477.12 -2008-07-29 479.3 487.26 478.0 483.11 2802800 483.11 -2008-07-30 485.5 486.02 472.81 482.7 3490700 482.7 +2008-07-29 479.30 487.26 478.00 483.11 2802800 483.11 +2008-07-30 485.50 486.02 472.81 482.70 3490700 482.70 2008-07-31 474.56 480.89 471.44 473.75 2865100 473.75 -2008-08-01 472.51 473.22 462.5 467.86 3007900 467.86 -2008-08-04 468.12 473.01 461.9 463.0 2487000 463.0 +2008-08-01 472.51 473.22 462.50 467.86 3007900 467.86 +2008-08-04 468.12 473.01 461.90 463.00 2487000 463.00 2008-08-05 467.59 480.08 466.33 479.85 3584500 479.85 2008-08-06 478.37 489.77 472.51 486.34 3375800 486.34 -2008-08-07 482.0 484.0 476.41 479.12 2773800 479.12 +2008-08-07 482.00 484.00 476.41 479.12 2773800 479.12 2008-08-08 480.15 495.75 475.69 495.01 3739300 495.01 2008-08-11 492.47 508.88 491.78 500.84 4239300 500.84 -2008-08-12 502.0 506.13 498.0 502.61 2755700 502.61 -2008-08-13 501.6 503.54 493.88 500.03 3625500 500.03 -2008-08-14 497.7 507.61 496.29 505.49 2918600 505.49 -2008-08-15 506.99 510.66 505.5 510.15 3545700 510.15 -2008-08-18 509.84 510.0 495.51 498.3 3333900 498.3 -2008-08-19 490.43 498.28 486.63 490.5 3046500 490.5 -2008-08-20 494.72 496.69 482.57 485.0 3982100 485.0 -2008-08-21 482.92 489.9 479.27 486.53 3514100 486.53 -2008-08-22 491.5 494.88 489.48 490.59 2297200 490.59 -2008-08-25 486.11 497.0 481.5 483.01 2014300 483.01 +2008-08-12 502.00 506.13 498.00 502.61 2755700 502.61 +2008-08-13 501.60 503.54 493.88 500.03 3625500 500.03 +2008-08-14 497.70 507.61 496.29 505.49 2918600 505.49 +2008-08-15 506.99 510.66 505.50 510.15 3545700 510.15 +2008-08-18 509.84 510.00 495.51 498.30 3333900 498.30 +2008-08-19 490.43 498.28 486.63 490.50 3046500 490.50 +2008-08-20 494.72 496.69 482.57 485.00 3982100 485.00 +2008-08-21 482.92 489.90 479.27 486.53 3514100 486.53 +2008-08-22 491.50 494.88 489.48 490.59 2297200 490.59 +2008-08-25 486.11 497.00 481.50 483.01 2014300 483.01 2008-08-26 483.46 483.46 470.59 474.16 3308200 474.16 2008-08-27 473.73 474.83 464.84 468.58 4387100 468.58 2008-08-28 472.49 476.45 470.33 473.78 3029700 473.78 2008-08-29 469.75 471.01 462.33 463.29 3848200 463.29 2008-09-02 476.77 482.18 461.42 465.25 6111500 465.25 2008-09-03 468.73 474.29 459.58 464.41 4314600 464.41 -2008-09-04 460.0 463.24 449.4 450.26 4848500 450.26 +2008-09-04 460.00 463.24 449.40 450.26 4848500 450.26 2008-09-05 445.49 452.46 440.08 444.25 4534300 444.25 2008-09-08 452.02 452.94 417.55 419.95 9017900 419.95 -2008-09-09 423.17 432.38 415.0 418.66 7229600 418.66 +2008-09-09 423.17 432.38 415.00 418.66 7229600 418.66 2008-09-10 424.47 424.48 409.68 414.16 6226800 414.16 2008-09-11 408.35 435.09 406.38 433.75 6471400 433.75 -2008-09-12 430.21 441.99 429.0 437.66 6028000 437.66 -2008-09-15 424.0 441.97 423.71 433.86 6567400 433.86 +2008-09-12 430.21 441.99 429.00 437.66 6028000 437.66 +2008-09-15 424.00 441.97 423.71 433.86 6567400 433.86 2008-09-16 425.96 449.28 425.49 442.93 6990700 442.93 2008-09-17 438.48 439.14 413.44 414.49 9126900 414.49 -2008-09-18 422.64 439.18 410.5 439.08 8589400 439.08 -2008-09-19 461.0 462.07 443.28 449.15 10006000 449.15 -2008-09-22 454.13 454.13 429.0 430.14 4407300 430.14 +2008-09-18 422.64 439.18 410.50 439.08 8589400 439.08 +2008-09-19 461.00 462.07 443.28 449.15 10006000 449.15 +2008-09-22 454.13 454.13 429.00 430.14 4407300 430.14 2008-09-23 433.25 440.79 425.72 429.27 5204200 429.27 -2008-09-24 430.34 445.0 430.11 435.11 4242000 435.11 -2008-09-25 438.84 450.0 435.98 439.6 5020300 439.6 -2008-09-26 428.0 437.16 421.03 431.04 5292500 431.04 -2008-09-29 419.51 423.51 380.71 381.0 10762900 381.0 +2008-09-24 430.34 445.00 430.11 435.11 4242000 435.11 +2008-09-25 438.84 450.00 435.98 439.60 5020300 439.60 +2008-09-26 428.00 437.16 421.03 431.04 5292500 431.04 +2008-09-29 419.51 423.51 380.71 381.00 10762900 381.00 2008-09-30 395.98 425.08 392.32 400.52 3086300 400.52 -2008-10-01 411.15 416.98 403.1 411.72 6234800 411.72 -2008-10-02 409.79 409.98 386.0 390.49 5984900 390.49 -2008-10-03 397.35 412.5 383.07 386.91 7992900 386.91 +2008-10-01 411.15 416.98 403.10 411.72 6234800 411.72 +2008-10-02 409.79 409.98 386.00 390.49 5984900 390.49 +2008-10-03 397.35 412.50 383.07 386.91 7992900 386.91 2008-10-06 373.98 375.99 357.16 371.21 11220600 371.21 2008-10-07 373.33 374.98 345.37 346.01 11054400 346.01 2008-10-08 330.16 358.99 326.11 338.11 11826400 338.11 2008-10-09 344.52 348.57 321.67 328.98 8075000 328.98 -2008-10-10 313.16 341.89 310.3 332.0 10597800 332.0 +2008-10-10 313.16 341.89 310.30 332.00 10597800 332.00 2008-10-13 355.79 381.95 345.75 381.02 8905500 381.02 -2008-10-14 393.53 394.5 357.0 362.71 7784800 362.71 +2008-10-14 393.53 394.50 357.00 362.71 7784800 362.71