bids-validator-deno 2.2.2__tar.gz → 2.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/PKG-INFO +1 -1
  2. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/deno.json +1 -1
  3. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/pyproject.toml +1 -1
  4. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/nifti.test.ts +4 -0
  5. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/nifti.ts +29 -23
  6. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/LICENSE +0 -0
  7. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/README.md +0 -0
  8. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/pdm_build.py +0 -0
  9. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/.git-meta.json +0 -0
  10. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/bids-validator.ts +0 -0
  11. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/access.test.ts +0 -0
  12. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/access.ts +0 -0
  13. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/browser.test.ts +0 -0
  14. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/browser.ts +0 -0
  15. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/deno.test.ts +0 -0
  16. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/deno.ts +0 -0
  17. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/dwi.test.ts +0 -0
  18. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/dwi.ts +0 -0
  19. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/filetree.test.ts +0 -0
  20. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/filetree.ts +0 -0
  21. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/gzip.test.ts +0 -0
  22. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/gzip.ts +0 -0
  23. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/ignore.test.ts +0 -0
  24. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/ignore.ts +0 -0
  25. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/inheritance.test.ts +0 -0
  26. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/inheritance.ts +0 -0
  27. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/json.test.ts +0 -0
  28. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/json.ts +0 -0
  29. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/openers.test.ts +0 -0
  30. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/openers.ts +0 -0
  31. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/repo.ts +0 -0
  32. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/streams.test.ts +0 -0
  33. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/streams.ts +0 -0
  34. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/tiff.test.ts +0 -0
  35. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/tiff.ts +0 -0
  36. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/tsv.test.ts +0 -0
  37. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/files/tsv.ts +0 -0
  38. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/issues/datasetIssues.test.ts +0 -0
  39. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/issues/datasetIssues.ts +0 -0
  40. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/issues/list.test.ts +0 -0
  41. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/issues/list.ts +0 -0
  42. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/main.ts +0 -0
  43. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/applyRules.test.ts +0 -0
  44. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/applyRules.ts +0 -0
  45. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/associations.test.ts +0 -0
  46. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/associations.ts +0 -0
  47. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/context.test.ts +0 -0
  48. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/context.ts +0 -0
  49. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/datatypes.test.ts +0 -0
  50. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/datatypes.ts +0 -0
  51. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/entities.test.ts +0 -0
  52. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/entities.ts +0 -0
  53. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/expressionLanguage.test.ts +0 -0
  54. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/expressionLanguage.ts +0 -0
  55. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/fixtures.test.ts +0 -0
  56. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/tables.test.ts +0 -0
  57. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/tables.ts +0 -0
  58. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/walk.test.ts +0 -0
  59. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/schema/walk.ts +0 -0
  60. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/setup/loadSchema.test.ts +0 -0
  61. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/setup/loadSchema.ts +0 -0
  62. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/setup/options.test.ts +0 -0
  63. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/setup/options.ts +0 -0
  64. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/setup/requestPermissions.ts +0 -0
  65. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/summary/collectSubjectMetadata.ts +0 -0
  66. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/summary/summary.test.ts +0 -0
  67. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/summary/summary.ts +0 -0
  68. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/README.md +0 -0
  69. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/bom-utf16.tsv +0 -0
  70. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/bom-utf8.json +0 -0
  71. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/generate-filenames.ts +0 -0
  72. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/local/bids_examples.test.ts +0 -0
  73. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/local/common.ts +0 -0
  74. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/local/derivatives.test.ts +0 -0
  75. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/local/empty_files.test.ts +0 -0
  76. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/local/hed-integration.test.ts +0 -0
  77. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/local/nifti_rules.test.ts +0 -0
  78. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/local/valid_dataset.test.ts +0 -0
  79. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/local/valid_filenames.test.ts +0 -0
  80. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/local/valid_headers.test.ts +0 -0
  81. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/nullReadBytes.ts +0 -0
  82. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/regression.test.ts +0 -0
  83. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/schema-expression-language.test.ts +0 -0
  84. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/simple-dataset.ts +0 -0
  85. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/tests/utils.ts +0 -0
  86. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/types/check.ts +0 -0
  87. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/types/columns.test.ts +0 -0
  88. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/types/columns.ts +0 -0
  89. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/types/filetree.ts +0 -0
  90. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/types/issues.ts +0 -0
  91. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/types/schema.ts +0 -0
  92. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/types/validation-result.ts +0 -0
  93. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/utils/errors.ts +0 -0
  94. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/utils/logger.test.ts +0 -0
  95. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/utils/logger.ts +0 -0
  96. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/utils/memoize.ts +0 -0
  97. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/utils/objectPathHandler.ts +0 -0
  98. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/utils/output.ts +0 -0
  99. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/utils/queue.ts +0 -0
  100. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/bids.test.ts +0 -0
  101. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/bids.ts +0 -0
  102. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/citation.test.ts +0 -0
  103. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/citation.ts +0 -0
  104. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/filenameCase.test.ts +0 -0
  105. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/filenameCase.ts +0 -0
  106. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/filenameIdentify.test.ts +0 -0
  107. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/filenameIdentify.ts +0 -0
  108. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/filenameValidate.test.ts +0 -0
  109. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/filenameValidate.ts +0 -0
  110. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/hed.ts +0 -0
  111. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/internal/emptyFile.ts +0 -0
  112. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/internal/unusedFile.ts +0 -0
  113. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/json.ts +0 -0
  114. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/validators/validateFiles.test.ts +0 -0
  115. {bids_validator_deno-2.2.2 → bids_validator_deno-2.2.3}/src/version.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bids-validator-deno
3
- Version: 2.2.2
3
+ Version: 2.2.3
4
4
  Summary: Typescript implementation of the BIDS validator
5
5
  Keywords: BIDS,BIDS validator
6
6
  Author: bids-standard developers
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bids/validator",
3
- "version": "2.2.2",
3
+ "version": "2.2.3",
4
4
  "exports": {
5
5
  ".": "./src/bids-validator.ts",
6
6
  "./main": "./src/main.ts",
@@ -18,7 +18,7 @@ keywords = [
18
18
  "BIDS validator",
19
19
  ]
20
20
  dynamic = []
21
- version = "2.2.2"
21
+ version = "2.2.3"
22
22
 
23
23
  [project.license]
24
24
  text = "MIT"
@@ -96,6 +96,10 @@ Deno.test('Test extracting axis codes', async (t) => {
96
96
  const affine = [[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]
97
97
  assertEquals(axisCodes(affine), ['A', 'S', 'R'])
98
98
  })
99
+ await t.step('Fail gracefully on NaNs', async () => {
100
+ const affine = [[Number.NaN, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]
101
+ assertEquals(axisCodes(affine), null)
102
+ })
99
103
  })
100
104
 
101
105
  testAsyncFileAccess('Test file access errors for loadHeader', loadHeader)
@@ -34,9 +34,9 @@ async function extract(buffer: Uint8Array, nbytes: number): Promise<Uint8Array<A
34
34
 
35
35
  export async function loadHeader(file: BIDSFile): Promise<NiftiHeader> {
36
36
  const buf = await readBytes(file, 1024)
37
+ let header
37
38
  try {
38
39
  const data = isCompressed(buf.buffer) ? await extract(buf, 540) : buf.slice(0, 540)
39
- let header
40
40
  if (isNIFTI1(data.buffer)) {
41
41
  header = new NIFTI1()
42
42
  // Truncate to 348 bytes to avoid attempting to parse extensions
@@ -48,29 +48,30 @@ export async function loadHeader(file: BIDSFile): Promise<NiftiHeader> {
48
48
  if (!header) {
49
49
  throw { code: 'NIFTI_HEADER_UNREADABLE' }
50
50
  }
51
- const ndim = header.dims[0]
52
- return {
53
- dim: header.dims,
54
- // Hack: round pixdim to 3 decimal places; schema should add rounding function
55
- pixdim: header.pixDims.map((pixdim) => Math.round(pixdim * 1000) / 1000),
56
- shape: header.dims.slice(1, ndim + 1),
57
- voxel_sizes: header.pixDims.slice(1, ndim + 1),
58
- dim_info: {
59
- freq: header.dim_info & 0x03,
60
- phase: (header.dim_info >> 2) & 0x03,
61
- slice: (header.dim_info >> 4) & 0x03,
62
- },
63
- xyzt_units: {
64
- xyz: ['unknown', 'meter', 'mm', 'um'][header.xyzt_units & 0x03],
65
- t: ['unknown', 'sec', 'msec', 'usec'][(header.xyzt_units >> 3) & 0x03],
66
- },
67
- qform_code: header.qform_code,
68
- sform_code: header.sform_code,
69
- axis_codes: axisCodes(header.affine),
70
- } as NiftiHeader
71
51
  } catch (err) {
72
52
  throw { code: 'NIFTI_HEADER_UNREADABLE' }
73
53
  }
54
+
55
+ const ndim = header.dims[0]
56
+ return {
57
+ dim: header.dims,
58
+ // Hack: round pixdim to 3 decimal places; schema should add rounding function
59
+ pixdim: header.pixDims.map((pixdim) => Math.round(pixdim * 1000) / 1000),
60
+ shape: header.dims.slice(1, ndim + 1),
61
+ voxel_sizes: header.pixDims.slice(1, ndim + 1),
62
+ dim_info: {
63
+ freq: header.dim_info & 0x03,
64
+ phase: (header.dim_info >> 2) & 0x03,
65
+ slice: (header.dim_info >> 4) & 0x03,
66
+ },
67
+ xyzt_units: {
68
+ xyz: ['unknown', 'meter', 'mm', 'um'][header.xyzt_units & 0x03],
69
+ t: ['unknown', 'sec', 'msec', 'usec'][(header.xyzt_units >> 3) & 0x03],
70
+ },
71
+ qform_code: header.qform_code,
72
+ sform_code: header.sform_code,
73
+ axis_codes: axisCodes(header.affine),
74
+ } as NiftiHeader
74
75
  }
75
76
 
76
77
  /** Vector addition */
@@ -124,13 +125,18 @@ function argMax(arr: number[]): number {
124
125
  *
125
126
  * @returns character codes describing the orientation of an image affine.
126
127
  */
127
- export function axisCodes(affine: number[][]): string[] {
128
+ export function axisCodes(affine: number[][]): string[] | null {
128
129
  // This function is an extract of the Python function transforms3d.affines.decompose44
129
130
  // (https://github.com/matthew-brett/transforms3d/blob/6a43a98/transforms3d/affines.py#L10-L153)
130
131
  //
131
132
  // As an optimization, this only orthogonalizes the basis,
132
133
  // and does not normalize to unit vectors.
133
134
 
135
+ // Bad qforms result in NaNs in the rotation matrix
136
+ if (affine.some((row) => row.some((val) => !Number.isFinite(val)))) {
137
+ return null
138
+ }
139
+
134
140
  // Operate on columns, which are the cosines that project input coordinates onto output axes
135
141
  const [cosX, cosY, cosZ] = [0, 1, 2].map((j) => [0, 1, 2].map((i) => affine[i][j]))
136
142
 
@@ -148,7 +154,7 @@ export function axisCodes(affine: number[][]): string[] {
148
154
 
149
155
  // Check that indices are 0, 1 and 2 in some order
150
156
  if (maxIndices.toSorted().some((idx, i) => idx !== i)) {
151
- throw { key: 'AMBIGUOUS_AFFINE' }
157
+ throw { code: 'AMBIGUOUS_AFFINE' }
152
158
  }
153
159
 
154
160
  // Positive/negative codes for each world axis