{
"info": {
"author": "Gideon Mueller",
"author_email": "g.mueller@fz-juelich.de",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 4 - Beta",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: C",
"Programming Language :: C++",
"Programming Language :: Python",
"Topic :: Scientific/Engineering",
"Topic :: Software Development :: Libraries :: Python Modules"
],
"description": "OVF Parser Library\n=================================\n**Simple API for powerful OOMMF Vector Field file parsing** \n\n[OVF format specification](#specification)\n\n[](https://travis-ci.org/spirit-code/ovf)\n[](https://ci.appveyor.com/project/GPMueller/ovf)\n\n**[Python package](https://pypi.org/project/ovf/):** [](https://badge.fury.io/py/ovf)\n\n| Library Coverage | Python Bindings Coverage |\n| :--------------: | :----------------------: |\n| [](https://codecov.io/gh/spirit-code/ovf/branch/master) | [](https://coveralls.io/github/spirit-code/ovf?branch=master)|\n\nHow to use\n---------------------------------\n\nFor usage examples, take a look into the test folders: [test](https://github.com/spirit-code/ovf/tree/master/test), [python/test](https://github.com/spirit-code/ovf/tree/master/python/test) or [fortran/test](https://github.com/spirit-code/ovf/tree/master/fortran/test).\n\nExcept for opening a file or initializing a segment, all functions return status codes\n(generally `OVF_OK`, `OVF_INVALID` or `OVF_ERROR`).\nWhen the return code is not `OVF_OK`, you can take a look into the latest message,\nwhich should tell you what the problem was\n(`const char * ovf_latest_message(struct ovf_file *)` in the C API).\n\nIn C/C++ and Fortran, before writing a segment, make sure the `ovf_segment` you pass in is\ninitialized, i.e. you already called either `ovf_read_segment_header` or `ovf_segment_create`.\n\n### C/C++\n\nOpening and closing:\n\n- `struct ovf_file *myfile = ovf_open(\"myfilename.ovf\")` to open a file\n- `myfile->found` to check if the file exists on disk\n- `myfile->is_ovf` to check if the file contains an OVF header\n- `myfile->n_segments` to check the number of segments the file should contain\n- `ovf_close(myfile);` to close the file and free resources\n\nReading from a file:\n\n- `struct ovf_segment *segment = ovf_segment_create()` to initialize a new segment and get the pointer\n- `ovf_read_segment_header(myfile, index, segment)` to read the header into the segment struct\n- create float data array of appropriate size...\n- `ovf_read_segment_data_4(myfile, index, segment, data)` to read the segment data into your float array\n- setting `segment->N` before reading allows partial reading of large data segments\n\nWriting and appending to a file:\n\n- `struct ovf_segment *segment = ovf_segment_create()` to initialize a new segment and get the pointer\n- `segment->n_cells[0] = ...` etc to set data dimensions, title and description, etc.\n- `ovf_write_segment_4(myfile, segment, data, OVF_FORMAT_TEXT)` to write a file containing the segment header and data\n- `ovf_append_segment_4(myfile, segment, data, OVF_FORMAT_TEXT)` to append the segment header and data to the file\n\n### Python\n\nTo install the *ovf python package*, either build and install from source\nor simply use\n\n pip install ovf\n\nTo use `ovf` from Python, e.g.\n\n```Python\nfrom ovf import ovf\nimport numpy as np\n\ndata = np.zeros((2, 2, 1, 3), dtype='f')\ndata[0,1,0,:] = [3.0, 2.0, 1.0]\n\nwith ovf.ovf_file(\"out.ovf\") as ovf_file:\n\n # Write one segment\n segment = ovf.ovf_segment(n_cells=[2,2,1])\n if ovf_file.write_segment(segment, data) != -1:\n print(\"write_segment failed: \", ovf_file.get_latest_message())\n\n # Add a second segment to the same file\n data[0,1,0,:] = [4.0, 5.0, 6.0]\n if ovf_file.append_segment(segment, data) != -1:\n print(\"append_segment failed: \", ovf_file.get_latest_message())\n```\n\n### Fortran\n\nThe Fortran bindings are written in object-oriented style for ease of use.\nWriting a file, for example:\n\n```fortran\ntype(ovf_file) :: file\ntype(ovf_segment) :: segment\ninteger :: success\nreal(kind=4), allocatable :: array_4(:,:)\nreal(kind=8), allocatable :: array_8(:,:)\n\n! Initialize segment\ncall segment%initialize()\n\n! Write a file\ncall file%open_file(\"fortran/test/testfile_f.ovf\")\nsegment%N_Cells = [ 2, 2, 1 ]\nsegment%N = product(segment%N_Cells)\n\nallocate( array_4(3, segment%N) )\narray_4 = 0\narray_4(:,1) = [ 6.0, 7.0, 8.0 ]\narray_4(:,2) = [ 5.0, 4.0, 3.0 ]\n\nsuccess = file%write_segment(segment, array_4, OVF_FORMAT_TEXT)\nif ( success == OVF_OK) then\n write (*,*) \"test write_segment succeeded.\"\n ! write (*,*) \"n_cells = \", segment%N_Cells\n ! write (*,*) \"n_total = \", segment%N\nelse\n write (*,*) \"test write_segment did not work. Message: \", file%latest_message\n STOP 1\nendif\n```\n\nFor more information on how to generate modern Fortran bindings,\nsee also https://github.com/MRedies/Interfacing-Fortran\n\n\nHow to embed it into your project\n---------------------------------\n\nIf you are using CMake, it is as simple as cloning this into a subdirectory,\ne.g. `thirdparty/ovf` and using it with `add_subdirectory`:\n\n```\nadd_subdirectory( ${PROJECT_SOURCE_DIR}/thirdparty/ovf )\nset( OVF_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/thirdparty/ovf/include )\ntarget_include_directories( myproject PRIVATE ${OVF_INCLUDE_DIRS} )\ntarget_link_libraries( myproject PUBLIC ${OVF_LIBRARIES_STATIC} )\n```\n\nIf you're not using CMake, you may need to put in some manual work.\n\n\nBuild\n---------------------------------\n\n### On Unix systems\n\nUsually:\n```\nmkdir build\ncd build\ncmake ..\nmake\n```\n\n### On Windows\n\nOne possibility:\n- open the folder in the CMake GUI\n- generate the VS project\n- open the resulting project in VS and build it\n\n### CMake Options\n\nThe following options are `ON` by default.\nIf you want to switch them off, just pass `-D=OFF` to CMake,\ne.g. `-DOVF_BUILD_FORTRAN_BINDINGS=OFF`.\n\n- `OVF_BUILD_PYTHON_BINDINGS`\n- `OVF_BUILD_FORTRAN_BINDINGS`\n- `OVF_BUILD_TEST`\n\nOn Windows, you can also set these from the CMake GUI.\n\n### Create and install the Python package\n\nInstead of `pip`-installing it, you can e.g. build everything\nand then install the package locally, where the `-e` flag will\nlet you change/update the package without having to re-install it.\n\n```\ncd python\npip install -e .\n```\n\n### Build without CMake\n\nThe following is an example of how to manually build the C library and\nlink it with bindings into a corresponding Fortran executable, using gcc.\n\nC library:\n```\ng++ -DFMT_HEADER_ONLY -Iinclude -fPIC -std=c++11 -c src/ovf.cpp -o ovf.cpp.o\n\n# static\nar qc libovf_static.a ovf.cpp.o\nranlib libovf_static.a\n\n# shared\ng++ -fPIC -shared -lc++ ovf.cpp.o -o libovf_shared.so\n```\n\nC/C++ test executable:\n```\ng++ -Iinclude -Itest -std=c++11 -c test/main.cpp -o main.cpp.o\ng++ -Iinclude -Itest -std=c++11 -c test/simple.cpp -o simple.cpp.o\n\n# link static lib\ng++ -lc++ libovf_static.a main.cpp.o simple.cpp.o -o test_cpp_simple\n\n# link shared lib\ng++ libovf_shared.so main.cpp.o simple.cpp.o -o test_cpp_simple\n```\n\nFortran library:\n```\ngfortran -fPIC -c fortran/ovf.f90 -o ovf.f90.o\n\nar qc libovf_fortran.a libovf_static.a ovf.f90.o\nranlib libovf_fortran.a\n```\n\nFortran test executable\n```\ngfortran -c fortran/test/simple.f90 -o simple.f90.o\ngfortran -lc++ libovf_fortran.a simple.f90.o -o test_fortran_simple\n```\n\nWhen linking statically, you can also link the object file `ovf.cpp.o` instead of `libovf_static.a`.\n\n*Note: depending on compiler and/or system, you may need `-lstdc++` instead of `-lc++`.*\n\n\n\nFile format v2.0 specification \n=================================\n\nThis specification is written according to the\n[NIST user guide for OOMMF](https://math.nist.gov/oommf/doc/userguide20a0/userguide/OVF_2.0_format.html)\nand has been implemented, but not tested or verified against OOMMF.\n\n*Note: The OVF 2.0 format is a modification to the OVF 1.0 format that also supports fields across three spatial dimensions but having values of arbitrary (but fixed) dimension. The following is a full specification of the 2.0 format.*\n\n\nGeneral\n---------------------------------\n\n- An OVF file has an ASCII header and trailer, and data blocks that may be either ASCII or binary.\n- All non-data lines begin with a `#` character\n- Comments start with `##` and are ignored by the parser. A comment continues until the end of the line.\n- There is no line continuation character\n- Lines starting with a `#` but containing only whitespace are ignored\n- Lines starting with a `#` but containing an unknown keyword are are an error\n\nAfter an overall header, the file consists of segment blocks, each composed of a segment header, data block and trailer.\n\n- The field domain (i.e., the spatial extent) lies across three dimensions, with units typically expressed in meters or nanometers\n- The field can be of any arbitrary dimension `N > 0` (This dimension, however, is fixed within each segment).\n\n\nHeader\n---------------------------------\n\n- The first line of an OVF 2.0 file must be `# OOMMF OVF 2.0`\n- The header should also contain the number of segments, specified as e.g. `# Segment count: 000001`\n- Zero-padding of the segment count is not specified\n\n\nSegments\n---------------------------------\n\n**Segment Header**\n\n- Each block begins with a `# Begin: ` line, and ends with a corresponding `# End: ` line\n- A non-empty non-comment line consists of a keyword and a value:\n - A keyword consists of all characters after the initial `#` up to the first colon (`:`) character. Case is ignored, and all whitespace is removed\n - Unknown keywords are errors\n - The value consists of all characters after the first colon (`:`) up to a comment (`##`) or line ending\n- The order of keywords is not specified\n- None of the keywords have default values, so all are required unless stated otherwise\n\nEverything inside the `Header` block should be either comments or one of the following file keyword lines\n- `title`: long file name or title\n- `desc` (optional): description line, use as many as desired\n- `meshunit`: fundamental mesh spatial unit. The comment marker `##` is not allowed in this line. Example value: `nm`\n- `valueunits`: should be a (Tcl) list of value units. The comment marker `##` is not allowed in this line. Example value: `\"kA/m\"`. The length of the list should be one of\n - `N`: each element denotes the units for the corresponding dimension index\n - `1`: the single element is applied to all dimension indexes\n- `valuelabels`: This should be a `N`-item (Tcl) list of value labels, one for each value dimension. The labels identify the quantity in each dimension. For example, in an energy density file, `N` would be `1`, valueunits could be `\"J/m3\"`, and valuelabels might be `\"Exchange energy density\"`\n- `valuedim` (integer): specifies an integer value, `N`, which is the dimensionality of the field. `N >= 1`\n- `xmin`, `ymin`, `zmin`, `xmax`, `ymax`, `zmax`: six separate lines, specifying the bounding box for the mesh, in units of `meshunit`\n- `meshtype`: grid structure; one of\n - `rectangular`: Requires also\n - `xbase`, `ybase`, `zbase`: three separate lines, denoting the origin (i.e. the position of the first point in the data section), in units of `meshunit`\n - `xstepsize`, `ystepsize`, `zstepsize`: three separate lines, specifying the distance between adjacent grid points, in units of `meshunit`\n - `xnodes`, `ynodes`, `znodes` (integers): three separate lines, specifying the number of nodes along each axis.\n - `irregular`: Requires also\n - `pointcount` (integer): number of data sample points/locations, i.e., nodes. For irregular grids only\n\n\n**Segment Data**\n\n- The data block start is marked by a line of the form `# Begin: data ` (and therefore closed by `# End: data `), where `` is one of\n - `text`\n - `binary 4`\n - `binary 8`\n- In the Data block, for regular meshes each record consists of `N` values, where `N` is the value dimension as specified by the `valuedim` record in the Segment Header. For irregular meshes, each record consists of `N + 3` values, where the first three values are the x , y and z components of the node position.\n- It is common convention for the `text` data to be in `N` columns, separated by whitespace\n- Data ordering is generally with the x index incremented first, then the y index, and the z index last\n\nFor binary data:\n- The binary representations are IEEE 754 standardized floating point numbers in little endian (LSB) order. To ensure that the byte order is correct, and to provide a partial check that the file hasn't been sent through a non 8-bit clean channel, the first data value is fixed to `1234567.0` for 4-byte mode, corresponding to the LSB hex byte sequence `38 B4 96 49`, and `123456789012345.0` for 8-byte mode, corresponding to the LSB hex byte sequence `40 DE 77 83 21 12 DC 42`\n- The data immediately follows the check value\n- The first character after the last data value should be a newline\n\n\nExtensions made by this library\n---------------------------------\n\nThese extensions are mainly to help with data for atomistic systems.\n\n- The segment count is padded to 6 digits with zeros (this is so that segments can be appended and the count incremented without having to re-write the entire file)\n- Lines starting with a `#` but containing an unknown keyword are ignored.\n- `##` is always a comment and is allowed in all keyword lines, including `meshunit` and `valueunits`\n- All keywords have default values, so none are required\n- `csv` is also a valid ASCII data representation and corresponds to comma-separated columns of `text` type\n\n\nCurrent limitations of this library\n---------------------------------\n\n- naming of variables in structs/classes is inconsistent with the file format specifications\n- not all defaults in the segment are guaranteed to be sensible\n- `valueunits` and `valuelabels` are written and parsed, but not checked for dimensionality or content in either\n- `min` and `max` values are not checked to make sure they are sensible bounds\n- `irregular` mesh type is not supported properly, as positions are not accounted for in read or write\n\n\nExample\n---------------------------------\n\nAn example OVF 2.0 file for an irregular mesh with N = 2:\n\n```\n# OOMMF OVF 2.0\n#\n# Segment count: 1\n#\n# Begin: Segment\n# Begin: Header\n#\n# Title: Long file name or title goes here\n#\n# Desc: Optional description line 1.\n# Desc: Optional description line 2.\n# Desc: ...\n#\n## Fundamental mesh measurement unit. Treated as a label:\n# meshunit: nm\n#\n# meshtype: irregular\n# pointcount: 5 ## Number of nodes in mesh\n#\n# xmin: 0. ## Corner points defining mesh bounding box in\n# ymin: 0. ## 'meshunit'. Floating point values.\n# zmin: 0.\n# xmax: 10.\n# ymax: 5.\n# zmax: 1.\n#\n# valuedim: 2 ## Value dimension\n#\n## Fundamental field value units, treated as labels (i.e., unparsed).\n## In general, there should be one label for each value dimension.\n# valueunits: J/m^3 A/m\n# valuelabels: \"Zeeman energy density\" \"Anisotropy field\"\n#\n# End: Header\n#\n## Each data records consists of N+3 values: the (x,y,z) node\n## location, followed by the N value components. In this example,\n## N+3 = 5, the two value components are in units of J/m^3 and A/m,\n## corresponding to Zeeman energy density and a magneto-crystalline\n## anisotropy field, respectively.\n#\n# Begin: data text\n0.5 0.5 0.5 500. 4e4\n9.5 0.5 0.5 300. 5e3\n0.5 4.5 0.5 400. 4e4\n9.5 4.5 0.5 200. 5e3\n5.0 2.5 0.5 350. 2.1e4\n# End: data text\n# End: segment\n```\n\nComparison to OVF 1.0\n---------------------------------\n\n- The first line reads `# OOMMF OVF 2.0` for both regular and irregular meshes. \n- In the segment header block\n - the keywords `valuemultiplier`, `boundary`, `ValueRangeMaxMag` and `ValueRangeMinMag` of the OVF 1.0 format are not supported.\n - the new keyword `valuedim` is required. This must specify an integer value, `N`, bigger or equal to one.\n - the new `valueunits` keyword replaces the `valueunit` keyword of OVF 1.0, which is not allowed in OVF 2.0 files.\n - the new `valuelabels` keyword is required.\n- In the segment data block\n - The node ordering is the same as for the OVF 1.0 format.\n - For data blocks using text representation with `N = 3`, the data block in OVF 1.0 and OVF 2.0 files are exactly the same. Another common case is `N = 1`, which represents scalar fields, such as energy density (in say, `J/m3` )\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://github.com/spirit-code/ovf",
"keywords": "OVF,parser",
"license": "MIT",
"maintainer": "Gideon Mueller",
"maintainer_email": "g.mueller@fz-juelich.de",
"name": "ovf",
"package_url": "https://pypi.org/project/ovf/",
"platform": "",
"project_url": "https://pypi.org/project/ovf/",
"project_urls": {
"Homepage": "https://github.com/spirit-code/ovf"
},
"release_url": "https://pypi.org/project/ovf/0.4.3/",
"requires_dist": [
"numpy"
],
"requires_python": "",
"summary": "OVF file parser",
"version": "0.4.3"
},
"last_serial": 5946598,
"releases": {
"0.1.0": [
{
"comment_text": "",
"digests": {
"md5": "1c770fdc53ace3bd51413a1d9af2f9cd",
"sha256": "d0d8d1466e9eb21f9df12fc86ec45e9be5a2477931c6c6713ef92393c682aa18"
},
"downloads": -1,
"filename": "ovf-0.1.0-py2.py3-none-macosx_10_11_x86_64.whl",
"has_sig": false,
"md5_digest": "1c770fdc53ace3bd51413a1d9af2f9cd",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 104243,
"upload_time": "2018-06-22T10:31:25",
"url": "https://files.pythonhosted.org/packages/2d/4f/ef9f4b98ba995734269e5c4365128bc6095c2e6add857e02b8b30ee2fdd7/ovf-0.1.0-py2.py3-none-macosx_10_11_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d017c7423fde0b9f536d32e9e71c423a",
"sha256": "05fdaa08baed0ea1c5b1f11606f73d957d17021aaec49b4fdb8b45713bc3d2ee"
},
"downloads": -1,
"filename": "ovf-0.1.0-py2.py3-none-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "d017c7423fde0b9f536d32e9e71c423a",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 96573,
"upload_time": "2018-06-22T10:30:42",
"url": "https://files.pythonhosted.org/packages/05/7d/439336b91cf833835f27173390f5a77c88ee2c8fe5791274152da9d6899f/ovf-0.1.0-py2.py3-none-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "5a691aafaebbca77fc7c23f792d3502b",
"sha256": "bd111bc9e1d9cf4e8a816518a4b1e95485c0a15854bf87f4f95e6e610badc460"
},
"downloads": -1,
"filename": "ovf-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "5a691aafaebbca77fc7c23f792d3502b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 95239,
"upload_time": "2018-06-22T10:30:43",
"url": "https://files.pythonhosted.org/packages/3c/c5/9b73ded87c34754e1e99e7f593dc07d783dadcbc2ffd01cbf0b94b62faef/ovf-0.1.0.tar.gz"
}
],
"0.2.0": [
{
"comment_text": "",
"digests": {
"md5": "bc6d181f191381e0c0620e13cc4d6eb5",
"sha256": "a42fde76fa0e4a0af90a017e8fa202ef7c242d2c46b78d0b5b01c271e4468c13"
},
"downloads": -1,
"filename": "ovf-0.2.0-py2.py3-none-macosx_10_11_x86_64.whl",
"has_sig": false,
"md5_digest": "bc6d181f191381e0c0620e13cc4d6eb5",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 124375,
"upload_time": "2018-07-03T20:49:20",
"url": "https://files.pythonhosted.org/packages/3e/4c/be36eac3cc9351b02a5d3ee85d01315d797b8582e668a225bc23af6a7313/ovf-0.2.0-py2.py3-none-macosx_10_11_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "e5c2bf070fb181c7dc7dcf8a874b807d",
"sha256": "e0ca94a141c3c1a2c92504e96e8688f57e63071893c02a67a2abd03fe34fe27c"
},
"downloads": -1,
"filename": "ovf-0.2.0-py2.py3-none-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "e5c2bf070fb181c7dc7dcf8a874b807d",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 107751,
"upload_time": "2018-07-03T20:50:24",
"url": "https://files.pythonhosted.org/packages/d5/26/505cdf9e9a32d89cd4378053180170fbbe9b92a5cefacc3f586fbe1d4ddb/ovf-0.2.0-py2.py3-none-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d85446f830f8500ad00a0dbe8eb85098",
"sha256": "bbc40db5bce02072cf8bdf30d1006989ff841938f03ae84a7f33c7035509e13d"
},
"downloads": -1,
"filename": "ovf-0.2.0-py2.py3-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "d85446f830f8500ad00a0dbe8eb85098",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 5392,
"upload_time": "2018-07-03T21:01:04",
"url": "https://files.pythonhosted.org/packages/1f/5e/f7b164584be86abc1ea9351706520849febd24e759ac135f388b2f81352b/ovf-0.2.0-py2.py3-none-win_amd64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "6aca32d2c0d0d3cb9f4b2db1b77f0e43",
"sha256": "7dab8349580c70c56bf73f65377892f4cad7736531c731ebd7e5597773a08589"
},
"downloads": -1,
"filename": "ovf-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "6aca32d2c0d0d3cb9f4b2db1b77f0e43",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 121826,
"upload_time": "2018-07-03T20:49:22",
"url": "https://files.pythonhosted.org/packages/8a/b6/ea70db5bc3c9f2ae47fd8c437f4ba239b870874e7c04f996c8976397d8c7/ovf-0.2.0.tar.gz"
}
],
"0.3.0": [
{
"comment_text": "",
"digests": {
"md5": "23cabe196bc8d29db0ca844ec31fddd3",
"sha256": "efa8eb1b47bdbbf58d4a42de0c181075d23a7c39b08bcfbc8ed2fbf5fbe12e56"
},
"downloads": -1,
"filename": "ovf-0.3.0-py2.py3-none-macosx_10_11_x86_64.whl",
"has_sig": false,
"md5_digest": "23cabe196bc8d29db0ca844ec31fddd3",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 150278,
"upload_time": "2018-10-30T10:45:48",
"url": "https://files.pythonhosted.org/packages/03/fa/9ab500b000f02ef9a313aba20e21fe6ca1c3b7281a3ba78f8081025a9122/ovf-0.3.0-py2.py3-none-macosx_10_11_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "eaf9093e91dc16afd0772a98a6065264",
"sha256": "028992ae1078f605cae48c8f75d7e4b10023ea25b432725dbf4d7e743b0fee06"
},
"downloads": -1,
"filename": "ovf-0.3.0-py2.py3-none-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "eaf9093e91dc16afd0772a98a6065264",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 159245,
"upload_time": "2018-10-30T10:44:31",
"url": "https://files.pythonhosted.org/packages/ba/d7/4c49bb3486849c827266e40261e1c701f810887aab553d05326d83b0113d/ovf-0.3.0-py2.py3-none-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "00b01b9052bffa741968703077f7f992",
"sha256": "852f406035a03c85edec0c3c5b8e348d326df9381151a9457cdef2036a23fd63"
},
"downloads": -1,
"filename": "ovf-0.3.0-py2.py3-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "00b01b9052bffa741968703077f7f992",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 9059,
"upload_time": "2018-10-30T10:53:39",
"url": "https://files.pythonhosted.org/packages/04/7b/e8d0a422069d0b7c4a35a437613dff15327040a6b576b4ebf6a2cbdd0474/ovf-0.3.0-py2.py3-none-win_amd64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "739f630d3ac678a45cc04848186d905f",
"sha256": "a71581e4f7dd652414cb41661b15e34cbbfad01c9818c5bf99f8ae67a8067f0a"
},
"downloads": -1,
"filename": "ovf-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "739f630d3ac678a45cc04848186d905f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 152836,
"upload_time": "2018-10-30T10:44:32",
"url": "https://files.pythonhosted.org/packages/3d/e1/afb819dc016500f89d89cc79af01a9c517699f373e5369a17c7fcd51171e/ovf-0.3.0.tar.gz"
}
],
"0.4.0": [
{
"comment_text": "",
"digests": {
"md5": "3c638060a201af548b238d62d382bed7",
"sha256": "9540362c535ea3a404607927bc3a9ca9df697f20e5ba5646ba226c316b0f80ab"
},
"downloads": -1,
"filename": "ovf-0.4.0-py2.py3-none-macosx_10_11_x86_64.whl",
"has_sig": false,
"md5_digest": "3c638060a201af548b238d62d382bed7",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 233480,
"upload_time": "2019-02-20T10:17:42",
"url": "https://files.pythonhosted.org/packages/e3/55/ec59af511cd2de4f51944930dccc5e56c8f8171c65d2cf4fca54f1c4bed6/ovf-0.4.0-py2.py3-none-macosx_10_11_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "9377b1271d5c7b544058f32381dd4222",
"sha256": "3806d253d8acf5affa5f9292a1bb9adbfc9db06a0bc008844d692b3f2691d534"
},
"downloads": -1,
"filename": "ovf-0.4.0-py2.py3-none-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "9377b1271d5c7b544058f32381dd4222",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 403794,
"upload_time": "2019-02-20T10:19:48",
"url": "https://files.pythonhosted.org/packages/3f/91/24942bd5781a96a7d97fb91cadea9114aa4bc84bf5b772a568ff6773980d/ovf-0.4.0-py2.py3-none-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "5513e66a9b1b508387f66837b4d49fa2",
"sha256": "5ac3c3538d8b9b74cd91fda4c42793f85b6659ec6eed28ec9820f16118410767"
},
"downloads": -1,
"filename": "ovf-0.4.0-py2.py3-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "5513e66a9b1b508387f66837b4d49fa2",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 10306,
"upload_time": "2019-02-20T10:37:05",
"url": "https://files.pythonhosted.org/packages/43/4b/add2e5dec4348f0f0c7702d2d2d6c395ff88836ded1a304cd79d0e780147/ovf-0.4.0-py2.py3-none-win_amd64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "94d7868659c497ce56269a0058a57edf",
"sha256": "193649bbf505299e39db05dd712f90030816973b51c6d83091522b33b9654c8c"
},
"downloads": -1,
"filename": "ovf-0.4.0.tar.gz",
"has_sig": false,
"md5_digest": "94d7868659c497ce56269a0058a57edf",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 224738,
"upload_time": "2019-02-20T10:17:44",
"url": "https://files.pythonhosted.org/packages/27/f4/3eb64d2842d43579f01436c33b27145dba6252c35cd808df3b3ef625825c/ovf-0.4.0.tar.gz"
}
],
"0.4.1": [
{
"comment_text": "",
"digests": {
"md5": "d29c4a7bdb01077eef93f6c0afc8a394",
"sha256": "e2c01e250cc82beb9d6a8e37594c46b174bda8a00e87f8a7d9b09f9ff502ab20"
},
"downloads": -1,
"filename": "ovf-0.4.1-py2.py3-none-macosx_10_11_x86_64.whl",
"has_sig": false,
"md5_digest": "d29c4a7bdb01077eef93f6c0afc8a394",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 233558,
"upload_time": "2019-02-20T13:11:15",
"url": "https://files.pythonhosted.org/packages/85/d6/865846fce57622d810db986f7da81f5ddc4d1e19c3e4380cebe3563a7605/ovf-0.4.1-py2.py3-none-macosx_10_11_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "a7bc5096098f3919be49affa5701f2d5",
"sha256": "087b44ec7e42d10fd1e4470670b2981e2ebf253c821e39ce76e769e281c5b0d6"
},
"downloads": -1,
"filename": "ovf-0.4.1-py2.py3-none-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "a7bc5096098f3919be49affa5701f2d5",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 403771,
"upload_time": "2019-02-20T13:10:49",
"url": "https://files.pythonhosted.org/packages/c3/21/dfdf52becb002144b6073466a835f786d27d69121a3118ff5d16b71c6b52/ovf-0.4.1-py2.py3-none-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "32222e3f22bfb7fb29cf8df2cb83bae5",
"sha256": "906c0fd15a17aab06ac306ae9fdadcc8b71debbcaf14e884e6e9c3c8aaa00726"
},
"downloads": -1,
"filename": "ovf-0.4.1-py2.py3-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "32222e3f22bfb7fb29cf8df2cb83bae5",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 10346,
"upload_time": "2019-02-20T13:20:13",
"url": "https://files.pythonhosted.org/packages/65/34/4d03396b49d920e9efb8cb43a4e241641b681df37666c4468df0a1a0349f/ovf-0.4.1-py2.py3-none-win_amd64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "891f997e5364f6621adcadacabde09ab",
"sha256": "7c581f7ca3748bff8d0fa1863bf1cc9c6d029c2b1f06506abeab687b9c3810e0"
},
"downloads": -1,
"filename": "ovf-0.4.1.tar.gz",
"has_sig": false,
"md5_digest": "891f997e5364f6621adcadacabde09ab",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 404672,
"upload_time": "2019-02-20T13:10:51",
"url": "https://files.pythonhosted.org/packages/51/9b/fb06b3e3654071b971d912fde3ebde73a9f68ddaafd4d08f42fba00de764/ovf-0.4.1.tar.gz"
}
],
"0.4.2": [
{
"comment_text": "",
"digests": {
"md5": "8f7745141891c63cc13c988eafdf84e3",
"sha256": "77cbf0e82253c8aeb260835e5240dedf43c7c7c0dd022b9272391bd7b42ed4df"
},
"downloads": -1,
"filename": "ovf-0.4.2-py2.py3-none-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "8f7745141891c63cc13c988eafdf84e3",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 434389,
"upload_time": "2019-10-08T16:38:32",
"url": "https://files.pythonhosted.org/packages/3b/23/ebf62f99098454a18c00c7cf0c377db98cb259b2b24e4b329e4edb1aaac9/ovf-0.4.2-py2.py3-none-macosx_10_13_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "94c2709b3af8a2cb2b53a7c54d618703",
"sha256": "9db2781ae3a13edb8f71c2cb52290bfdd11d17655765ee7af3d9fa795cffcbac"
},
"downloads": -1,
"filename": "ovf-0.4.2-py2.py3-none-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "94c2709b3af8a2cb2b53a7c54d618703",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 505572,
"upload_time": "2019-10-08T16:27:39",
"url": "https://files.pythonhosted.org/packages/7a/cd/ee9f2e6e9c80006ca3baf5f78e21a27f680f9904c7f8f56955be8c6d5275/ovf-0.4.2-py2.py3-none-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8c2a5db7e98aecd552b01e7244849f20",
"sha256": "4b9852db1d00597130de7517c822d4f9014383a812565df5c512b8839758c0d3"
},
"downloads": -1,
"filename": "ovf-0.4.2-py2.py3-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "8c2a5db7e98aecd552b01e7244849f20",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 10622,
"upload_time": "2019-10-08T16:39:23",
"url": "https://files.pythonhosted.org/packages/96/00/cb99a3f6c7033b7402bb89a0f1954969d45c54893448fa0f6e8ec2aa7cf0/ovf-0.4.2-py2.py3-none-win_amd64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "2085d464e1b85eeb924b3c3e495a3578",
"sha256": "9819702712fb3ce34292877f30ac50109b700a2f378081e397846b9256ddcf40"
},
"downloads": -1,
"filename": "ovf-0.4.2.tar.gz",
"has_sig": false,
"md5_digest": "2085d464e1b85eeb924b3c3e495a3578",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 492525,
"upload_time": "2019-10-08T16:27:41",
"url": "https://files.pythonhosted.org/packages/9e/70/9bccbc7d77f40849ae3d059b9064402733347784c737b34817e3a051a1e0/ovf-0.4.2.tar.gz"
}
],
"0.4.3": [
{
"comment_text": "",
"digests": {
"md5": "ef145c6a70c676cccb0130b91b23a3d5",
"sha256": "2836e23fb8324638427ae53934d0936179c0887915db43644ca09d66175253dc"
},
"downloads": -1,
"filename": "ovf-0.4.3-py2.py3-none-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "ef145c6a70c676cccb0130b91b23a3d5",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 434485,
"upload_time": "2019-10-08T20:45:49",
"url": "https://files.pythonhosted.org/packages/31/60/dc473b8b90df370d72341b0625c7872ccce2d3c1df8ba9d9f60b707b8dec/ovf-0.4.3-py2.py3-none-macosx_10_13_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "2084a4a91a6dd8477145c1b8ace0a35a",
"sha256": "92a8b5aa49b74938e5c5444995a2eb8639471a12b933b417f796962b787dd0b5"
},
"downloads": -1,
"filename": "ovf-0.4.3-py2.py3-none-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "2084a4a91a6dd8477145c1b8ace0a35a",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 505668,
"upload_time": "2019-10-08T20:26:31",
"url": "https://files.pythonhosted.org/packages/a2/06/39beb617afe0dae1321db59b294ffc6f4ed4b8ad5e1d98c8b442b29e5159/ovf-0.4.3-py2.py3-none-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "0a650eb811245b90149d728468274a7c",
"sha256": "2e1880561283bc8c6c32279899ce3a965019342a8ea72ad4cf4748e1ae9f6805"
},
"downloads": -1,
"filename": "ovf-0.4.3.tar.gz",
"has_sig": false,
"md5_digest": "0a650eb811245b90149d728468274a7c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 492671,
"upload_time": "2019-10-08T20:26:33",
"url": "https://files.pythonhosted.org/packages/ca/90/e429f3150d4c6ff5ddc3e0e81f35a6939346ec8782b025b132c22301cc8a/ovf-0.4.3.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "ef145c6a70c676cccb0130b91b23a3d5",
"sha256": "2836e23fb8324638427ae53934d0936179c0887915db43644ca09d66175253dc"
},
"downloads": -1,
"filename": "ovf-0.4.3-py2.py3-none-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "ef145c6a70c676cccb0130b91b23a3d5",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 434485,
"upload_time": "2019-10-08T20:45:49",
"url": "https://files.pythonhosted.org/packages/31/60/dc473b8b90df370d72341b0625c7872ccce2d3c1df8ba9d9f60b707b8dec/ovf-0.4.3-py2.py3-none-macosx_10_13_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "2084a4a91a6dd8477145c1b8ace0a35a",
"sha256": "92a8b5aa49b74938e5c5444995a2eb8639471a12b933b417f796962b787dd0b5"
},
"downloads": -1,
"filename": "ovf-0.4.3-py2.py3-none-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "2084a4a91a6dd8477145c1b8ace0a35a",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 505668,
"upload_time": "2019-10-08T20:26:31",
"url": "https://files.pythonhosted.org/packages/a2/06/39beb617afe0dae1321db59b294ffc6f4ed4b8ad5e1d98c8b442b29e5159/ovf-0.4.3-py2.py3-none-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "0a650eb811245b90149d728468274a7c",
"sha256": "2e1880561283bc8c6c32279899ce3a965019342a8ea72ad4cf4748e1ae9f6805"
},
"downloads": -1,
"filename": "ovf-0.4.3.tar.gz",
"has_sig": false,
"md5_digest": "0a650eb811245b90149d728468274a7c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 492671,
"upload_time": "2019-10-08T20:26:33",
"url": "https://files.pythonhosted.org/packages/ca/90/e429f3150d4c6ff5ddc3e0e81f35a6939346ec8782b025b132c22301cc8a/ovf-0.4.3.tar.gz"
}
]
}