Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

replace netCDF4 with scipy.io.netcdf for the Amber NCDFReader and NCDFWriter #506

Closed
orbeckst opened this issue Oct 22, 2015 · 30 comments · Fixed by #503
Closed

replace netCDF4 with scipy.io.netcdf for the Amber NCDFReader and NCDFWriter #506

orbeckst opened this issue Oct 22, 2015 · 30 comments · Fixed by #503

Comments

@orbeckst
Copy link
Member

As discussed in #488, it is possible to read Amber netcdf trajectories with the scipy.io.netcdf reader. According to @swails and others, reading performance is better with the scipy reader. Additionally, the scipy implementation is pure python (based on pupynere) and does not require installation of the netcdf libraries.

@orbeckst and @tylerjereddy make PR #503 available, in which netCDF4 was replaced with scipy.io.netcdf. The question is: Should we replace netCDF4 with scipy.io.netcdf?

Content of PR #503

The PR #503 replaces netCDF4 with scipy.io.netcdf and also bundles scipy netcdf.py in order to fall back to it if scipy is not available. This makes MDAnalysis netcdf file handling fully self-contained.

Performance issues

Preliminary benchmarking shows that reading is faster with scipy.netcdf than with netcdf (~5x) but writing is much slower (and the slowdown becomes worse for longer trajectories, which seems to be due to the underlying implementation in scipy.netcdf).

The main question is if we want to trade read speed against write speed (with the possibility that it becomes infeasible to write long trajectories).

Points that were considered

  • We do not install scipy as part of the installation (although we list it as an optional dependency for analysis – and gridDataFormats also wants it); it is likely that anyone installing MDAnalysis will also install scipy.
  • scipy.io.netcdf does not read netcdf4 files; Amber files are netcdf3 so that's not a problem but should we ever want to read version 4, we would need to switch again
  • reading performance of Amber trajectories with scipy.io.netcdf is reportedly better than netCDF4 but we need to do our own benchmarks (both for reading and writing, and with mmap=True and mmap=False, see next point)
    • The library uses mmap=True by default.
    • Possibly dependence on Linux vs Mac OS X — needs to be checked.
  • By default, the scipy netcdf_file uses mmap() so the trajectory has to remain open while arrays are accessed. This might make it more difficult to implement e.g. File descriptors that are opened and closed as needed for Universes #239 (and might confuse users). Using mmap=False could be an option if performance is not degraded (but need to check).
  • As a fall back, we could bundle a copy of the scipy netcdf.py file with MDAnalysis and load it if scipy is not available.
    • This is implemented.
  • The netCDF4 API differs from the scipy.io.netcdf API (which implements the Scientific.IO.NetCDF API) so maintaining both libraries is cumbersome (but possible).
    • We could add netCDF4 back as an optional dependency; the code would be ugly (because of the two slightly different interfaces). But then we could switch to netcdf4 for writing if available.
    • It would, however, be better to solve the writing performance issues (if they are genuine) upstream in scipy or pupynere.

History

  • updated 2016-02-26: summary of current state
@swails
Copy link

swails commented Oct 22, 2015

FWIW, I originally had an implementation of NetCDF readers and writers that was backend-agnostic (supporting scipy, netCDF4, and ScientificPython). The main annoyance there was actually in Python 3, where some packages returned str and others bytes for the string attributes.

I have since ripped out that code and replaced it with the scipy backend (and I pulled out netcdf.py and included it directly in my package). But the git history contains the (unit-tested) code that read and wrote both NetCDF trajectories and restarts from Amber: https://github.com/ParmEd/ParmEd/blob/2.0.5/parmed/amber/netcdffiles.py

@orbeckst
Copy link
Member Author

@tylerjereddy do you have a little bit of time to benchmark the implementation in PR #503 so that we have a better idea of the real read/write performance? (– I just can't do it at the moment.) It is unlikely that the timings from the test suite are a good measure. Perhaps take the longest/biggest Amber trajectory that we have as a testfile and just time a couple of read/writes.

@orbeckst
Copy link
Member Author

@swails thanks for the pointer; my feeling is that simplicity would be better than supporting multiple libraries. The main decision would be if to bundle netcdf.py or to require scipy.io.netcdf. In the case of Bio.KDTree we decided against bundling #383 in order to reduce our maintenance burden. In any case, we first have to decide if we are going to ditch netCDF4.

@tylerjereddy
Copy link
Member

I have performed some initial benchmarks (summarized in plot below). As I have never used AMBER it is probably sensible for at least one other person to check my benchmark code, with the Jupyter notebook displayed in the github repo here: https://github.com/tylerjereddy/netcdf_bench/blob/master/netcdf_bench_MDA.ipynb

You should be able to clone the test files I used as well, but do exercise caution with kernel restarts when building different versions of MDA (mentioned in the notebook as well).

Also, does it make sense for MDAnalysis to write a larger .ncdf file compared to the test input? For example, using the test code in the above notebook -- bala.ncdf is 938K and the output dummy.ncdf is 1.8M.

summary

@hainm
Copy link
Contributor

hainm commented Nov 2, 2015

@tylerjereddy

can you annotate those lines? which belongs to which (scipy or netCDF)

In [8]:
#MDA develop branch WRITE testing (commit hash: aac24f9)
%timeit -n 10 -r 5 test_write_ncdf()
10 loops, best of 5: 75 ms per loop
In [4]:
#MDA scipy-ncdf-debug branch WRITE testing (commit hash: 565aa0)
%timeit -n 10 -r 5 test_write_ncdf()
10 loops, best of 5: 173 ms per loop

@richardjgowers
Copy link
Member

Afaik the file sizes should be identical, which might explain (some of) the difference in speed you're seeing. The filesize looks roughly double, so it could be either

  • writing float64s and not float32s?
  • writing coordinates twice?
  • writing an empty velocities field?

@kain88-de
Copy link
Member

ncdump should give you some hints about what is going on.

@tylerjereddy
Copy link
Member

Ok, I'll chip away at these things and update the benchmark post above as I go along. I also need to remove universe object generation from test_write_ncdf() because that conflates reading and writing of .ncdf files.

@tylerjereddy
Copy link
Member

I've updated the plot above with the revised writing benchmarks.

I can confirm that MDAnalysis is writing .ncdf files with double type for coordinates and time values, while the input .ncdf uses float for both of those. The remaining data types seem to be preserved between input and output. Assuming my separate builds were properly picked up in IPython, I can also confirm that this happens for both netCDF4 and scipy backends. Is this a separate issue? I don't use AMBER but I assume enough people do that this should have been obvious by now?

Also, if @orbeckst wants benchmarks with mmap=True and mmap=False, I assume this will require adjusting the source code a bit as well, to allow that keyword specification, or to at least manually place it in the back end for the benchmarks.

However, I think it is sensible to make sure the writer is behaving properly before investing any more time into refining the benchmarks.

@orbeckst
Copy link
Member Author

orbeckst commented Nov 3, 2015

@tylerjereddy raise an issue for the format mix-up. I haven't heard any complaints but we should stay as close to the standards as possible.

Eventually I'd like to see the effect of mmap.

@orbeckst
Copy link
Member Author

@tylerjereddy are we getting any closer to deciding what we want to do? It would be good to figure out for 0.13.0 which way to go. With the benchmarks so far #506 (comment) , we would seem to be sacrificing speed for ease of installation but perhaps these results were confounded by #518?

@hainm
Copy link
Contributor

hainm commented Nov 18, 2015

may be profiling speed (%prun in ipython) and memory (%memit from memory_profiler in ipython) to see what really happened here?

@tylerjereddy
Copy link
Member

@orbeckst It would be sensible to repeat the benchmarks now that the netCDF writer actually works properly. We also wanted to expand the benchmarks to include mmap stuff. If I am moving too slowly with this anyone is free to re-assign to themselves, and I was careful to keep the benchmarking code open (see above) so that it can be modified, etc.

@richardjgowers
Copy link
Member

So I played around with some benchmarks, I made a 1001 frame trajectory from another format. Reading this (%timeit [ts._pos[0] for ts in u.trajectory]) get

  • netcdf 599 ms
  • scipy 115 ms

So I'm seeing the 5-6x speedup that was previously mentioned in #488

For writing, I see that scipy is slower than netcdf, 1-2 minutes for scipy and 30secs for netcdf. But I'd say that reading is more important than writing.

I think all our slower benchmarks have come from devs using OSX(?) and I'm using Ubuntu. So it might be that the scipy implementation is a little gimped on OSX?

@hainm
Copy link
Contributor

hainm commented Nov 23, 2015

For writing, I see that scipy is slower than netcdf, 1-2 minutes for scipy and 30secs for netcdf.

if this happens, just use two back-ends (same api) for read (scipy) and write (netcdf)? :))

@hainm
Copy link
Contributor

hainm commented Nov 23, 2015

ah, just FYI that if using mmap=False, netcdf_file will load all data to memory.

mmap=False

Filename: ./memory/netcdf_file_scipy.py

Line #    Mem usage    Increment   Line Contents
================================================
     9     45.6 MiB      0.0 MiB   @profile
    10                             def load_(filename=filename):
    11   3384.6 MiB   3339.0 MiB       with netcdf_file(filename, mmap=False) as fh:
    12   3384.6 MiB      0.0 MiB           c= fh.variables['coordinates']

mmap=True

Filename: ./memory/netcdf_file_scipy.py

Line #    Mem usage    Increment   Line Contents
================================================
     9     45.6 MiB      0.0 MiB   @profile
    10                             def load_(filename=filename):
    11     81.2 MiB     35.6 MiB       with netcdf_file(filename, mmap=True) as fh:
    12     81.2 MiB      0.0 MiB           c= fh.variables['coordinates']

@orbeckst
Copy link
Member Author

@richardjgowers, did you do your tests with mmap=True or False? If we use scipy then we should make mmap=True the default and perhaps add the option for the adventurous (and well endowed with RAM) user. (Thanks @hainm for the memprofile.)

@hainm, we'd like to get rid of dependencies ;-) --- so supporting two different ncdf backends is not very attractive.

@tylerjereddy
Copy link
Member

@richardjgowers Yeah, the early stage benchmarks I did were on Mac OS X.

@hainm
Copy link
Contributor

hainm commented Nov 24, 2015

@hainm, we'd like to get rid of dependencies ;-) --- so supporting two different ncdf backends is not very attractive.

@orbeckst totally agree. (that's why our pytraj/cpptraj depend on only numpy (actually I can remove numpy depedent but numpy is popular, so ...))

orbeckst added a commit that referenced this issue Dec 1, 2015
- API is different (less feature rich in the pure python
  implementation) so it is not straightforward to support
  both netCDF4 and fall back on scipy.io.netcdf (or perhaps
  even pupyere, which is a single-file package from which the
  scipy code originated)
- uses float32 for
  - positions
  - velocities
  - forces
  (port of resolution of issue #518)
- change NCDFReader, NCDFWriter and test_netcdf
- see discussion of issue #506 for performance benchmarks
@orbeckst
Copy link
Member Author

orbeckst commented May 5, 2016

Just as a note to ourselves: This issue is stalled because the writing performance of the pure-python (scipy) implementation is awful. Most of the discussion is in the PR #503 but has also been noted at ParmEd/ParmEd#619.

A potential solution (short of an upstream fix... one can hope) is to use scipy (or the bundled netcdf) for reading, use netcdf for writing if available and fall back to the crappy scipy ncdf writer if nothing faster is available. (see #503 (comment))

@swails
Copy link

swails commented May 5, 2016

ParmEd did at one point have support for the 3 most popular NetCDF libraries (scipy, ScientificPython, and netCDF4). The APIs were all quite similar. It won't be hard to add it back (once I find the time).

I'll write back here when I do that in case it's any use to MDAnalysis.

@swails
Copy link

swails commented Jun 10, 2016

As a ParmEd update here -- I finally got around to optionally optimizing NetCDF writing with netCDF4 while still using scipy's implementation for reading (and writing when netCDF4 is not available). It was remarkably easy to do that: ParmEd/ParmEd#722 shows everything I had to do.

Here's another argument in favor of using this solution: Many Amber users will probably have a hard time getting netCDF4 to work. This is what happens to me when I try:

$ python -c "import netCDF4"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/scratch2/miniconda/envs/py35/lib/python3.5/site-packages/netCDF4/__init__.py", line 3, in <module>
    from ._netCDF4 import *
ImportError: /scratch2/miniconda/envs/py35/lib/python3.5/site-packages/netCDF4/_netCDF4.cpython-35m-x86_64-linux-gnu.so: undefined symbol: nc_inq_var_fletcher32

The reason for this (which I figured out via ldd) is that Amber builds its own NetCDF library that it now inserts into LD_LIBRARY_PATH without the NetCDF4 API and HDF5 bindings. Since the conda version was built against the full NetCDF package, the one ld tries to link to at runtime (because Amber requires LD_LIBRARY_PATH) is missing some symbols. Removing Amber from my environment fixes the import.

But many users will have neither the patience or expertise to hunt that problem down and figure out how to fix it. If scipy's NetCDF module is available (which doesn't link against NetCDF libraries and so will never have this problem), then that adds convenience to a potentially large section of your user base (basically anyone with Amber installed).

@orbeckst
Copy link
Member Author

@swails thanks so much, ParmEd/ParmEd#722 does not look too awful so I think for the time being we'll do the same.

The Amber LD_LIBRARY_PATH issue is insidious! Thanks for sharing your findings. (Is there any way that Amber will change or consider renaming its own stripped down version in order to avoid something like that?)

@orbeckst orbeckst removed the question label Jun 10, 2016
@hainm
Copy link
Contributor

hainm commented Jun 10, 2016

we'll do the same.

I think do the same is good since MDA is more focusing on data analysis than writing trajectory.

@orbeckst
Copy link
Member Author

On 10 Jun, 2016, at 12:05, Hai Nguyen notifications@github.com wrote:

I think do the same is good since MDA is more focusing on data analysis than writing trajectory.

Yes, default to reading fast with scipy.io.netcdf and writing fast with netCDF4 but fall back to writing slowly with scipy.io.netcdf (and maybe @tylerjreddy can raise an issue with the scipy folks to address the problem upstream).

Oliver Beckstein * orbeckst@gmx.net
skype: orbeckst * orbeckst@gmail.com

@swails
Copy link

swails commented Jun 11, 2016

You could also just cut out netcdf.py and bundle it yourself (I believe @hainm mentioned that once, and that's what I did for ParmEd). It's standalone, so you can always update it later if they fix the performance issues upstream, and it means you get NetCDF trajectory support out-of-the-box (if that's important to you).

OTOH, anybody who's anybody doing data analysis will have scipy installed, so may not be worth it.

@orbeckst
Copy link
Member Author

On 10 Jun, 2016, at 19:53, Jason Swails notifications@github.com wrote:

You could also just cut out netcdf.py and bundle it yourself

In the PR it’s already bundled and used as a fall-back when scipy is not available.

(I believe @hainm mentioned that once, and that's what I did for ParmEd). It's standalone, so you can always update it later if they fix the performance issues upstream, and it means you get NetCDF trajectory support out-of-the-box (if that's important to you).

OTOH, anybody who's anybody doing data analysis will have scipy installed, so may not be worth it.

orbeckst added a commit that referenced this issue Jul 6, 2016
- removed all imports of netCDF4
- API is different (less feature rich in the pure python
  implementation) so it is not straightforward to support
  both netCDF4 and fall back on scipy.io.netcdf (or perhaps
  even pupyere, which is a single-file package from which the
  scipy code originated)
- uses float32 for
  - positions
  - velocities
  - forces
  (port of resolution of issue #518)
- change NCDFReader, NCDFWriter and test_netcdf
- see discussion of issue #506 for performance benchmarks
orbeckst added a commit that referenced this issue Jun 30, 2017
- removed all imports of netCDF4
- API is different (less feature rich in the pure python
  implementation) so it is not straightforward to support
  both netCDF4 and fall back on scipy.io.netcdf (or perhaps
  even pupyere, which is a single-file package from which the
  scipy code originated)
- uses float32 for
  - positions
  - velocities
  - forces
  (port of resolution of issue #518)
- change NCDFReader, NCDFWriter and test_netcdf
- see discussion of issue #506 for performance benchmarks
orbeckst added a commit that referenced this issue Jun 30, 2017
- netcdf reads MUCH faster than netCDF4 but writes MUCH, MUCH
  slower than netCDF4: always read with netcdf but write with
  netCDF4 if available, otherwise use slow netcdf and warn
- implements @swails 's solution from ParmEd/ParmEd#722 -- thank you!!
- minimal testing: write the same trajectory with netcdf and with
  netCDF4
- NOTE: netCDF4 is not installed by default, use
     pip install MDAnalysis[AMBER]
  to request its installation but Amber users should also be aware
  of potential issues with the bundled netcdf library of Amber; see
  #506 (comment)
  for details
- closes #506
orbeckst pushed a commit that referenced this issue Jun 30, 2017
- removed all imports of netCDF4
- API is different (less feature rich in the pure python
  implementation) so it is not straightforward to support
  both netCDF4 and fall back on scipy.io.netcdf (or perhaps
  even pupyere, which is a single-file package from which the
  scipy code originated)
- uses float32 for
  - positions
  - velocities
  - forces
  (port of resolution of issue #518)
- change NCDFReader, NCDFWriter and test_netcdf
- see discussion of issue #506 for performance benchmarks
orbeckst added a commit that referenced this issue Jun 30, 2017
- netcdf reads MUCH faster than netCDF4 but writes MUCH, MUCH
  slower than netCDF4: always read with netcdf but write with
  netCDF4 if available, otherwise use slow netcdf and warn
- implements @swails 's solution from ParmEd/ParmEd#722 -- thank you!!
- minimal testing: write the same trajectory with netcdf and with
  netCDF4
- NOTE: netCDF4 is not installed by default, use
     pip install MDAnalysis[AMBER]
  to request its installation but Amber users should also be aware
  of potential issues with the bundled netcdf library of Amber; see
  #506 (comment)
  for details
- closes #506
orbeckst pushed a commit that referenced this issue Jun 30, 2017
- removed all imports of netCDF4
- API is different (less feature rich in the pure python
  implementation) so it is not straightforward to support
  both netCDF4 and fall back on scipy.io.netcdf (or perhaps
  even pupyere, which is a single-file package from which the
  scipy code originated)
- uses float32 for
  - positions
  - velocities
  - forces
  (port of resolution of issue #518)
- change NCDFReader, NCDFWriter and test_netcdf
- see discussion of issue #506 for performance benchmarks
orbeckst added a commit that referenced this issue Jun 30, 2017
- netcdf reads MUCH faster than netCDF4 but writes MUCH, MUCH
  slower than netCDF4: always read with netcdf but write with
  netCDF4 if available, otherwise use slow netcdf and warn
- implements @swails 's solution from ParmEd/ParmEd#722 -- thank you!!
- minimal testing: write the same trajectory with netcdf and with
  netCDF4
- NOTE: netCDF4 is not installed by default, use
     pip install MDAnalysis[AMBER]
  to request its installation but Amber users should also be aware
  of potential issues with the bundled netcdf library of Amber; see
  #506 (comment)
  for details
- closes #506
orbeckst pushed a commit that referenced this issue Jun 30, 2017
- removed all imports of netCDF4
- API is different (less feature rich in the pure python
  implementation) so it is not straightforward to support
  both netCDF4 and fall back on scipy.io.netcdf (or perhaps
  even pupyere, which is a single-file package from which the
  scipy code originated)
- uses float32 for
  - positions
  - velocities
  - forces
  (port of resolution of issue #518)
- change NCDFReader, NCDFWriter and test_netcdf
- see discussion of issue #506 for performance benchmarks
- fixed skipif in netcdf tests
orbeckst added a commit that referenced this issue Jun 30, 2017
- netcdf reads MUCH faster than netCDF4 but writes MUCH, MUCH
  slower than netCDF4: always read with netcdf but write with
  netCDF4 if available, otherwise use slow netcdf and warn
- implements @swails 's solution from ParmEd/ParmEd#722 -- thank you!!
- minimal testing: write the same trajectory with netcdf and with
  netCDF4
- NOTE: netCDF4 is not installed by default, use the re-introduced
  [AMBER] install target

     pip install MDAnalysis[AMBER]

  to request its installation but Amber users should also be aware
  of potential issues with the bundled netcdf library of Amber; see
  #506 (comment)
  for details
- closes #506
orbeckst pushed a commit that referenced this issue Jun 30, 2017
- removed all imports of netCDF4
- API is different (less feature rich in the pure python
  implementation) so it is not straightforward to support
  both netCDF4 and fall back on scipy.io.netcdf (or perhaps
  even pupyere, which is a single-file package from which the
  scipy code originated)
- uses float32 for
  - positions
  - velocities
  - forces
  (port of resolution of issue #518)
- change NCDFReader, NCDFWriter and test_netcdf
- see discussion of issue #506 for performance benchmarks
- fixed skipif in netcdf tests
orbeckst added a commit that referenced this issue Jun 30, 2017
- netcdf reads MUCH faster than netCDF4 but writes MUCH, MUCH
  slower than netCDF4: always read with netcdf but write with
  netCDF4 if available, otherwise use slow netcdf and warn
- implements @swails 's solution from ParmEd/ParmEd#722 -- thank you!!
- minimal testing: write the same trajectory with netcdf and with
  netCDF4
- NOTE: netCDF4 is not installed by default, use the re-introduced
  [AMBER] install target

     pip install MDAnalysis[AMBER]

  to request its installation but Amber users should also be aware
  of potential issues with the bundled netcdf library of Amber; see
  #506 (comment)
  for details
- closes #506
orbeckst added a commit that referenced this issue Jun 30, 2017
- netcdf reads MUCH faster than netCDF4 but writes MUCH, MUCH
  slower than netCDF4: always read with netcdf but write with
  netCDF4 if available, otherwise use slow netcdf and warn
- implements @swails 's solution from ParmEd/ParmEd#722 -- thank you!!
- minimal testing: write the same trajectory with netcdf and with
  netCDF4
- NOTE: netCDF4 is not installed by default, use the re-introduced
  [AMBER] install target

     pip install MDAnalysis[AMBER]

  to request its installation but Amber users should also be aware
  of potential issues with the bundled netcdf library of Amber; see
  #506 (comment)
  for details
- removed zlib and cmplevel kwargs from NETCDFWriter (only used with netCDF4)
- closes #506
orbeckst added a commit that referenced this issue Jul 1, 2017
- netcdf reads MUCH faster than netCDF4 but writes MUCH, MUCH
  slower than netCDF4: always read with netcdf but write with
  netCDF4 if available, otherwise use slow netcdf and warn
- implements @swails 's solution from ParmEd/ParmEd#722 -- thank you!!
- minimal testing: write the same trajectory with netcdf and with
  netCDF4
- NOTE: netCDF4 is not installed by default, use the re-introduced
  [AMBER] install target

     pip install MDAnalysis[AMBER]

  to request its installation but Amber users should also be aware
  of potential issues with the bundled netcdf library of Amber; see
  #506 (comment)
  for details
- removed zlib and cmplevel kwargs from NETCDFWriter (only used with netCDF4)
- closes #506
orbeckst added a commit that referenced this issue Jul 1, 2017
- netcdf reads MUCH faster than netCDF4 but writes MUCH, MUCH
  slower than netCDF4: always read with netcdf but write with
  netCDF4 if available, otherwise use slow netcdf and warn
- implements @swails 's solution from ParmEd/ParmEd#722 -- thank you!!
- minimal testing: write the same trajectory with netcdf and with
  netCDF4
- NOTE: netCDF4 is not installed by default, use the re-introduced
  [AMBER] install target

     pip install MDAnalysis[AMBER]

  to request its installation but Amber users should also be aware
  of potential issues with the bundled netcdf library of Amber; see
  #506 (comment)
  for details
- removed zlib and cmplevel kwargs from NETCDFWriter (only used with netCDF4)
- closes #506
- updated CHANGELOG (@tylerjereddy and @orbeckst as authors)
orbeckst added a commit that referenced this issue Jul 3, 2017
- netcdf reads MUCH faster than netCDF4 but writes MUCH, MUCH
  slower than netCDF4: always read with netcdf but write with
  netCDF4 if available, otherwise use slow netcdf and warn
- implements @swails 's solution from ParmEd/ParmEd#722 -- thank you!!
- minimal testing: write the same trajectory with netcdf and with
  netCDF4
- NOTE: netCDF4 is not installed by default, use the re-introduced
  [AMBER] install target

     pip install MDAnalysis[AMBER]

  to request its installation but Amber users should also be aware
  of potential issues with the bundled netcdf library of Amber; see
  #506 (comment)
  for details
- removed zlib and cmplevel kwargs from NETCDFWriter (only used with netCDF4)
- closes #506
- updated CHANGELOG (@tylerjereddy and @orbeckst as authors)
orbeckst added a commit that referenced this issue Jul 3, 2017
- closes #506
- netcdf reads MUCH faster than netCDF4 but writes MUCH, MUCH
  slower than netCDF4: always read with netcdf but write with
  netCDF4 if available, otherwise use slow netcdf and warn
- implements @swails 's solution from ParmEd/ParmEd#722 -- thank you!!
- minimal testing: write the same trajectory with netcdf and with
  netCDF4
- NOTE: netCDF4 is not installed by default, use the re-introduced
  [AMBER] install target

     pip install MDAnalysis[AMBER]

  to request its installation but Amber users should also be aware
  of potential issues with the bundled netcdf library of Amber; see
  #506 (comment)
  for details
- removed zlib and cmplevel kwargs from NETCDFWriter (only used with netCDF4)
- comprehensive docs with background and reference to #506
- updated CHANGELOG (@tylerjereddy and @orbeckst as authors)
orbeckst added a commit that referenced this issue Jul 3, 2017
closes #506: Replacing netCDF4 with scipy.io.netcdf
@tylerjereddy
Copy link
Member

Possibly related netcdf discussion in scipy: scipy/scipy#9157

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants