Skip to content

Modify condition in MultiDimClosure function#35

Merged
quinnj merged 4 commits intoJuliaServices:mainfrom
Zinoex:fm/nested_arrays
Mar 17, 2026
Merged

Modify condition in MultiDimClosure function#35
quinnj merged 4 commits intoJuliaServices:mainfrom
Zinoex:fm/nested_arrays

Conversation

@Zinoex
Copy link
Copy Markdown
Contributor

@Zinoex Zinoex commented Dec 3, 2025

For context, I am trying to load a Array{Vector{Int64}, 4} using JSON.jl, which relies on StructUtils.jl. The inner vector is jagged, i.e. not the same length for every element, so Array{Int64, 5} is not an option. Now, without this stop condition, the multidimensional array continues until f.cur_dim[] == 0 and fails to set the dimension, unsurprisingly. With this condition it works flawlessly.

Full disclaimer, I don't know if this will have a major impact elsewhere, so please review this PR carefully. But it would be nice if loading vectors in multi-dim arrays worked.

@quinnj
Copy link
Copy Markdown
Member

quinnj commented Jan 14, 2026

Thanks for the fix! The change looks correct - without this condition, loading jagged arrays like Array{Vector{Int64}, 4} would fail when the innermost arraylike element is reached.

Could you add a test case that covers this scenario? Something like:

# Test jagged nested arrays (Array of Vectors)
jagged = [[1, 2], [3, 4, 5], [6]]
result = StructUtils.make(Vector{Vector{Int}}, jagged)
@test result == jagged

# Or a multi-dimensional case
md_jagged = Array{Vector{Int}}(undef, 2, 2)
md_jagged[1,1] = [1, 2]
md_jagged[1,2] = [3]
md_jagged[2,1] = [4, 5, 6]
md_jagged[2,2] = [7, 8]
# test round-trip through make

Once a test is added, this looks good to merge!

@Zinoex
Copy link
Copy Markdown
Contributor Author

Zinoex commented Jan 15, 2026

@quinnj Adding the tests revealed that discover_dims also required modifications. While not part of the API, downstream packages may have chosen to add a discover_dims for their specific style in which case this could be considered breaking changes. A cursory Github search tells me that only StructUtils (and forks) provide discover_dims methods but I cannot be certain.

@Zinoex
Copy link
Copy Markdown
Contributor Author

Zinoex commented Mar 12, 2026

@quinnj Is PR #39 superseding or complementary to this PR? If the latter, can we please merge this PR already?

Zinoex and others added 4 commits March 17, 2026 11:43
The 3-arg discover_dims(style, ::Type{T}, source) from the fixedsizearray
trait needs to pass ndims(T) to the 2-arg scanning version now that it
requires an ndims parameter.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@quinnj quinnj force-pushed the fm/nested_arrays branch from 629f3e6 to 18a3e5b Compare March 17, 2026 17:45
@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 17, 2026

Codecov Report

❌ Patch coverage is 85.71429% with 1 line in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (main@b960ab2). Learn more about missing BASE report.

Files with missing lines Patch % Lines
src/StructUtils.jl 85.71% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             main      #35   +/-   ##
=======================================
  Coverage        ?   82.81%           
=======================================
  Files           ?        6           
  Lines           ?      774           
  Branches        ?        0           
=======================================
  Hits            ?      641           
  Misses          ?      133           
  Partials        ?        0           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@quinnj quinnj merged commit a7227a5 into JuliaServices:main Mar 17, 2026
10 checks passed
@Zinoex Zinoex deleted the fm/nested_arrays branch March 19, 2026 13:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants