{ "info": { "author": "Ian Nesbitt", "author_email": "ian.nesbitt@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU Affero General Public License v3", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Physics" ], "description": "# readgssi\n*Copyleft \ud83c\udd2f 2017-2019*\n\n![Example Radargram](https://github.com/iannesbitt/readgssi/raw/master/examples/main.png)\n\n[![PyPI version](https://img.shields.io/pypi/v/readgssi.svg?colorB=limegreen&label=pypi%20package)](https://badge.fury.io/py/readgssi)\n[![DOI](https://zenodo.org/badge/doi/10.5281/zenodo.1439119.svg)](https://dx.doi.org/10.5281/zenodo.1439119)\n[![License](https://img.shields.io/badge/license-GNU%20Affero%203.0-lightgrey.svg)](https://github.com/iannesbitt/readgssi/blob/master/LICENSE)\n[![Build Status](https://travis-ci.org/iannesbitt/readgssi.svg?branch=master)](https://travis-ci.org/iannesbitt/readgssi)\n[![Documentation Status](https://readthedocs.org/projects/readgssi/badge/?version=latest)](https://readgssi.readthedocs.io/en/latest/?badge=latest)\n[![Downloads per month](https://img.shields.io/pypi/dm/readgssi.svg)](https://pypi.org/project/readgssi/)\n\n`readgssi` is a tool intended for use as an open-source reader and preprocessing module for subsurface data collected with Geophysical Survey Systems Incorporated (GSSI) ground-penetrating georadar (GPR) devices. It has the capability to read DZT and DZG files with the same pre-extension name and plot the data contained in those files. `readgssi` is also currently able to translate most DZT files to CSV and will be able to translate to other output formats including HDF5 (see [future](#future)). Matlab code donated by [Gabe Lewis](https://earthsciences.dartmouth.edu/people/gabriel-lewis), Dartmouth College Department of Earth Sciences. Python adaptation written with permission by Ian Nesbitt, University of Maine School of Earth and Climate Sciences.\n\nThe file read parameters are based on GSSI's DZT file description, similar to the ones available on pages 55-57 of the [SIR-3000 manual](https://support.geophysical.com/gssiSupport/Products/Documents/Control%20Unit%20Manuals/GSSI%20-%20SIR-3000%20Operation%20Manual.pdf). File structure is, unfortunately, prone to change at any time, and although I've been able to test with files from several systems, I have not encountered every iteration of file header yet. If you run into trouble, please [create a github issue](https://github.com/iannesbitt/readgssi/issues).\n\nQuestions, feature requests, and bugs: please [open a github issue](https://github.com/iannesbitt/readgssi/issues). Kindly provide the error output, describe what you are attempting to do, and attach the DZT/DZG file(s) causing you trouble.\n\n## requirements\nStrongly recommended to install via [anaconda](https://www.anaconda.com/download):\n- [`obspy`](https://obspy.org/)\n- [`matplotlib`](https://matplotlib.org/)\n- [`numpy`](http://www.numpy.org/)\n- [`scipy`](https://www.scipy.org/)\n- [`pandas`](https://pandas.pydata.org/)\n- [`h5py`](https://www.h5py.org/)\n\nInstall via `pip`:\n- [`pynmea2`](https://pypi.org/project/pynmea2/)\n- [`geopy`](https://pypi.org/project/geopy/)\n- [`pytz`](https://pypi.org/project/pytz/)\n\n## installation\n\nOnce you have [anaconda](https://www.anaconda.com/download) running, installing requirements is pretty easy.\n\n```bash\nconda config --add channels conda-forge\nconda create -n readgssi python==3.7 pandas h5py pytz obspy\nconda activate readgssi\npip install readgssi\n```\n\nThat should allow you to run the commands below.\n\n#### installing from source:\n\nIf you choose to install a specific commit rather than the [latest working release of this software](https://pypi.org/project/readgssi), you may download this package, unzip to your home folder, open a command line, then install in the following way:\n\n```bash\npip install ~/readgssi\n```\n\n## usage\n\nTo display the help text:\n\n```bash\n$ readgssi -h\n\nusage:\nreadgssi -i input.DZT [OPTIONS]\n\nrequired flags:\n OPTION | ARGUMENT | FUNCTIONALITY\n-i, --input | file: /dir/f.DZT | input DZT file\n\noptional flags:\n OPTION | ARGUMENT | FUNCTIONALITY\n-o, --output | file: /dir/f.ext | output file. if not set, will be named similar to input\n-f, --format | string, eg. \"csv\" | output format (csv is the only working format currently)\n-p, --plot | +integer or \"auto\" | plot size. will be x inches high or \"auto\". default: 10. see also -D to set DPI\n-D, --dpi | positive integer | set the plot DPI for figure making. defaults to 150\n-T, --titleoff | | turn the plot title off (useful for figure making)\n-x, --xscale | string, eg. \"dist\" | x units. will attempt to convert the x-axis to distance, time, or trace units based on header values\n-z, --zscale | string, eg. \"time\" | z units. attempt to convert the x-axis to depth, time, or sample units based on header values\n-e, --zoom | list of +int [LRUD] | set a zoom to automatically jump to. list order is [left,right,up,down] and units are the same as axis\n-n, --noshow | | suppress matplotlib popup window and simply save a figure (useful for multi-file processing)\n-c, --colormap | string, eg. seismic | specify the colormap (https://matplotlib.org/users/colormaps.html#grayscale-conversion)\n-g, --gain | positive float | gain constant (higher=greater contrast, default: 1)\n-r, --bgr | +integer or zero | horizontal background removal (useful to remove ringing). zero=full width; positive=window size (after stacking)\n-R, --reverse | | reverse (flip array horizontally)\n-w, --dewow | | trinomial dewow algorithm\n-t, --bandpass | +int-+int (MHz) | triangular FIR bandpass filter applied vertically (positive integer range in megahertz; ex. 70-130)\n-b, --colorbar | | add a colorbar to the radar figure\n-a, --antfreq | positive integer | set antenna frequency. overrides header value\n-s, --stack | +integer or \"auto\" | set trace stacking value or \"auto\" to autostack to ~2.5:1 x:y axis ratio\n-N, --normalize | | distance normalize; reads .DZG NMEA data file if it exists; otherwise tries to read CSV with lat, lon, and time fields\n-d, --spm | positive float | specify the samples per meter (spm). overrides header value\n-m, --histogram | | produce a histogram of data values\n-E, --epsr | float > 1.0 | user-defined epsilon sub r (sometimes referred to as \"dielectric\") if set, ignores value in DZT header\n-Z, --zero | +int or list of int | timezero: skip samples before direct wave. samples are removed from the top of the trace. use list for multi-channel\n\nnaming scheme for exports:\n CHARACTERS | MEANING\n Ch0 | Profile from channel 0 (can range from 0 - 3)\n Dn | Distance normalization\n Tz233 | Time zero at 233 samples\n S8 | Stacked 8 times\n Rv | Profile read in reverse (flipped horizontally)\n Bgr75 | Background removal filter with window size of 75\n Dw | Dewow filter\n Bp70-130 | triangular FIR filter applied from 70 to 130 MHz\n G30 | 30x contrast gain\n Z10.20.7.5 | zoom from 10-20 axis units on the x-axis and 5-7 on the z-axis\n```\n\nFrom a unix command line:\n```bash\nreadgssi -i DZT__001.DZT\n```\nSimply specifying an input DZT file like in the above command (`-i file`) will display a host of data about the file including:\n- name of GSSI control unit\n- antenna model\n- antenna frequency\n- samples per trace\n- bits per sample\n- traces per second\n- L1 dielectric as entered during survey\n- sampling depth\n- speed of wave at given dielectric\n- number of traces\n- number of seconds\n\n## basic functionality\n### CSV output\n```bash\nreadgssi -i DZT__001.DZT -o test.csv -f CSV\n```\nTranslates radar data array to CSV format, if that's your cup of tea. One might use this to export to Matlab. One CSV will be written per channel. The script will rename the output to 'test_100MHz.csv' automatically. No header information is included in the CSV.\n\n```bash\nreadgssi -i DZT__001.DZT -s 8 -w -r 0 -o test.csv -f CSV\n```\nApplies 8x stacking, dewow, and background removal filters before exporting to CSV.\n\n### numpy object output\n```bash\nreadgssi -i DZT__001.DZT -o test.npy -f numpy\n```\nThis command will save the array in numpy binary format. Header information will not be saved, however.\n\n### [`GPRPy`](https://github.com/NSGeophysics/gprpy)-compatible output\n```bash\nreadgssi -i DZT__001.DZT -o test -f gprpy\n```\nThis command saves the array in numpy binary format, and preserves the header as a JSON file as well. [`GPRPy`](https://github.com/NSGeophysics/gprpy) will soon support importing this type of file.\n\n\n### plotting\n#### example 1A: without gain\n```bash\nreadgssi -i DZT__001.DZT -o 1a.png -p 5 -s auto\n```\nThe above command will cause `readgssi` to save and show a plot named \"TEST__001c0Tz233S6G1.png\" with a y-size of 5 inches at 150 dpi (`-p 5`) and the autostacking algorithm will stack the x-axis to some multiple of times shorter than the original data array for optimal viewing on a monitor, approximately 2.5\\*y (`-s auto`). The plot will be rendered in the `gray` color scheme.\n![Example 1a](https://github.com/iannesbitt/readgssi/raw/master/examples/1a.png)\n\n#### example 1B: with gain\n```bash\nreadgssi -i DZT__001.DZT -o 1b.png -p 5 -s auto -g 50 -r 0\n```\nThis will cause `readgssi` to create a plot from the same file, but matplotlib will save the plot as \"1b.png\" (`-o 1b.png`). The script will plot the y-axis size (`-p 5`) and automatically stack the x-axis to (`-s auto`). The script will plot the data with a gain value of 50 (`-g 50`), which will increase the plot contrast by a factor of 50. Next `readgssi` will run the background removal (`-r 0`) filter.\n![Example 1b](https://github.com/iannesbitt/readgssi/raw/master/examples/1b.png)\n\n#### example 1C: the right gain settings can be slightly different depending on your colormap\n```bash\nreadgssi -i DZT__001.DZT -o 1c.png -p 5 -s auto -r 0 -g 20 -c seismic\n```\nHere, a horizontal background removal is applied, but gain is turned down (`-g 20`). The script uses matplotlib's \"seismic\" colormap (`-c seismic`) which is specifically designed for this type of waterfall array plotting. Even without gain, you will often be able to easily see very slight signal perturbations. Given its use of red, however, it is not terribly colorblind-friendly for either of the two most common types of human colorblindness, which is why it is not used as the default colormap.\n![Example 1c](https://github.com/iannesbitt/readgssi/raw/master/examples/1c.png)\n\n#### example 2A: no background removal\n```bash\nreadgssi -i DZT__002.DZT -o 2a.png -p 5 -s 5 -n -m\n```\nSometimes, files will look \"washed out\" due to a skew relative to the mean of the data. This is easily correctable. Here `readgssi` will create a plot of size 5 and stack 5x (`-p 5 -s 5`). Matplotlib will use the default \"gray\" colormap and save a PNG of the figure, but the script will suppress the matplotlib window (using the `-n` flag, useful for processing an entire directory full of DZTs at once). Finally, the `-m` flag will draw a histogram for each data channel. Note how the histogram changes when filters are applied.\n![Example 2a](https://github.com/iannesbitt/readgssi/raw/master/examples/2a.png)\n![Example 2a histogram](https://github.com/iannesbitt/readgssi/raw/master/examples/2a-h.png)\n\n#### example 2B: horizontal mean BGR algorithm applied\nThe flag to get rid of the skew (or any horizontally uniform noise) is `-r`, also known as background removal or BGR for short. `-r` has two modes, one set by `-r 0` and one set when the option after the `-r` flag is greater than zero. When this BGR option is zero, the program simply subtracts the average of each profile row from the array. When it's greater than 0, `readgssi` will implement a moving window mean, the size of which is set in **post-stack** traces (see [example 2C](#example-2c-moving-window-horizontal-mean)).\n\nThe command below does the same thing as [example 2A](#example-2a-no-background-removal), except `-r 0` applies full width horizontal mean background removal to the profile. Note the difference in ringing artifacts and skew between examples 2a and 2b.\n```bash\nreadgssi -i DZT__002.DZT -o 2b.png -p 5 -s 5 -n -m -r 0\n```\n![Example 2b](https://github.com/iannesbitt/readgssi/raw/master/examples/2b.png)\n![Example 2b histogram](https://github.com/iannesbitt/readgssi/raw/master/examples/2b-h.png)\n\n#### example 2C: moving window horizontal mean\n\n```bash\nreadgssi -i DZT__002.DZT -o 2c.png -p 5 -s 5 -n -m -r 75 -g 8\n```\nSame as above but with a 75-trace wide moving window mean (`-r 75`). This width represents post-stack traces. This is, for all intents and purposes, the same as RADAN's \"BOXCAR\" method of horizontal noise removal, but much, much faster. Areas beyond the left and right edges are treated as zeros. Notice that the noise in the water column is nearly entirely wiped out, but real data is extended with lateral wisps the size of half of the window, which is a side-effect of this method. Note that the histogram (`-m`) has a fairly even distribution around the mean, which generally indicates that the image should be fairly readable.\n\n![Example 2c](https://github.com/iannesbitt/readgssi/raw/master/examples/2c.png)\n![Example 2c histogram](https://github.com/iannesbitt/readgssi/raw/master/examples/2c-h.png)\n\n#### example 3A: (without) distance normalization\nThe default behavior of `readgssi` is to plot the X-axis in survey time units (seconds). This can be changed using the `-x` flag. To display in distance units, you must either have GPS information in DZG format, or specify the number of radar traces per meter using the `-d` flag. `-d 24 -x meters` will change the traces per meter value in the header to 24.0 and display the profile with distance in meters along the X-axis.\n\nFiles with GPS information are handled in a slightly different way. First, `readgssi` will read a DZG file to create an array of distance information associated with marks in the DZT. *(NOTE: If your project was recorded without DZG files but you have per-line GPS mark information in GPX format, please look at [gpx2dzg](https://github.com/iannesbitt/gpx2dzg) for a method of creating a DZG file for each survey line)* After reading the DZG, the program will expand or contract the GPR array based on the speed over ground between GPS points. It will then modify the traces per meter value from the header and display the profile with distance on the X-axis.\n\nHere a file is processed and displayed without distance normalization:\n```bash\nreadgssi -i DZT__003.DZT -o 3a.png -p 10 -s 5 -r 0 -g 50\n```\n![Example 3a](https://github.com/iannesbitt/readgssi/raw/master/examples/3a.png)\n\n#### example 3B: distance normalization using a DZG file\n\nTo use DZG GPS information to distance normalize the profile and display in meters traveled, use the `-N` and `-x meters` flags. `readgssi` will normalize the file in chunks to reduce memory usage. Here is the same file with distance normalization applied:\n\n```bash\nreadgssi -i DZT__003.DZT -o 3b.png -p 10 -s 5 -r 0 -g 50 -N -x meters\n```\n![Example 3b](https://github.com/iannesbitt/readgssi/raw/master/examples/3b.png)\n\n## advanced usage\n\nUNIX users have a distinct advantage of being able to easily process entire folders full of DZTs with a simple command. Users who wish to do this should [read up](https://linuxize.com/post/bash-for-loop/) on how to construct `for` loops in Bash or simply follow and modify these examples below.\n\n### processing all files in a folder\n\nThis command makes use of the `ls` function in Bash, which lists all files that match a specific pattern. In this case, we want the pattern to be \"any DZT file,\" which ends up being simply `ls *.DZT` (the `*` symbol is a wildcard, meaning it matches any set of characters, so in this case it would match both `FILE____005.DZT` and `test.DZT` but not `Test01.dzt` because the `.DZT` is case sensitive.).\n\n```bash\nfor f in `ls *.DZT`; do readgssi -p 8 -n -r 0 -g 40 -Z 233 -z ns -N -x m -s auto -i $f; done\n```\n\nThe structure of this command is easy to understand if you know a little bit about `for` loops. This command loops over every file with the extension `.DZT` (`ls *.DZT` where `*` indicates a wildcard) and assigns the filename to the `f` variable on each loop. Then, after the semicolon, bash runs readgssi for every pass of the loop. In this case, the parameters are:\n\n```bash\n-p 8 # plot with size 8\n-n # suppress the matplotlib window; useful if you do not want the operation interrupted\n-r 0 # full-width background removal\n-g 40 # gain of 40\n-Z 233 # time zero at 233 samples\n-z ns # display the depth axis in nanoseconds\n-N # distance-normalize the profile\n-x m # display the x-axis in meters\n-s auto # apply automatic stacking\n-i $f # recall the `f` variable containing this loop's filename and feed it to the input flag of readgssi\n```\n\nFinally, end the loop by closing the command with a linebreak `;`, and the `done` marker.\n\n### processing specific sets of files\nYou can make the command even more specific by further modifying the set of files returned by the `ls` command. For example:\n\n```bash\nfor f in `ls FILE__{010..025}.DZT`; do readgssi -p 8 -n -r 0 -g 40 -Z 233 -z ns -N -x m -s auto -i $f; done\n```\n\nThis command will process only the 16 files in the numeric sequence between and including `010` and `025` in the set (`FILE__010.DZT`, `FILE__011.DZT`, `...`, `FILE__025.DZT`). `bash` handles the zero padding for you as well. Pretty cool. \n\n\n## contributors\n- Ian Nesbitt ([@iannesbitt](https://github.com/iannesbitt), author)\n- Fran\u00e7ois-Xavier Simon ([@fxsimon](https://github.com/fxsimon))\n- Thomas Paulin ([@thomaspaulin](https://github.com/thomaspaulin))\n\n### citation suggestion:\nIan M. Nesbitt, Fran\u00e7ois-Xavier Simon, Thomas Paulin, 2018. readgssi - an open-source tool to read and plot GSSI ground-penetrating radar data. [doi:10.5281/zenodo.1439119](https://dx.doi.org/10.5281/zenodo.1439119)\n\n#### known bugs:\n- scipy 1.2.x causes errors when filtering. use scipy 1.3.0 to avoid.\n- color bar shows up too large on some plots (matplotlib bug)\n- short lines have axis limits that end up tall and narrow, which may cut off titles (plot sizing information may need to be calculated differently)\n\n## future\n- explicit documentation\n- automatic script testing for smoother dev\n- create a class for surveyline objects, similar to [`obspy.core.trace.Trace`](https://docs.obspy.org/packages/autogen/obspy.core.trace.Trace.html)\n- GPS transcription from CSV with fields like `mark name, lon, lat, elev, time`\n- Use GPS altitude to adjust z position across profile\n- GUI-based geologic/dielectric layer picking\n - layer velocity calculation (using minimum of clustered hyperbola tail angle measurements, or manual input)\n - velocity-based depth adjustments\n - ability to incorporate ground truth measurements\n- velocity gradient/angle of incidence-based array migration\n- translation to common geophysical formats (HDF5, SEGY, etc.)\n- integration with [`vista`](https://docs.pyvista.org) for 3D visualization of location-aware arrays\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://readgssi.readthedocs.org/", "keywords": "", "license": "AGPL", "maintainer": "", "maintainer_email": "", "name": "readgssi", "package_url": "https://pypi.org/project/readgssi/", "platform": "", "project_url": "https://pypi.org/project/readgssi/", "project_urls": { "Homepage": "https://readgssi.readthedocs.org/" }, "release_url": "https://pypi.org/project/readgssi/0.0.16/", "requires_dist": [ "obspy", "numpy", "scipy", "geopy", "matplotlib", "pandas", "h5py", "pynmea2", "pytz" ], "requires_python": "", "summary": "Python tool to read and plot Geophysical Survey Systems Incorporated (GSSI) radar data in DZT format", "version": "0.0.16" }, "last_serial": 5591451, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "1b58731777476b59b13a07816ef7f87e", "sha256": "3c1c308367731fdadb334b95259bb7568cd640872d55664e3831bf459b08f799" }, "downloads": -1, "filename": "readgssi-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "1b58731777476b59b13a07816ef7f87e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 41334, "upload_time": "2019-02-15T01:07:29", "url": "https://files.pythonhosted.org/packages/fe/87/4de8ef4bbc5fa8692127373a6cea75bd332cfcdf752e7abd970df41690b7/readgssi-0.0.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6bfba3b0b71befbde4362856c7c90f87", "sha256": "be17fcd5c72f832320f9343c648cdc36f573d5ff67cd67e8c5544c2948edf207" }, "downloads": -1, "filename": "readgssi-0.0.10.tar.gz", "has_sig": false, "md5_digest": "6bfba3b0b71befbde4362856c7c90f87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27235, "upload_time": "2019-02-15T01:07:31", "url": "https://files.pythonhosted.org/packages/16/5b/b6c94b7f2385130f450da90fb37233aab7df99e53582ab33ad0fb47d72fb/readgssi-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "4bfe56468f1de2c127cf85e5f463a789", "sha256": "da4032ae440cc8781dc14c4a625f87c96ebe6b15c04cfd249267d4a021b7cc5c" }, "downloads": -1, "filename": "readgssi-0.0.11-py3-none-any.whl", "has_sig": false, "md5_digest": "4bfe56468f1de2c127cf85e5f463a789", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 41313, "upload_time": "2019-05-05T03:24:57", "url": "https://files.pythonhosted.org/packages/52/0f/ca926e3a069b22330ee71f8afbd28d0315196d64473c1c9afc8ff8a7df50/readgssi-0.0.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "699556bd750de53646d7061617a45953", "sha256": "e6e400bf668a658d86bc4308b2097d0dc8ef4025843410c6a8e823727530a476" }, "downloads": -1, "filename": "readgssi-0.0.11.tar.gz", "has_sig": false, "md5_digest": "699556bd750de53646d7061617a45953", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29020, "upload_time": "2019-05-05T03:24:58", "url": "https://files.pythonhosted.org/packages/50/00/364addc199b68438bd9c8fddc55a2cb9c39db3dc1a2006d7719dbe90b7d6/readgssi-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "4471581dd1751e62511915f93f98e027", "sha256": "b8b9df6ca816dfaeb0becfac8c3cfcff8885e2a3cc7d8ff87470a337a1619b09" }, "downloads": -1, "filename": "readgssi-0.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "4471581dd1751e62511915f93f98e027", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42043, "upload_time": "2019-06-20T05:08:42", "url": "https://files.pythonhosted.org/packages/e5/95/6de5baa49042899e1c763be4b2d655006d8e6e967207f9f1cfcd5a78ba78/readgssi-0.0.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "81fe36fd144c1f7f01e5bec8a4369bc1", "sha256": "773372110333b47d819f99900b6d44c94eb029d3ba1c30f8002431bbd70762be" }, "downloads": -1, "filename": "readgssi-0.0.12.tar.gz", "has_sig": false, "md5_digest": "81fe36fd144c1f7f01e5bec8a4369bc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26366, "upload_time": "2019-06-20T05:08:43", "url": "https://files.pythonhosted.org/packages/ee/83/c06b96c7ad34e956286563173d83170ef19ab14e5ab491c92808af656aac/readgssi-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "e50e573fc5b8c73adab18a71ee4bf673", "sha256": "8b0a6401264f66523a2e10110a0cc2ce1eab1edb528a00e50c3d030eab30d4a0" }, "downloads": -1, "filename": "readgssi-0.0.13-py3-none-any.whl", "has_sig": false, "md5_digest": "e50e573fc5b8c73adab18a71ee4bf673", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42250, "upload_time": "2019-06-29T02:56:09", "url": "https://files.pythonhosted.org/packages/7c/33/3958678831e5e9e76ee198c65bc4b0f8f3b4fee460f4aa235548659db9d2/readgssi-0.0.13-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b5a8431d1b1f1850057e2a0cb7b0a299", "sha256": "742289fe9e2a05ec0084de59c7f00794063b2e70e25f0d2f67b4e796ba8449ca" }, "downloads": -1, "filename": "readgssi-0.0.13.tar.gz", "has_sig": false, "md5_digest": "b5a8431d1b1f1850057e2a0cb7b0a299", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30178, "upload_time": "2019-06-29T02:56:11", "url": "https://files.pythonhosted.org/packages/73/b9/47441aabfb9dd4c96057472479da98c5b2299477ff7c3063377fc4d8a4ea/readgssi-0.0.13.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "93a81e1790f05c66737299fe21c7b4a3", "sha256": "7c40a70116799961b1f4e01452a9d0ba5f66bdd44f037adeff87cf33cf878d0f" }, "downloads": -1, "filename": "readgssi-0.0.14-py3-none-any.whl", "has_sig": false, "md5_digest": "93a81e1790f05c66737299fe21c7b4a3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 43015, "upload_time": "2019-07-03T21:50:49", "url": "https://files.pythonhosted.org/packages/62/fd/de11ff4ca1ef34e8fc082b300eb2a95d434d35399bad7bf7ed8e7f5d1bd0/readgssi-0.0.14-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "98e596b235052179acb838f579cc32e4", "sha256": "7dbc8811958ff857ad1fee10962f4f54a6d6f8d3af46951874308b627206ae22" }, "downloads": -1, "filename": "readgssi-0.0.14.tar.gz", "has_sig": false, "md5_digest": "98e596b235052179acb838f579cc32e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28472, "upload_time": "2019-07-03T21:50:51", "url": "https://files.pythonhosted.org/packages/02/b1/1cc6f24ff17f090630996d0c90b300aae0dfd2201aa1fdde840f915adf79/readgssi-0.0.14.tar.gz" } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "2b11121e7c5c9a5453bdc8c22fb7c1b6", "sha256": "67922f20af5b81fa477c26d33c9b635dd6a9041e7bf9138fe7d4c197013569d3" }, "downloads": -1, "filename": "readgssi-0.0.15-py3-none-any.whl", "has_sig": false, "md5_digest": "2b11121e7c5c9a5453bdc8c22fb7c1b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 46597, "upload_time": "2019-07-10T17:46:49", "url": "https://files.pythonhosted.org/packages/f8/27/4d6967d9f9d803a25f6880009d0e3220f925217646704eb4302bcbf14c39/readgssi-0.0.15-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38f95c10d2e44294592738194894c16c", "sha256": "d0936a64071a4eeced2cfcbfbd89e64abd41e901e60fcc5ddd8eccad51f217d5" }, "downloads": -1, "filename": "readgssi-0.0.15.tar.gz", "has_sig": false, "md5_digest": "38f95c10d2e44294592738194894c16c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36660, "upload_time": "2019-07-10T17:46:51", "url": "https://files.pythonhosted.org/packages/b2/79/29ff612ea7e534afe7117564f746d9ff86da716ad77fb3f7a1c942f3b53a/readgssi-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "4d945e3bdf7466d52f4d6cc47eebebac", "sha256": "7b6c5feb7efbaf1abda5cc413c21269113410ed16e9042087e7be81e743645ab" }, "downloads": -1, "filename": "readgssi-0.0.16-py3-none-any.whl", "has_sig": false, "md5_digest": "4d945e3bdf7466d52f4d6cc47eebebac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54726, "upload_time": "2019-07-27T01:43:01", "url": "https://files.pythonhosted.org/packages/ec/4c/4b1da0163ea8e0ae1a690c1ffaf0e8b87dd451da83b34e745372ee32d161/readgssi-0.0.16-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a6ecf9ec273799a47e02674475a0153", "sha256": "02275157ced5b460282e9e00db9f80c670abc75a3bcff32dc465a9fb4abf0efc" }, "downloads": -1, "filename": "readgssi-0.0.16.tar.gz", "has_sig": false, "md5_digest": "7a6ecf9ec273799a47e02674475a0153", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43316, "upload_time": "2019-07-27T01:43:03", "url": "https://files.pythonhosted.org/packages/34/8c/87d380f5152e1435624a4698d84f4d56f4082bedfec9eec814da7f3db25e/readgssi-0.0.16.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "caa458f2e76efa7af53b9c2ff2b7ada7", "sha256": "3bcbafdbc29ed5923127019d4e687548b82e649f4a97fa5a6d93ddf4cb5c9923" }, "downloads": -1, "filename": "readgssi-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "caa458f2e76efa7af53b9c2ff2b7ada7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31631, "upload_time": "2019-01-22T21:39:51", "url": "https://files.pythonhosted.org/packages/6b/fb/9f63c40cfd08ae9cdaccb39b1f972325fe9583a4cf32a9af19d7558e223d/readgssi-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "481c4c9360d7f620d0bbf961ea292743", "sha256": "b054c558768193270bc2d9bdd6693d03a8e258495cda25d6132aa6982f97f216" }, "downloads": -1, "filename": "readgssi-0.0.7.tar.gz", "has_sig": false, "md5_digest": "481c4c9360d7f620d0bbf961ea292743", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18824, "upload_time": "2019-01-22T21:39:53", "url": "https://files.pythonhosted.org/packages/7a/12/5a95d1a33b1e6de3394f4f537c740853efa6aa83685e2dfad1b9b6dac3e8/readgssi-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "9121cd1fc00dfcc1e4006a9357b1b903", "sha256": "9d5b673b9e47449efda765aca45afef6dc180ba6f55c7a113edc3d852ffa08cc" }, "downloads": -1, "filename": "readgssi-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "9121cd1fc00dfcc1e4006a9357b1b903", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33624, "upload_time": "2019-01-28T15:54:29", "url": "https://files.pythonhosted.org/packages/46/21/63c9e7077d0700f94e3a9b91d427ba1331b9e56868c3ce0a14c3d86aeb9c/readgssi-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ceef83eb34f24ccfda1c407a7d3e5e4b", "sha256": "6d87bb27062f01dce6eb5f2c0b30b917d9a333ff3ec7210dedb047c7e75bc04e" }, "downloads": -1, "filename": "readgssi-0.0.8.tar.gz", "has_sig": false, "md5_digest": "ceef83eb34f24ccfda1c407a7d3e5e4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20631, "upload_time": "2019-01-28T15:54:30", "url": "https://files.pythonhosted.org/packages/4a/80/bb3f1ce2d4bc8a570980ef83123da0acad9d07bb0b68f57b6c506684e112/readgssi-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "0001d2204e61730bb959ba3c1551218d", "sha256": "cf4fe002c1256af6637e2a50bcde4b9d15c101f2ec4fc78513d38129fe3dd3f8" }, "downloads": -1, "filename": "readgssi-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "0001d2204e61730bb959ba3c1551218d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36917, "upload_time": "2019-01-29T03:25:16", "url": "https://files.pythonhosted.org/packages/c5/1b/53ef85867494f913d40befe26610a20da24cbd5ec754ec5fc79f5aa1bd10/readgssi-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c7583d6d74950673ee9d7b5232b6dd42", "sha256": "f180d61ac1ca3cd93fa3b8d5a02f3a8603b1919142f10bbc8f0d913167808c64" }, "downloads": -1, "filename": "readgssi-0.0.9.tar.gz", "has_sig": false, "md5_digest": "c7583d6d74950673ee9d7b5232b6dd42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23557, "upload_time": "2019-01-29T03:25:18", "url": "https://files.pythonhosted.org/packages/11/83/2379b6185d48d9b65e1638c449d6c817721f011112c255d38795a0908ad4/readgssi-0.0.9.tar.gz" } ], "0.0.9.post1": [ { "comment_text": "", "digests": { "md5": "b90d0ef0f9001311356b3641efa9048b", "sha256": "32ebd2a145ca36d3df1bbe88b7bdf0e910014e96581ba4c7e16900aae6096938" }, "downloads": -1, "filename": "readgssi-0.0.9.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "b90d0ef0f9001311356b3641efa9048b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37030, "upload_time": "2019-01-29T04:41:01", "url": "https://files.pythonhosted.org/packages/82/52/fe0ff990c364ff6af07513b8ad5c1c71f6492ec92aa676184103f7f7a302/readgssi-0.0.9.post1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19f33c019d06ea70d0355d60300ab4d2", "sha256": "8feed9d8cf902ca81342a12400e7030dd6b79c2de78c573835317afed725dd90" }, "downloads": -1, "filename": "readgssi-0.0.9.post1.tar.gz", "has_sig": false, "md5_digest": "19f33c019d06ea70d0355d60300ab4d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23632, "upload_time": "2019-01-29T04:41:02", "url": "https://files.pythonhosted.org/packages/7e/d3/1fd09c2bbc575af506f3e4fb1b165a64aa53e15009515b5ccefed79f92dc/readgssi-0.0.9.post1.tar.gz" } ], "0.0.9.post2": [ { "comment_text": "", "digests": { "md5": "4c13f91a56fc80697de6e33506895d62", "sha256": "46172da6f3f4eb69e28b070c2948c0be95d60fe44af988bb0803a253fdeceaef" }, "downloads": -1, "filename": "readgssi-0.0.9.post2-py3-none-any.whl", "has_sig": false, "md5_digest": "4c13f91a56fc80697de6e33506895d62", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37494, "upload_time": "2019-01-30T02:13:10", "url": "https://files.pythonhosted.org/packages/d6/ea/61ceb4a57f107ac5be0b4a4758ac0a8b331a04c2d8661e1b30207e37589f/readgssi-0.0.9.post2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a270d2d37f9e5eac0d3a0f73d2f979e", "sha256": "4bb96f4a0ec0825cb69dbbc522e1384c8abccde5987d74ffa66b446afd9bfdbe" }, "downloads": -1, "filename": "readgssi-0.0.9.post2.tar.gz", "has_sig": false, "md5_digest": "6a270d2d37f9e5eac0d3a0f73d2f979e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27202, "upload_time": "2019-01-30T02:13:11", "url": "https://files.pythonhosted.org/packages/96/6c/086a2d0bb8ce2694ddd07e27d9ecf8ff42af98ada87b722a810d61606395/readgssi-0.0.9.post2.tar.gz" } ], "0.0.9.post3": [ { "comment_text": "", "digests": { "md5": "3021c1e29de4c5a85a17bbb6a8da405c", "sha256": "d21a8813a63f47b2875e35ca11d8c736f839f4dafe9352072faf360960005188" }, "downloads": -1, "filename": "readgssi-0.0.9.post3-py3-none-any.whl", "has_sig": false, "md5_digest": "3021c1e29de4c5a85a17bbb6a8da405c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40601, "upload_time": "2019-02-14T01:58:25", "url": "https://files.pythonhosted.org/packages/a8/d8/81ed31182c6e5d5de178c90f97f771ac60a826c0791f6b64b912ce587f1b/readgssi-0.0.9.post3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d9d5d668c162c9601771b6ea940e9aa6", "sha256": "062e84fb21369587240632b07ed793134777f6150b16c879d0c5598b88e8ebff" }, "downloads": -1, "filename": "readgssi-0.0.9.post3.tar.gz", "has_sig": false, "md5_digest": "d9d5d668c162c9601771b6ea940e9aa6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26460, "upload_time": "2019-02-14T01:58:26", "url": "https://files.pythonhosted.org/packages/17/d2/886378be3bf1e7dfcaea280d60a7507c4a734e8f6e60b2aa2ffe298cb9b6/readgssi-0.0.9.post3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4d945e3bdf7466d52f4d6cc47eebebac", "sha256": "7b6c5feb7efbaf1abda5cc413c21269113410ed16e9042087e7be81e743645ab" }, "downloads": -1, "filename": "readgssi-0.0.16-py3-none-any.whl", "has_sig": false, "md5_digest": "4d945e3bdf7466d52f4d6cc47eebebac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54726, "upload_time": "2019-07-27T01:43:01", "url": "https://files.pythonhosted.org/packages/ec/4c/4b1da0163ea8e0ae1a690c1ffaf0e8b87dd451da83b34e745372ee32d161/readgssi-0.0.16-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a6ecf9ec273799a47e02674475a0153", "sha256": "02275157ced5b460282e9e00db9f80c670abc75a3bcff32dc465a9fb4abf0efc" }, "downloads": -1, "filename": "readgssi-0.0.16.tar.gz", "has_sig": false, "md5_digest": "7a6ecf9ec273799a47e02674475a0153", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43316, "upload_time": "2019-07-27T01:43:03", "url": "https://files.pythonhosted.org/packages/34/8c/87d380f5152e1435624a4698d84f4d56f4082bedfec9eec814da7f3db25e/readgssi-0.0.16.tar.gz" } ] }