Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add BlockedOneTo as the axis type for a BlockedArray #348

Merged
merged 17 commits into from
Apr 4, 2024

Conversation

jishnub
Copy link
Member

@jishnub jishnub commented Mar 22, 2024

After this, the axes of a BlockArray are BlockedOneTos instead of BlockedUnitRanges:

julia> B = BlockArray([1:3;], [2,1]);

julia> axes(B,1)
2-blocked 3-element BlockedOneTo{Vector{Int64}}:
 1
 23

blockedrange returns a BlockedOneTo by default:

julia> b = blockedrange(1:2)
2-blocked 3-element BlockedOneTo{ArrayLayouts.RangeCumsum{Int64, UnitRange{Int64}}}:
 12
 3

julia> b = blockedrange(3, 1:2) # can obtain a `BlockedUnitRange` by specifying the first value
2-blocked 3-element BlockedUnitRange{Vector{Int64}}:
 34
 5

BlockedOneTo are their own axes:

julia> b = blockedrange([2,2,3]);

julia> axes(b,1) === b
true

blocklengths may avoid allocating if the block sizes are given by an OrdinalRange:

julia> b = blockedrange(1:2);

julia> blocklengths(b)
1:2

Breaking change: this PR disallows offset vectors as arguments to blockedrange, which used to be supported earlier. Supporting this correctly is a lot of work, and having the blocklasts have offset axes adds little value to the use case. Typically, we only care about the values of blocklasts, and not their axes.

Copy link

codecov bot commented Mar 22, 2024

Codecov Report

Attention: Patch coverage is 98.09524% with 2 lines in your changes are missing coverage. Please review.

Project coverage is 95.35%. Comparing base (7766ac9) to head (7c02524).

Files Patch % Lines
src/blockaxis.jl 98.30% 1 Missing ⚠️
src/blockcholesky.jl 0.00% 1 Missing ⚠️
Additional details and impacted files
@@               Coverage Diff               @@
##           release-1.0     #348      +/-   ##
===============================================
+ Coverage        95.33%   95.35%   +0.01%     
===============================================
  Files               16       16              
  Lines             1500     1527      +27     
===============================================
+ Hits              1430     1456      +26     
- Misses              70       71       +1     

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

@jishnub jishnub changed the title Add BlockedOneTo as the axis type for a BlockedArrays Add BlockedOneTo as the axis type for a BlockedArray Mar 22, 2024
@jishnub jishnub force-pushed the jishnub/blockedoneto branch from 20e1716 to ac0b14e Compare March 22, 2024 16:10
@putianyi889
Copy link
Contributor

Does it mean the axes of blockarrays have to start from 1, e.g. offset not allowed?

@jishnub
Copy link
Member Author

jishnub commented Apr 2, 2024

Yes, this PR disallows this. Is there a use case for block arrays with offset axes? One may wrap it in an OffsetArray if indexing is the concern.

@putianyi889
Copy link
Contributor

I'm not particularly concerned about this. It'll simplify many other implementations.

@jishnub jishnub force-pushed the jishnub/blockedoneto branch 2 times, most recently from 6a1945f to 4582f1d Compare April 3, 2024 06:58
@jishnub jishnub force-pushed the jishnub/blockedoneto branch from 4582f1d to 7c02524 Compare April 4, 2024 08:00
@jishnub jishnub mentioned this pull request Apr 4, 2024
@jishnub jishnub merged commit 4ee907e into release-1.0 Apr 4, 2024
14 checks passed
@jishnub jishnub deleted the jishnub/blockedoneto branch April 4, 2024 10:31
jishnub added a commit that referenced this pull request Apr 7, 2024
* Add BlockedOneTo

* axes for AbstractBlockedUnitRange returns BlockedOneTo

* Rewrite test using blockedrange instead of BlockedUnitRange

* Update BlockedUnitRange docstring and add for BlockedOneTo/blockedrange

* Show for BlockedOneTo

* Blocklengths for OrdinalRange block sizes

* Update docs

* Return BlockedOneTo in indexing with BlockRange

* Be less fussy in show tests

* Require 1-based lasts in blockedrange

* Disallow offset arrays  in BlockedUnitRange

* undo unnecessary doc change

* Test conversions between BlockedOneTo and BlockedUnitRange

* Reduce the number of convert methods

* Remove axes1 specialization

* Disallow offset block axes and blocks in BlockArray constructor

* Remove unused axes method
dlfivefifty added a commit that referenced this pull request May 17, 2024
* Compact show for `BlockRange` (#248)

* Compact show for BlockRange

* update docstrings

* don't specialize show for zero dim

* fix missing io in print

* missing show tests

* show for BlockIndexRange

* Bump version to v1.0.0-dev

* Add `BlockedOneTo` as the axis type for a `BlockedArray` (#348)

* Add BlockedOneTo

* axes for AbstractBlockedUnitRange returns BlockedOneTo

* Rewrite test using blockedrange instead of BlockedUnitRange

* Update BlockedUnitRange docstring and add for BlockedOneTo/blockedrange

* Show for BlockedOneTo

* Blocklengths for OrdinalRange block sizes

* Update docs

* Return BlockedOneTo in indexing with BlockRange

* Be less fussy in show tests

* Require 1-based lasts in blockedrange

* Disallow offset arrays  in BlockedUnitRange

* undo unnecessary doc change

* Test conversions between BlockedOneTo and BlockedUnitRange

* Reduce the number of convert methods

* Remove axes1 specialization

* Disallow offset block axes and blocks in BlockArray constructor

* Remove unused axes method

* Infinite broadcast tests (#383)

* Specialize blockedrange BroadcastStyle for LazyArrayStyle (#384)

* Specialize blockedrange BroadcastStyle for LazyArrayStyle

* Add compat for LazyArrays

* Define dataids for PseudoBlockArrays (#364) (#385)

* Define dataids for PseudoBlockArrays (#364)

* Don't use dataids of axes

* Banded Matrix extension (#388)

* Move BandedMatrices+BlockArrays code in BlockBandedMatrices to extension

* Bump julia-actions/setup-julia from 1 to 2 (#387)

Bumps [julia-actions/setup-julia](https://github.com/julia-actions/setup-julia) from 1 to 2.
- [Release notes](https://github.com/julia-actions/setup-julia/releases)
- [Commits](julia-actions/setup-julia@v1...v2)

---
updated-dependencies:
- dependency-name: julia-actions/setup-julia
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Move over blockbanded code

* Add tests

* Update Project.toml

* add tests

* Update Project.toml

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Generalize the element type of `BlockedUnitRange` (#337)

* Allow more general BlockUnitRange element types

* Restrict element type

* Get tests passing

* Fix some tests

* Fix some doctests

* Skip broken test in Julia v1.6

* Better support for unitful numbers

* Fix tests

* Stricter types in _BlockedUnitRange

* Improve tests coverage

* Allow non-Int eltypes in BlockedOneTo (#395)

* Allow non-Int eltypes in BlockedOneTo

* Specific constructors in BlockedOneTo

* Restrict eltype to integers in BlockedOneTo constructors

* Tests for construction from a Tuple

* Move LazyArrays extension to LazyArrays.jl (#393)

* Move LazyArrays extension to LazyArrays.jl

* remove LazyArrays

* Move over OneToCumsum

This was type piracy in LazyBandedMatrices.jl

* Update blockaxis.jl

* move out InfiniteArrays.jl tests

* Use FillArrays accumulate overloads (#397)

* Bump julia-actions/setup-julia from 1 to 2 (#387)

Bumps [julia-actions/setup-julia](https://github.com/julia-actions/setup-julia) from 1 to 2.
- [Release notes](https://github.com/julia-actions/setup-julia/releases)
- [Commits](julia-actions/setup-julia@v1...v2)

---
updated-dependencies:
- dependency-name: julia-actions/setup-julia
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Map imported names to correct parentmodules (#391)

* Remove unused imported names (#392)

* Don't import Base.Cartesian (#394)

I don't think this is being used anymore

* Use FillArrays accumulate

* Bump julia-actions/cache from 1 to 2 (#398)

Bumps [julia-actions/cache](https://github.com/julia-actions/cache) from 1 to 2.
- [Release notes](https://github.com/julia-actions/cache/releases)
- [Commits](julia-actions/cache@v1...v2)

---
updated-dependencies:
- dependency-name: julia-actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update Project.toml

* Update Project.toml

* try running Pkg.update()

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jishnu Bhattacharya <[email protected]>

* Redefine blocksizes (#399)

* Redefine blocksizes

* Revert change to docstring

* Add tests, fix some tests, add docstring

* Fix more tests

* Add test Project.toml

* Git ignore vim temp files

* Fixes to test Project.toml

* Another test Project.toml fix

* Move code, change type design, better code coverage

* Backwards compatibility. Fix doctest.

* Fix tests

* Redesign BlockSizes to be AbstractArray subtype

* Rename PseudoBlockArray to BlockedArray (#401)

* v1.0, add README

* rename files

* Update README.md

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Jishnu Bhattacharya <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matt Fishman <[email protected]>
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