From octave-sources-request at bevo dot che dot wisc dot edu Sat Nov 27 16:43:53 1999 Subject: Revised HDF5 load/save patch (load/save lists, better import) From: stevenj at gil-galad dot mit dot edu To: octave-sources at bevo dot che dot wisc dot edu Date: Sat, 27 Nov 1999 17:44:08 -0500 (EST) This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime at docserver dot cac dot washington dot edu for more info. --6689530-17008469-943742648=:846 Content-Type: TEXT/PLAIN; charset=US-ASCII Dear Octave Maintainers and Users, I am posting a revised version of my Octave patch (produced with cvs diff -u against the latest CVS tree) to add "native" HDF5 support to the load and save commands. (c.f http://www.che.wisc.edu/octave/mailing-lists/octave-sources/1999/95) The revised version adds several features: 1) It can now load and save the Octave "list" type, including lists of lists, etcetera, with arbitrarily nested datatypes. (This is done by saving a list as an HDF5 "group", which like a list can contain arbitrary datasets, including other groups.) It is my impression that none of the other Octave load/save formats support lists. 2) The capability to import "foreign" HDF5 datasets is now improved. When you include the (new) -import (-i) flag in the load command, HDF5 import will now: a) read datasets whose names are invalid Octave identifiers, by converting invalid characters into underscores ("_") (the original name is stored in the variable's documentation string). b) read datasets of arbitrary dimensionality by importing them into lists of matrices (or lists of lists of matrices, etcetera). Note that the h5read plugin that I posted earlier to octave-sources is still useful, because it lets you import only a part of an HDF5 dataset, which may be very large. It is also often more convenient than lists, although this may change if Octave implements operators like (), +, -, .*, etcetera for lists. The documentation for the HDF5 import and export is now included in the manual even when HDF5 is not linked in, although in that case an extra warning string saying that HDF5 support is not available is also included. (It seemed like better behavior to mention the feature, so that users are aware of it and can go back and link it in if they want it.) Please let me know what you think. Cordially, Steven G. Johnson --6689530-17008469-943742648=:846 Content-Type: APPLICATION/octet-stream; name="diff.out.gz" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="diff.out.gz" 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 --6689530-17008469-943742648=:846--