New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

HDF5-CSharp

Package Overview
Dependencies
Maintainers
1
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

HDF5-CSharp

C# Wrapper for HDF.PInvoke Library

Source
nugetNuGet
Version
1.19.1
Version published
Maintainers
1
Created
Source

HDF5-CSharp helps in reading and writing hdf5 files for .net environments

Usage

write an object to an HDF5 file

In the example below an object is created with some arrays and other variables The object is written to a file and than read back in a new object.


     private class TestClassWithArray
        {
            public double[] TestDoubles { get; set; }
            public string[] TestStrings { get; set; }
            public int TestInteger { get; set; }
            public double TestDouble { get; set; }
            public bool TestBoolean { get; set; }
            public string TestString { get; set; }
        }
     var testClass = new TestClassWithArray() {
                    TestInteger = 2,
                    TestDouble = 1.1,
                    TestBoolean = true,
                    TestString = "test string",
                    TestDoubles = new double[] { 1.1, 1.2, -1.1, -1.2 },
                    TestStrings = new string[] { "one", "two", "three", "four" }
        };
    int fileId = Hdf5.CreateFile("testFile.H5");

    Hdf5.WriteObject(fileId, testClass, "testObject");

    TestClassWithArray readObject = new TestClassWithArray();

    readObject = Hdf5.ReadObject(fileId, readObject, "testObject");

    Hdf5.CloseFile(fileId);

Write a dataset and append new data to it


    /// <summary>
    /// create a matrix and fill it with numbers
    /// </summary>
    /// <param name="offset"></param>
    /// <returns>the matrix </returns>
    private static double[,]createDataset(int offset = 0)
    {
      var dset = new double[10, 5];
      for (var i = 0; i < 10; i++)
        for (var j = 0; j < 5; j++)
        {
          double x = i + j * 5 + offset;
          dset[i, j] = (j == 0) ? x : x / 10;
        }
      return dset;
    }

    // create a list of matrices
    dsets = new List<double[,]> {
                createDataset(),
                createDataset(10),
                createDataset(20) };

    string filename = Path.Combine(folder, "testChunks.H5");
    int fileId = Hdf5.CreateFile(filename);    

    // create a dataset and append two more datasets to it
    using (var chunkedDset = new ChunkedDataset<double>("/test", fileId, dsets.First()))
    {
      foreach (var ds in dsets.Skip(1))
        chunkedDset.AppendDataset(ds);
    }

    // read rows 9 to 22 of the dataset
    ulong begIndex = 8;
    ulong endIndex = 21;
    var dset = Hdf5.ReadDataset<double>(fileId, "/test", begIndex, endIndex);
    Hdf5.CloseFile(fileId);

for more example see unit test project

Reading H5 File:

you can use the following two method to read the structure of an existing file:


string fileName = @"FileStructure.h5";
var tree =Hdf5.ReadTreeFileStructure(fileName);
var flat = Hdf5.ReadFlatFileStructure(fileName);

Additional settings

  • Hdf5EntryNameAttribute: control the name of the field/property in the h5 file:
    [AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
   public sealed class Hdf5EntryNameAttribute : Attribute
   {
       public string Name { get; }
       public Hdf5EntryNameAttribute(string name)
       {
           Name = name;
       }
   }

example:

private class TestClass : IEquatable<TestClass>
        {
            public int TestInteger { get; set; }
            public double TestDouble { get; set; }
            public bool TestBoolean { get; set; }
            public string TestString { get; set; }
            [Hdf5EntryNameAttribute("Test_time")]
            public DateTime TestTime { get; set; }
        }
  • Time and fields names in H5 file:
    public class Settings
   {
       public DateTimeType DateTimeType { get; set; }
       public bool LowerCaseNaming { get; set; }
   }

   public enum DateTimeType
   {
       Ticks,
       UnixTimeSeconds,
       UnixTimeMilliseconds
   }
   

usage:

       [ClassInitialize()]
       public static void ClassInitialize(TestContext context)
       {
           Hdf5.Hdf5Settings.LowerCaseNaming = true;
           Hdf5.Hdf5Settings.DateTimeType = DateTimeType.UnixTimeMilliseconds;
       }
           
  • Logging: use can set logging callback via: Hdf5Utils.LogError, Hdf5Utils.LogInfo, etc
public static class Hdf5Utils
   {
       public static Action<string> LogError;
       public static Action<string> LogInfo;
       public static Action<string> LogDebug;
       public static Action<string> LogCritical;
   }

in order to log errors use this code snippet:

            Hdf5.Hdf5Settings.EnableErrorReporting(true);
            Hdf5Utils.LogWarning = (string s) => {...}
            Hdf5Utils.LogCritical = (string s) => {...}
            Hdf5Utils.LogError = (string s) => {...}

History

V1.17.0 (25.03.2023):

  • Update Breaking Change inside Dependecy PureHDF (previously HDF5.NET)

V1.16.3 (25.01.2023):

  • Update Dependecy PureHDF (previously HDF5.NET)

V1.16.2 (18.11.2022):

  • File close problem #249
  • Hdf5.WriteCompounds is missing the write attributes fix (move write to created compound name and not group id) #248

V1.16.1 (12.11.2022):

  • Hdf5.WriteCompounds is missing the write attributes fix #248

V1.16.0 (11.09.2022):

  • Add net 7 target framework.

V1.15.4.1 (03.08.2022):

  • Replace net.6.0-windows target with net6.0.

V1.15.3 (23.07.2022):

  • https://github.com/LiorBanai/HDF5-CSharp/issues/224: Memory increased #224

V1.15.2 (14.07.2022):

V1.15.1:

V1.15.0:

V1.14.3:

V1.14.2:

V1.14.1:

Keywords

Hdf5

FAQs

Package last updated on 10 Jan 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts