{"id":34694905,"url":"https://github.com/geekysuavo/libhxnd","last_synced_at":"2026-04-26T14:31:12.401Z","repository":{"id":22380098,"uuid":"25716664","full_name":"geekysuavo/libhxnd","owner":"geekysuavo","description":"An open source framework for n-dimensional hypercomplex calculations for NMR","archived":false,"fork":false,"pushed_at":"2021-07-04T15:35:42.000Z","size":519,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-03-21T17:32:07.569Z","etag":null,"topics":["hypercomplex-number","multidimensional-arrays","nmr-data","nmr-spectroscopy","processing"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/geekysuavo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-10-25T02:07:05.000Z","updated_at":"2024-03-21T17:32:07.570Z","dependencies_parsed_at":"2022-08-20T11:30:57.969Z","dependency_job_id":null,"html_url":"https://github.com/geekysuavo/libhxnd","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/geekysuavo/libhxnd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekysuavo%2Flibhxnd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekysuavo%2Flibhxnd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekysuavo%2Flibhxnd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekysuavo%2Flibhxnd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/geekysuavo","download_url":"https://codeload.github.com/geekysuavo/libhxnd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekysuavo%2Flibhxnd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28010883,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hypercomplex-number","multidimensional-arrays","nmr-data","nmr-spectroscopy","processing"],"created_at":"2025-12-24T22:31:36.142Z","updated_at":"2025-12-24T22:31:36.695Z","avatar_url":"https://github.com/geekysuavo.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# libhxnd\n\nAn open source framework for n-dimensional hypercomplex calculations for NMR.\n\n## Introduction\n\nThe libhxnd package implements a portable, open-source programming interface\nfor manipulating a class of hypercomplex numbers found in the field of\n[Nuclear Magnetic Resonance](\nhttp://en.wikipedia.org/wiki/Nuclear_magnetic_resonance) spectroscopy.\nMore importantly, libhxnd supports the manipulation of these hypercomplex\nnumbers inside multidimensional arrays of any size. Using libhxnd grammars,\n_any_ NMR dataset of _any_ dimensionality may be represented by the same\ndata structure (`hx_array`).\n\nA few core terms are used when discussing the use of hypercomplex\nmultidimensional arrays in libhxnd, as follows...\n\n### Algebraic Dimensionality\n\nThe algebraic dimensionality of an array (or scalar) refers to the number of\nbasis _phases_ used to represent the hypercomplex number. For example, a real\nnumber is _zero_-dimensional, because it contains no complex basis phases. A\ncomplex number is _one_-dimensional and contains a single basis phase:\n\n\u003e x = a + b **u1**\n\nOn the other hand, a _two_-dimensional hypercomplex number contains two bases,\n**u1** and **u2**. A generic two-dimensional hypercomplex number must then\nbe represented by _four_ real coefficients, like so:\n\n\u003e x = a + b **u1** + c **u2** + d **u1** **u2**\n\nA generic three-dimensional hypercomplex number contains three bases, **u1**,\n**u2** and **u3**, and will require _eight_ real coefficients:\n\n\u003e x = a + b **u1** + c **u2** + d **u1** **u2** + e **u3** + f **u1** **u3** +\ng **u2** **u3** + h **u1** **u2** **u3**\n\nMore generally, the number of coefficients required to express a given\nhypercomplex number in _d_ dimensions is two to the power _d_.\n\n### Topological Dimensionality\n\nThe topological dimensionality of an array refers to the number of array\ndimensions, similar to the concept of tensor order. For example, scalars and\nvectors are one-dimensional, matrices are two-dimensional, rectangular cuboids\nare three-dimensional, _etc_. A _k_-dimensional array will require a set of\n_k_ indices to identify a unique scalar element.\n\n### Topological Size\n\nThe topological size of an array refers to the set of sizes of the dimensions\nof the array. An array with _k_ topological dimensions will have _k_ sizes,\none for each dimension, _e.g._:\n\n\u003e _k_ = 1: (3)\n\n\u003e _k_ = 2: (4, 5)\n\n\u003e _k_ = 4: (2, 5, 11, 7)\n\nOf course, the size of any dimension may just as easily be **one**, making\nthat dimension effectively meaningless in the array. For example, an array\nof size _(1,1,2,1,8,1)_ is effectively the same as an array of size _(2,8)_.\n\n### Configuration\n\nThe configuration of an array refers to the combination of the algebraic\ndimensionality, the topological dimensionality, and the topological size\nof the array. Only arrays having identical configurations may be added or\nmultiplied element-wise without modification. Arrays having identical\nlengths (total number of elements) may be reshaped for element-wise\narithmetic.\n\n## Representation of NMR data\n\nBecause the `hx_array` data structure natively describes NMR data of any\ndimensionality, its use in representing such data files requires relatively\nfew extra pieces of information. Thus, the `datum` structure in libhxnd is\na fairly thin wrapper around the `hx_array` structure, holding per-dimension\nmetadata such as spectral width, offset and carrier.\n\n## More information\n\nThe inspiration for libhxnd arose from the following publication:\n\n\u003e Schuyler A. D., Maciejewski M. W., Stern A. S., Hoch J. C., _Formalism\n\u003e for hypercomplex multidimensional NMR employing partial-component\n\u003e subsampling_, Journal of Magnetic Resonance, February 2013, 227: 20--24.\n\n## Licensing\n\nThe libhxnd project is released under the [GNU GPL 2.0](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeekysuavo%2Flibhxnd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeekysuavo%2Flibhxnd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeekysuavo%2Flibhxnd/lists"}