Add hypothesis property tests - #1746

Merged
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests
Aug 8, 2024
Merged

Add hypothesis property tests#1746
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests

Conversation

@dcherian

@dcheriandcherian commented Apr 5, 2024

Copy link
Copy Markdown
Contributor

After mamba install hypothesis

Use

python -m pytest --capture=no --hypothesis-verbosity=verbose test_properties.py

to see all the things it tries.

This was a quick attempt at a property test.

The other thing you can do is a "Stateful" test (e.g. https://github.com/pydata/xarray/blob/main/properties/test_index_manipulation.py)

which runs an arbitrary sequence of manipulations (e.g. add array, rename, move, delete, modify array, copy), and checks for consistency at each point.

cc @Zac-HD

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@pep8speaks

pep8speaks commented Apr 5, 2024

Copy link
Copy Markdown

Hello @dcherian! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

Line 5:1: E402 module level import not at top of file
Line 6:1: E402 module level import not at top of file
Line 8:1: E402 module level import not at top of file
Line 9:1: E402 module level import not at top of file
Line 10:1: E402 module level import not at top of file
Line 11:1: E402 module level import not at top of file
Line 12:1: E402 module level import not at top of file
Line 14:1: E402 module level import not at top of file
Line 15:1: E402 module level import not at top of file
Line 17:1: E266 too many leading '#' for block comment

Comment last updated at 2024-04-05 17:47:12 UTC

Comment threadtests/test_properties.py Outdated
Comment on lines +77 to +92
elif path == "/":
assert name is not None
array_path = name
array_name = "/" + name
else:
assert name is not None
array_path = f"{path}/{name}"
array_name = "/" + array_path

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

totally not obvious!

Comment threadtests/test_properties.py Outdated
@jhammanjhamman mentioned this pull request Apr 5, 2024
@dcherian
dcherian marked this pull request as draft April 11, 2024 16:20
1. Roundtrip a numpy array
2. Basic Indexing
@dcheriandcherian mentioned this pull request Jun 4, 2024
5 tasks
@dcherian

Copy link
Copy Markdown
ContributorAuthor

Some input needed:

  1. Should this be a separate action or folded in to the existing actions? I lean former. It's fast now (47s) but it could get slower in the future.
  2. There's more to make strategies.py actually useful as public API but I'd like to punt that to the future.
  3. I'll make comments where I'd like a careful review.

Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment on lines +74 to +75
# TODO: clean this up
if path is None and name is None:

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this mess be cleaned up?

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
* v3: (22 commits)
[v3] `Buffer` ensure correct subclass based on the `BufferPrototype` argument (zarr-developers#1974)
Fix doc build (zarr-developers#1987)
Fix doc build warnings (zarr-developers#1985)
Automatically generate API reference docs (zarr-developers#1918)
Update `RemoteStore.__str__` and add UPath tests (zarr-developers#1964)
[v3] Elevate codec pipeline (zarr-developers#1932)
0 dim arrays: indexing (zarr-developers#1980)
`parse_shapelike` allows 0 (zarr-developers#1979)
Clean up typing and docs for indexing (zarr-developers#1961)
add json indentation to config (zarr-developers#1952)
chore: update pre-commit hooks (zarr-developers#1973)
Bump pypa/gh-action-pypi-publish in the actions group (zarr-developers#1969)
chore: update pre-commit hooks (zarr-developers#1957)
Update release.rst (zarr-developers#1960)
doc: update release notes for 3.0.0.alpha (zarr-developers#1959)
Basic working FsspecStore (zarr-developers#1785)
Feature: Top level V3 API (zarr-developers#1884)
Buffer Prototype Argument (zarr-developers#1910)
Create issue-metrics.yml
fixes bug in transpose (zarr-developers#1949)
...
* v3:
Allow 'chunks' as an alias for 'chunk_shape' in array creation. (zarr-developers#1991)
* v3: (22 commits)
chore: update pre-commit hooks (zarr-developers#2051)
Apply ruff/flake8-bandit rule B006 (zarr-developers#2049)
Move fixtures to `tests` (zarr-developers#1813)
Multiple imports for an import name (zarr-developers#2047)
Redundant list comprehension (zarr-developers#2048)
chore: update pre-commit hooks (zarr-developers#2039)
Cast fill value to array's dtype (zarr-developers#2020)
chore: update pre-commit hooks (zarr-developers#2017)
make shardingcodec pickleable (zarr-developers#2011)
doc: copy 3.0.0.alpha changelog into release.rst (zarr-developers#2007)
build(ci): enable python 3.12 in github actions (zarr-developers#2005)
Bump NumPy to 2.0 (zarr-developers#1983)
chore: update pre-commit hooks (zarr-developers#1989)
Fix indexing with bools (zarr-developers#1968)
Fix string interpolation (zarr-developers#1998)
Unnecessary comprehension (zarr-developers#1997)
Stop ignoring these ruff rules (zarr-developers#2001)
Merge collapsible if statements (zarr-developers#1999)
Unnecessary comprehension (zarr-developers#1996)
Handle Path in `make_store_path` (zarr-developers#1992)
...
@dcheriandcherian changed the title Add example hypothesis roundtrip testAdd hypothesis property testsJul 25, 2024
@dcherian
dcherian marked this pull request as ready for review July 25, 2024 03:31
@dcherian
dcherian requested a review from jhammanJuly 25, 2024 03:32
Comment threadsrc/zarr/strategies.py
@dcherian

Copy link
Copy Markdown
ContributorAuthor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

definitely! Given that I know nothing about hypothesis, how can I replicate this failure locally?

@dcherian

Copy link
Copy Markdown
ContributorAuthor

This may be user error. It's sensitive to the store.close()

importzarrfromzarr.arrayimportArrayfromzarr.groupimportGroupfromzarr.storeimportMemoryStoreimportnumpyasnpstore=MemoryStore(mode="w")
root=Group.create(store)
nparray=np.array([1], dtype=np.int8)
a=root.create_array(
"/0/0",
shape=nparray.shape,
chunks=(1,),
dtype=nparray.dtype.str,
attributes={},
# compressor=compressor, # TODO: FIXMEfill_value=nparray.dtype.type(0),
)
a[:] =nparrayprint(a[:]) # [1]store.close()
print(a[:]) # [0]

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

I can replicate this locally. store.close is quite minimal so I think our problem lies elsewhere. I will investigate.

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
@dcherian

Copy link
Copy Markdown
ContributorAuthor

pre-commit.ci autofix

Sign up for freeto 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.

6 participants

@dcherian@pep8speaks@d-v-b@jhamman@Zac-HD@joshmoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add hypothesis property tests - #1746

Merged
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests
Aug 8, 2024
Merged

Add hypothesis property tests#1746
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests

Conversation

@dcherian

@dcheriandcherian commented Apr 5, 2024

Copy link
Copy Markdown
Contributor

After mamba install hypothesis

Use

python -m pytest --capture=no --hypothesis-verbosity=verbose test_properties.py

to see all the things it tries.

This was a quick attempt at a property test.

The other thing you can do is a "Stateful" test (e.g. https://github.com/pydata/xarray/blob/main/properties/test_index_manipulation.py)

which runs an arbitrary sequence of manipulations (e.g. add array, rename, move, delete, modify array, copy), and checks for consistency at each point.

cc @Zac-HD

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@pep8speaks

pep8speaks commented Apr 5, 2024

Copy link
Copy Markdown

Hello @dcherian! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

Line 5:1: E402 module level import not at top of file
Line 6:1: E402 module level import not at top of file
Line 8:1: E402 module level import not at top of file
Line 9:1: E402 module level import not at top of file
Line 10:1: E402 module level import not at top of file
Line 11:1: E402 module level import not at top of file
Line 12:1: E402 module level import not at top of file
Line 14:1: E402 module level import not at top of file
Line 15:1: E402 module level import not at top of file
Line 17:1: E266 too many leading '#' for block comment

Comment last updated at 2024-04-05 17:47:12 UTC

Comment threadtests/test_properties.py Outdated
Comment on lines +77 to +92
elif path == "/":
assert name is not None
array_path = name
array_name = "/" + name
else:
assert name is not None
array_path = f"{path}/{name}"
array_name = "/" + array_path

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

totally not obvious!

Comment threadtests/test_properties.py Outdated
@jhammanjhamman mentioned this pull request Apr 5, 2024
@dcherian
dcherian marked this pull request as draft April 11, 2024 16:20
1. Roundtrip a numpy array
2. Basic Indexing
@dcheriandcherian mentioned this pull request Jun 4, 2024
5 tasks
@dcherian

Copy link
Copy Markdown
ContributorAuthor

Some input needed:

  1. Should this be a separate action or folded in to the existing actions? I lean former. It's fast now (47s) but it could get slower in the future.
  2. There's more to make strategies.py actually useful as public API but I'd like to punt that to the future.
  3. I'll make comments where I'd like a careful review.

Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment on lines +74 to +75
# TODO: clean this up
if path is None and name is None:

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this mess be cleaned up?

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
* v3: (22 commits)
[v3] `Buffer` ensure correct subclass based on the `BufferPrototype` argument (zarr-developers#1974)
Fix doc build (zarr-developers#1987)
Fix doc build warnings (zarr-developers#1985)
Automatically generate API reference docs (zarr-developers#1918)
Update `RemoteStore.__str__` and add UPath tests (zarr-developers#1964)
[v3] Elevate codec pipeline (zarr-developers#1932)
0 dim arrays: indexing (zarr-developers#1980)
`parse_shapelike` allows 0 (zarr-developers#1979)
Clean up typing and docs for indexing (zarr-developers#1961)
add json indentation to config (zarr-developers#1952)
chore: update pre-commit hooks (zarr-developers#1973)
Bump pypa/gh-action-pypi-publish in the actions group (zarr-developers#1969)
chore: update pre-commit hooks (zarr-developers#1957)
Update release.rst (zarr-developers#1960)
doc: update release notes for 3.0.0.alpha (zarr-developers#1959)
Basic working FsspecStore (zarr-developers#1785)
Feature: Top level V3 API (zarr-developers#1884)
Buffer Prototype Argument (zarr-developers#1910)
Create issue-metrics.yml
fixes bug in transpose (zarr-developers#1949)
...
* v3:
Allow 'chunks' as an alias for 'chunk_shape' in array creation. (zarr-developers#1991)
* v3: (22 commits)
chore: update pre-commit hooks (zarr-developers#2051)
Apply ruff/flake8-bandit rule B006 (zarr-developers#2049)
Move fixtures to `tests` (zarr-developers#1813)
Multiple imports for an import name (zarr-developers#2047)
Redundant list comprehension (zarr-developers#2048)
chore: update pre-commit hooks (zarr-developers#2039)
Cast fill value to array's dtype (zarr-developers#2020)
chore: update pre-commit hooks (zarr-developers#2017)
make shardingcodec pickleable (zarr-developers#2011)
doc: copy 3.0.0.alpha changelog into release.rst (zarr-developers#2007)
build(ci): enable python 3.12 in github actions (zarr-developers#2005)
Bump NumPy to 2.0 (zarr-developers#1983)
chore: update pre-commit hooks (zarr-developers#1989)
Fix indexing with bools (zarr-developers#1968)
Fix string interpolation (zarr-developers#1998)
Unnecessary comprehension (zarr-developers#1997)
Stop ignoring these ruff rules (zarr-developers#2001)
Merge collapsible if statements (zarr-developers#1999)
Unnecessary comprehension (zarr-developers#1996)
Handle Path in `make_store_path` (zarr-developers#1992)
...
@dcheriandcherian changed the title Add example hypothesis roundtrip testAdd hypothesis property testsJul 25, 2024
@dcherian
dcherian marked this pull request as ready for review July 25, 2024 03:31
@dcherian
dcherian requested a review from jhammanJuly 25, 2024 03:32
Comment threadsrc/zarr/strategies.py
@dcherian

Copy link
Copy Markdown
ContributorAuthor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

definitely! Given that I know nothing about hypothesis, how can I replicate this failure locally?

@dcherian

Copy link
Copy Markdown
ContributorAuthor

This may be user error. It's sensitive to the store.close()

importzarrfromzarr.arrayimportArrayfromzarr.groupimportGroupfromzarr.storeimportMemoryStoreimportnumpyasnpstore=MemoryStore(mode="w")
root=Group.create(store)
nparray=np.array([1], dtype=np.int8)
a=root.create_array(
"/0/0",
shape=nparray.shape,
chunks=(1,),
dtype=nparray.dtype.str,
attributes={},
# compressor=compressor, # TODO: FIXMEfill_value=nparray.dtype.type(0),
)
a[:] =nparrayprint(a[:]) # [1]store.close()
print(a[:]) # [0]

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

I can replicate this locally. store.close is quite minimal so I think our problem lies elsewhere. I will investigate.

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
@dcherian

Copy link
Copy Markdown
ContributorAuthor

pre-commit.ci autofix

Sign up for freeto 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.

6 participants

@dcherian@pep8speaks@d-v-b@jhamman@Zac-HD@joshmoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add hypothesis property tests - #1746

Merged
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests
Aug 8, 2024
Merged

Add hypothesis property tests#1746
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests

Conversation

@dcherian

@dcheriandcherian commented Apr 5, 2024

Copy link
Copy Markdown
Contributor

After mamba install hypothesis

Use

python -m pytest --capture=no --hypothesis-verbosity=verbose test_properties.py

to see all the things it tries.

This was a quick attempt at a property test.

The other thing you can do is a "Stateful" test (e.g. https://github.com/pydata/xarray/blob/main/properties/test_index_manipulation.py)

which runs an arbitrary sequence of manipulations (e.g. add array, rename, move, delete, modify array, copy), and checks for consistency at each point.

cc @Zac-HD

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@pep8speaks

pep8speaks commented Apr 5, 2024

Copy link
Copy Markdown

Hello @dcherian! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

Line 5:1: E402 module level import not at top of file
Line 6:1: E402 module level import not at top of file
Line 8:1: E402 module level import not at top of file
Line 9:1: E402 module level import not at top of file
Line 10:1: E402 module level import not at top of file
Line 11:1: E402 module level import not at top of file
Line 12:1: E402 module level import not at top of file
Line 14:1: E402 module level import not at top of file
Line 15:1: E402 module level import not at top of file
Line 17:1: E266 too many leading '#' for block comment

Comment last updated at 2024-04-05 17:47:12 UTC

Comment threadtests/test_properties.py Outdated
Comment on lines +77 to +92
elif path == "/":
assert name is not None
array_path = name
array_name = "/" + name
else:
assert name is not None
array_path = f"{path}/{name}"
array_name = "/" + array_path

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

totally not obvious!

Comment threadtests/test_properties.py Outdated
@jhammanjhamman mentioned this pull request Apr 5, 2024
@dcherian
dcherian marked this pull request as draft April 11, 2024 16:20
1. Roundtrip a numpy array
2. Basic Indexing
@dcheriandcherian mentioned this pull request Jun 4, 2024
5 tasks
@dcherian

Copy link
Copy Markdown
ContributorAuthor

Some input needed:

  1. Should this be a separate action or folded in to the existing actions? I lean former. It's fast now (47s) but it could get slower in the future.
  2. There's more to make strategies.py actually useful as public API but I'd like to punt that to the future.
  3. I'll make comments where I'd like a careful review.

Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment on lines +74 to +75
# TODO: clean this up
if path is None and name is None:

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this mess be cleaned up?

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
* v3: (22 commits)
[v3] `Buffer` ensure correct subclass based on the `BufferPrototype` argument (zarr-developers#1974)
Fix doc build (zarr-developers#1987)
Fix doc build warnings (zarr-developers#1985)
Automatically generate API reference docs (zarr-developers#1918)
Update `RemoteStore.__str__` and add UPath tests (zarr-developers#1964)
[v3] Elevate codec pipeline (zarr-developers#1932)
0 dim arrays: indexing (zarr-developers#1980)
`parse_shapelike` allows 0 (zarr-developers#1979)
Clean up typing and docs for indexing (zarr-developers#1961)
add json indentation to config (zarr-developers#1952)
chore: update pre-commit hooks (zarr-developers#1973)
Bump pypa/gh-action-pypi-publish in the actions group (zarr-developers#1969)
chore: update pre-commit hooks (zarr-developers#1957)
Update release.rst (zarr-developers#1960)
doc: update release notes for 3.0.0.alpha (zarr-developers#1959)
Basic working FsspecStore (zarr-developers#1785)
Feature: Top level V3 API (zarr-developers#1884)
Buffer Prototype Argument (zarr-developers#1910)
Create issue-metrics.yml
fixes bug in transpose (zarr-developers#1949)
...
* v3:
Allow 'chunks' as an alias for 'chunk_shape' in array creation. (zarr-developers#1991)
* v3: (22 commits)
chore: update pre-commit hooks (zarr-developers#2051)
Apply ruff/flake8-bandit rule B006 (zarr-developers#2049)
Move fixtures to `tests` (zarr-developers#1813)
Multiple imports for an import name (zarr-developers#2047)
Redundant list comprehension (zarr-developers#2048)
chore: update pre-commit hooks (zarr-developers#2039)
Cast fill value to array's dtype (zarr-developers#2020)
chore: update pre-commit hooks (zarr-developers#2017)
make shardingcodec pickleable (zarr-developers#2011)
doc: copy 3.0.0.alpha changelog into release.rst (zarr-developers#2007)
build(ci): enable python 3.12 in github actions (zarr-developers#2005)
Bump NumPy to 2.0 (zarr-developers#1983)
chore: update pre-commit hooks (zarr-developers#1989)
Fix indexing with bools (zarr-developers#1968)
Fix string interpolation (zarr-developers#1998)
Unnecessary comprehension (zarr-developers#1997)
Stop ignoring these ruff rules (zarr-developers#2001)
Merge collapsible if statements (zarr-developers#1999)
Unnecessary comprehension (zarr-developers#1996)
Handle Path in `make_store_path` (zarr-developers#1992)
...
@dcheriandcherian changed the title Add example hypothesis roundtrip testAdd hypothesis property testsJul 25, 2024
@dcherian
dcherian marked this pull request as ready for review July 25, 2024 03:31
@dcherian
dcherian requested a review from jhammanJuly 25, 2024 03:32
Comment threadsrc/zarr/strategies.py
@dcherian

Copy link
Copy Markdown
ContributorAuthor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

definitely! Given that I know nothing about hypothesis, how can I replicate this failure locally?

@dcherian

Copy link
Copy Markdown
ContributorAuthor

This may be user error. It's sensitive to the store.close()

importzarrfromzarr.arrayimportArrayfromzarr.groupimportGroupfromzarr.storeimportMemoryStoreimportnumpyasnpstore=MemoryStore(mode="w")
root=Group.create(store)
nparray=np.array([1], dtype=np.int8)
a=root.create_array(
"/0/0",
shape=nparray.shape,
chunks=(1,),
dtype=nparray.dtype.str,
attributes={},
# compressor=compressor, # TODO: FIXMEfill_value=nparray.dtype.type(0),
)
a[:] =nparrayprint(a[:]) # [1]store.close()
print(a[:]) # [0]

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

I can replicate this locally. store.close is quite minimal so I think our problem lies elsewhere. I will investigate.

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
@dcherian

Copy link
Copy Markdown
ContributorAuthor

pre-commit.ci autofix

Sign up for freeto 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.

6 participants

@dcherian@pep8speaks@d-v-b@jhamman@Zac-HD@joshmoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add hypothesis property tests - #1746

Merged
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests
Aug 8, 2024
Merged

Add hypothesis property tests#1746
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests

Conversation

@dcherian

@dcheriandcherian commented Apr 5, 2024

Copy link
Copy Markdown
Contributor

After mamba install hypothesis

Use

python -m pytest --capture=no --hypothesis-verbosity=verbose test_properties.py

to see all the things it tries.

This was a quick attempt at a property test.

The other thing you can do is a "Stateful" test (e.g. https://github.com/pydata/xarray/blob/main/properties/test_index_manipulation.py)

which runs an arbitrary sequence of manipulations (e.g. add array, rename, move, delete, modify array, copy), and checks for consistency at each point.

cc @Zac-HD

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@pep8speaks

pep8speaks commented Apr 5, 2024

Copy link
Copy Markdown

Hello @dcherian! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

Line 5:1: E402 module level import not at top of file
Line 6:1: E402 module level import not at top of file
Line 8:1: E402 module level import not at top of file
Line 9:1: E402 module level import not at top of file
Line 10:1: E402 module level import not at top of file
Line 11:1: E402 module level import not at top of file
Line 12:1: E402 module level import not at top of file
Line 14:1: E402 module level import not at top of file
Line 15:1: E402 module level import not at top of file
Line 17:1: E266 too many leading '#' for block comment

Comment last updated at 2024-04-05 17:47:12 UTC

Comment threadtests/test_properties.py Outdated
Comment on lines +77 to +92
elif path == "/":
assert name is not None
array_path = name
array_name = "/" + name
else:
assert name is not None
array_path = f"{path}/{name}"
array_name = "/" + array_path

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

totally not obvious!

Comment threadtests/test_properties.py Outdated
@jhammanjhamman mentioned this pull request Apr 5, 2024
@dcherian
dcherian marked this pull request as draft April 11, 2024 16:20
1. Roundtrip a numpy array
2. Basic Indexing
@dcheriandcherian mentioned this pull request Jun 4, 2024
5 tasks
@dcherian

Copy link
Copy Markdown
ContributorAuthor

Some input needed:

  1. Should this be a separate action or folded in to the existing actions? I lean former. It's fast now (47s) but it could get slower in the future.
  2. There's more to make strategies.py actually useful as public API but I'd like to punt that to the future.
  3. I'll make comments where I'd like a careful review.

Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment on lines +74 to +75
# TODO: clean this up
if path is None and name is None:

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this mess be cleaned up?

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
* v3: (22 commits)
[v3] `Buffer` ensure correct subclass based on the `BufferPrototype` argument (zarr-developers#1974)
Fix doc build (zarr-developers#1987)
Fix doc build warnings (zarr-developers#1985)
Automatically generate API reference docs (zarr-developers#1918)
Update `RemoteStore.__str__` and add UPath tests (zarr-developers#1964)
[v3] Elevate codec pipeline (zarr-developers#1932)
0 dim arrays: indexing (zarr-developers#1980)
`parse_shapelike` allows 0 (zarr-developers#1979)
Clean up typing and docs for indexing (zarr-developers#1961)
add json indentation to config (zarr-developers#1952)
chore: update pre-commit hooks (zarr-developers#1973)
Bump pypa/gh-action-pypi-publish in the actions group (zarr-developers#1969)
chore: update pre-commit hooks (zarr-developers#1957)
Update release.rst (zarr-developers#1960)
doc: update release notes for 3.0.0.alpha (zarr-developers#1959)
Basic working FsspecStore (zarr-developers#1785)
Feature: Top level V3 API (zarr-developers#1884)
Buffer Prototype Argument (zarr-developers#1910)
Create issue-metrics.yml
fixes bug in transpose (zarr-developers#1949)
...
* v3:
Allow 'chunks' as an alias for 'chunk_shape' in array creation. (zarr-developers#1991)
* v3: (22 commits)
chore: update pre-commit hooks (zarr-developers#2051)
Apply ruff/flake8-bandit rule B006 (zarr-developers#2049)
Move fixtures to `tests` (zarr-developers#1813)
Multiple imports for an import name (zarr-developers#2047)
Redundant list comprehension (zarr-developers#2048)
chore: update pre-commit hooks (zarr-developers#2039)
Cast fill value to array's dtype (zarr-developers#2020)
chore: update pre-commit hooks (zarr-developers#2017)
make shardingcodec pickleable (zarr-developers#2011)
doc: copy 3.0.0.alpha changelog into release.rst (zarr-developers#2007)
build(ci): enable python 3.12 in github actions (zarr-developers#2005)
Bump NumPy to 2.0 (zarr-developers#1983)
chore: update pre-commit hooks (zarr-developers#1989)
Fix indexing with bools (zarr-developers#1968)
Fix string interpolation (zarr-developers#1998)
Unnecessary comprehension (zarr-developers#1997)
Stop ignoring these ruff rules (zarr-developers#2001)
Merge collapsible if statements (zarr-developers#1999)
Unnecessary comprehension (zarr-developers#1996)
Handle Path in `make_store_path` (zarr-developers#1992)
...
@dcheriandcherian changed the title Add example hypothesis roundtrip testAdd hypothesis property testsJul 25, 2024
@dcherian
dcherian marked this pull request as ready for review July 25, 2024 03:31
@dcherian
dcherian requested a review from jhammanJuly 25, 2024 03:32
Comment threadsrc/zarr/strategies.py
@dcherian

Copy link
Copy Markdown
ContributorAuthor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

definitely! Given that I know nothing about hypothesis, how can I replicate this failure locally?

@dcherian

Copy link
Copy Markdown
ContributorAuthor

This may be user error. It's sensitive to the store.close()

importzarrfromzarr.arrayimportArrayfromzarr.groupimportGroupfromzarr.storeimportMemoryStoreimportnumpyasnpstore=MemoryStore(mode="w")
root=Group.create(store)
nparray=np.array([1], dtype=np.int8)
a=root.create_array(
"/0/0",
shape=nparray.shape,
chunks=(1,),
dtype=nparray.dtype.str,
attributes={},
# compressor=compressor, # TODO: FIXMEfill_value=nparray.dtype.type(0),
)
a[:] =nparrayprint(a[:]) # [1]store.close()
print(a[:]) # [0]

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

I can replicate this locally. store.close is quite minimal so I think our problem lies elsewhere. I will investigate.

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
@dcherian

Copy link
Copy Markdown
ContributorAuthor

pre-commit.ci autofix

Sign up for freeto 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.

6 participants

@dcherian@pep8speaks@d-v-b@jhamman@Zac-HD@joshmoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add hypothesis property tests - #1746

Merged
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests
Aug 8, 2024
Merged

Add hypothesis property tests#1746
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests

Conversation

@dcherian

@dcheriandcherian commented Apr 5, 2024

Copy link
Copy Markdown
Contributor

After mamba install hypothesis

Use

python -m pytest --capture=no --hypothesis-verbosity=verbose test_properties.py

to see all the things it tries.

This was a quick attempt at a property test.

The other thing you can do is a "Stateful" test (e.g. https://github.com/pydata/xarray/blob/main/properties/test_index_manipulation.py)

which runs an arbitrary sequence of manipulations (e.g. add array, rename, move, delete, modify array, copy), and checks for consistency at each point.

cc @Zac-HD

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@pep8speaks

pep8speaks commented Apr 5, 2024

Copy link
Copy Markdown

Hello @dcherian! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

Line 5:1: E402 module level import not at top of file
Line 6:1: E402 module level import not at top of file
Line 8:1: E402 module level import not at top of file
Line 9:1: E402 module level import not at top of file
Line 10:1: E402 module level import not at top of file
Line 11:1: E402 module level import not at top of file
Line 12:1: E402 module level import not at top of file
Line 14:1: E402 module level import not at top of file
Line 15:1: E402 module level import not at top of file
Line 17:1: E266 too many leading '#' for block comment

Comment last updated at 2024-04-05 17:47:12 UTC

Comment threadtests/test_properties.py Outdated
Comment on lines +77 to +92
elif path == "/":
assert name is not None
array_path = name
array_name = "/" + name
else:
assert name is not None
array_path = f"{path}/{name}"
array_name = "/" + array_path

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

totally not obvious!

Comment threadtests/test_properties.py Outdated
@jhammanjhamman mentioned this pull request Apr 5, 2024
@dcherian
dcherian marked this pull request as draft April 11, 2024 16:20
1. Roundtrip a numpy array
2. Basic Indexing
@dcheriandcherian mentioned this pull request Jun 4, 2024
5 tasks
@dcherian

Copy link
Copy Markdown
ContributorAuthor

Some input needed:

  1. Should this be a separate action or folded in to the existing actions? I lean former. It's fast now (47s) but it could get slower in the future.
  2. There's more to make strategies.py actually useful as public API but I'd like to punt that to the future.
  3. I'll make comments where I'd like a careful review.

Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment on lines +74 to +75
# TODO: clean this up
if path is None and name is None:

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this mess be cleaned up?

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
* v3: (22 commits)
[v3] `Buffer` ensure correct subclass based on the `BufferPrototype` argument (zarr-developers#1974)
Fix doc build (zarr-developers#1987)
Fix doc build warnings (zarr-developers#1985)
Automatically generate API reference docs (zarr-developers#1918)
Update `RemoteStore.__str__` and add UPath tests (zarr-developers#1964)
[v3] Elevate codec pipeline (zarr-developers#1932)
0 dim arrays: indexing (zarr-developers#1980)
`parse_shapelike` allows 0 (zarr-developers#1979)
Clean up typing and docs for indexing (zarr-developers#1961)
add json indentation to config (zarr-developers#1952)
chore: update pre-commit hooks (zarr-developers#1973)
Bump pypa/gh-action-pypi-publish in the actions group (zarr-developers#1969)
chore: update pre-commit hooks (zarr-developers#1957)
Update release.rst (zarr-developers#1960)
doc: update release notes for 3.0.0.alpha (zarr-developers#1959)
Basic working FsspecStore (zarr-developers#1785)
Feature: Top level V3 API (zarr-developers#1884)
Buffer Prototype Argument (zarr-developers#1910)
Create issue-metrics.yml
fixes bug in transpose (zarr-developers#1949)
...
* v3:
Allow 'chunks' as an alias for 'chunk_shape' in array creation. (zarr-developers#1991)
* v3: (22 commits)
chore: update pre-commit hooks (zarr-developers#2051)
Apply ruff/flake8-bandit rule B006 (zarr-developers#2049)
Move fixtures to `tests` (zarr-developers#1813)
Multiple imports for an import name (zarr-developers#2047)
Redundant list comprehension (zarr-developers#2048)
chore: update pre-commit hooks (zarr-developers#2039)
Cast fill value to array's dtype (zarr-developers#2020)
chore: update pre-commit hooks (zarr-developers#2017)
make shardingcodec pickleable (zarr-developers#2011)
doc: copy 3.0.0.alpha changelog into release.rst (zarr-developers#2007)
build(ci): enable python 3.12 in github actions (zarr-developers#2005)
Bump NumPy to 2.0 (zarr-developers#1983)
chore: update pre-commit hooks (zarr-developers#1989)
Fix indexing with bools (zarr-developers#1968)
Fix string interpolation (zarr-developers#1998)
Unnecessary comprehension (zarr-developers#1997)
Stop ignoring these ruff rules (zarr-developers#2001)
Merge collapsible if statements (zarr-developers#1999)
Unnecessary comprehension (zarr-developers#1996)
Handle Path in `make_store_path` (zarr-developers#1992)
...
@dcheriandcherian changed the title Add example hypothesis roundtrip testAdd hypothesis property testsJul 25, 2024
@dcherian
dcherian marked this pull request as ready for review July 25, 2024 03:31
@dcherian
dcherian requested a review from jhammanJuly 25, 2024 03:32
Comment threadsrc/zarr/strategies.py
@dcherian

Copy link
Copy Markdown
ContributorAuthor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

definitely! Given that I know nothing about hypothesis, how can I replicate this failure locally?

@dcherian

Copy link
Copy Markdown
ContributorAuthor

This may be user error. It's sensitive to the store.close()

importzarrfromzarr.arrayimportArrayfromzarr.groupimportGroupfromzarr.storeimportMemoryStoreimportnumpyasnpstore=MemoryStore(mode="w")
root=Group.create(store)
nparray=np.array([1], dtype=np.int8)
a=root.create_array(
"/0/0",
shape=nparray.shape,
chunks=(1,),
dtype=nparray.dtype.str,
attributes={},
# compressor=compressor, # TODO: FIXMEfill_value=nparray.dtype.type(0),
)
a[:] =nparrayprint(a[:]) # [1]store.close()
print(a[:]) # [0]

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

I can replicate this locally. store.close is quite minimal so I think our problem lies elsewhere. I will investigate.

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
@dcherian

Copy link
Copy Markdown
ContributorAuthor

pre-commit.ci autofix

Sign up for freeto 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.

6 participants

@dcherian@pep8speaks@d-v-b@jhamman@Zac-HD@joshmoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add hypothesis property tests - #1746

Merged
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests
Aug 8, 2024
Merged

Add hypothesis property tests#1746
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests

Conversation

@dcherian

@dcheriandcherian commented Apr 5, 2024

Copy link
Copy Markdown
Contributor

After mamba install hypothesis

Use

python -m pytest --capture=no --hypothesis-verbosity=verbose test_properties.py

to see all the things it tries.

This was a quick attempt at a property test.

The other thing you can do is a "Stateful" test (e.g. https://github.com/pydata/xarray/blob/main/properties/test_index_manipulation.py)

which runs an arbitrary sequence of manipulations (e.g. add array, rename, move, delete, modify array, copy), and checks for consistency at each point.

cc @Zac-HD

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@pep8speaks

pep8speaks commented Apr 5, 2024

Copy link
Copy Markdown

Hello @dcherian! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

Line 5:1: E402 module level import not at top of file
Line 6:1: E402 module level import not at top of file
Line 8:1: E402 module level import not at top of file
Line 9:1: E402 module level import not at top of file
Line 10:1: E402 module level import not at top of file
Line 11:1: E402 module level import not at top of file
Line 12:1: E402 module level import not at top of file
Line 14:1: E402 module level import not at top of file
Line 15:1: E402 module level import not at top of file
Line 17:1: E266 too many leading '#' for block comment

Comment last updated at 2024-04-05 17:47:12 UTC

Comment threadtests/test_properties.py Outdated
Comment on lines +77 to +92
elif path == "/":
assert name is not None
array_path = name
array_name = "/" + name
else:
assert name is not None
array_path = f"{path}/{name}"
array_name = "/" + array_path

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

totally not obvious!

Comment threadtests/test_properties.py Outdated
@jhammanjhamman mentioned this pull request Apr 5, 2024
@dcherian
dcherian marked this pull request as draft April 11, 2024 16:20
1. Roundtrip a numpy array
2. Basic Indexing
@dcheriandcherian mentioned this pull request Jun 4, 2024
5 tasks
@dcherian

Copy link
Copy Markdown
ContributorAuthor

Some input needed:

  1. Should this be a separate action or folded in to the existing actions? I lean former. It's fast now (47s) but it could get slower in the future.
  2. There's more to make strategies.py actually useful as public API but I'd like to punt that to the future.
  3. I'll make comments where I'd like a careful review.

Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment on lines +74 to +75
# TODO: clean this up
if path is None and name is None:

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this mess be cleaned up?

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
* v3: (22 commits)
[v3] `Buffer` ensure correct subclass based on the `BufferPrototype` argument (zarr-developers#1974)
Fix doc build (zarr-developers#1987)
Fix doc build warnings (zarr-developers#1985)
Automatically generate API reference docs (zarr-developers#1918)
Update `RemoteStore.__str__` and add UPath tests (zarr-developers#1964)
[v3] Elevate codec pipeline (zarr-developers#1932)
0 dim arrays: indexing (zarr-developers#1980)
`parse_shapelike` allows 0 (zarr-developers#1979)
Clean up typing and docs for indexing (zarr-developers#1961)
add json indentation to config (zarr-developers#1952)
chore: update pre-commit hooks (zarr-developers#1973)
Bump pypa/gh-action-pypi-publish in the actions group (zarr-developers#1969)
chore: update pre-commit hooks (zarr-developers#1957)
Update release.rst (zarr-developers#1960)
doc: update release notes for 3.0.0.alpha (zarr-developers#1959)
Basic working FsspecStore (zarr-developers#1785)
Feature: Top level V3 API (zarr-developers#1884)
Buffer Prototype Argument (zarr-developers#1910)
Create issue-metrics.yml
fixes bug in transpose (zarr-developers#1949)
...
* v3:
Allow 'chunks' as an alias for 'chunk_shape' in array creation. (zarr-developers#1991)
* v3: (22 commits)
chore: update pre-commit hooks (zarr-developers#2051)
Apply ruff/flake8-bandit rule B006 (zarr-developers#2049)
Move fixtures to `tests` (zarr-developers#1813)
Multiple imports for an import name (zarr-developers#2047)
Redundant list comprehension (zarr-developers#2048)
chore: update pre-commit hooks (zarr-developers#2039)
Cast fill value to array's dtype (zarr-developers#2020)
chore: update pre-commit hooks (zarr-developers#2017)
make shardingcodec pickleable (zarr-developers#2011)
doc: copy 3.0.0.alpha changelog into release.rst (zarr-developers#2007)
build(ci): enable python 3.12 in github actions (zarr-developers#2005)
Bump NumPy to 2.0 (zarr-developers#1983)
chore: update pre-commit hooks (zarr-developers#1989)
Fix indexing with bools (zarr-developers#1968)
Fix string interpolation (zarr-developers#1998)
Unnecessary comprehension (zarr-developers#1997)
Stop ignoring these ruff rules (zarr-developers#2001)
Merge collapsible if statements (zarr-developers#1999)
Unnecessary comprehension (zarr-developers#1996)
Handle Path in `make_store_path` (zarr-developers#1992)
...
@dcheriandcherian changed the title Add example hypothesis roundtrip testAdd hypothesis property testsJul 25, 2024
@dcherian
dcherian marked this pull request as ready for review July 25, 2024 03:31
@dcherian
dcherian requested a review from jhammanJuly 25, 2024 03:32
Comment threadsrc/zarr/strategies.py
@dcherian

Copy link
Copy Markdown
ContributorAuthor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

definitely! Given that I know nothing about hypothesis, how can I replicate this failure locally?

@dcherian

Copy link
Copy Markdown
ContributorAuthor

This may be user error. It's sensitive to the store.close()

importzarrfromzarr.arrayimportArrayfromzarr.groupimportGroupfromzarr.storeimportMemoryStoreimportnumpyasnpstore=MemoryStore(mode="w")
root=Group.create(store)
nparray=np.array([1], dtype=np.int8)
a=root.create_array(
"/0/0",
shape=nparray.shape,
chunks=(1,),
dtype=nparray.dtype.str,
attributes={},
# compressor=compressor, # TODO: FIXMEfill_value=nparray.dtype.type(0),
)
a[:] =nparrayprint(a[:]) # [1]store.close()
print(a[:]) # [0]

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

I can replicate this locally. store.close is quite minimal so I think our problem lies elsewhere. I will investigate.

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
@dcherian

Copy link
Copy Markdown
ContributorAuthor

pre-commit.ci autofix

Sign up for freeto 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.

6 participants

@dcherian@pep8speaks@d-v-b@jhamman@Zac-HD@joshmoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add hypothesis property tests - #1746

Merged
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests
Aug 8, 2024
Merged

Add hypothesis property tests#1746
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests

Conversation

@dcherian

@dcheriandcherian commented Apr 5, 2024

Copy link
Copy Markdown
Contributor

After mamba install hypothesis

Use

python -m pytest --capture=no --hypothesis-verbosity=verbose test_properties.py

to see all the things it tries.

This was a quick attempt at a property test.

The other thing you can do is a "Stateful" test (e.g. https://github.com/pydata/xarray/blob/main/properties/test_index_manipulation.py)

which runs an arbitrary sequence of manipulations (e.g. add array, rename, move, delete, modify array, copy), and checks for consistency at each point.

cc @Zac-HD

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@pep8speaks

pep8speaks commented Apr 5, 2024

Copy link
Copy Markdown

Hello @dcherian! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

Line 5:1: E402 module level import not at top of file
Line 6:1: E402 module level import not at top of file
Line 8:1: E402 module level import not at top of file
Line 9:1: E402 module level import not at top of file
Line 10:1: E402 module level import not at top of file
Line 11:1: E402 module level import not at top of file
Line 12:1: E402 module level import not at top of file
Line 14:1: E402 module level import not at top of file
Line 15:1: E402 module level import not at top of file
Line 17:1: E266 too many leading '#' for block comment

Comment last updated at 2024-04-05 17:47:12 UTC

Comment threadtests/test_properties.py Outdated
Comment on lines +77 to +92
elif path == "/":
assert name is not None
array_path = name
array_name = "/" + name
else:
assert name is not None
array_path = f"{path}/{name}"
array_name = "/" + array_path

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

totally not obvious!

Comment threadtests/test_properties.py Outdated
@jhammanjhamman mentioned this pull request Apr 5, 2024
@dcherian
dcherian marked this pull request as draft April 11, 2024 16:20
1. Roundtrip a numpy array
2. Basic Indexing
@dcheriandcherian mentioned this pull request Jun 4, 2024
5 tasks
@dcherian

Copy link
Copy Markdown
ContributorAuthor

Some input needed:

  1. Should this be a separate action or folded in to the existing actions? I lean former. It's fast now (47s) but it could get slower in the future.
  2. There's more to make strategies.py actually useful as public API but I'd like to punt that to the future.
  3. I'll make comments where I'd like a careful review.

Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment on lines +74 to +75
# TODO: clean this up
if path is None and name is None:

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this mess be cleaned up?

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
* v3: (22 commits)
[v3] `Buffer` ensure correct subclass based on the `BufferPrototype` argument (zarr-developers#1974)
Fix doc build (zarr-developers#1987)
Fix doc build warnings (zarr-developers#1985)
Automatically generate API reference docs (zarr-developers#1918)
Update `RemoteStore.__str__` and add UPath tests (zarr-developers#1964)
[v3] Elevate codec pipeline (zarr-developers#1932)
0 dim arrays: indexing (zarr-developers#1980)
`parse_shapelike` allows 0 (zarr-developers#1979)
Clean up typing and docs for indexing (zarr-developers#1961)
add json indentation to config (zarr-developers#1952)
chore: update pre-commit hooks (zarr-developers#1973)
Bump pypa/gh-action-pypi-publish in the actions group (zarr-developers#1969)
chore: update pre-commit hooks (zarr-developers#1957)
Update release.rst (zarr-developers#1960)
doc: update release notes for 3.0.0.alpha (zarr-developers#1959)
Basic working FsspecStore (zarr-developers#1785)
Feature: Top level V3 API (zarr-developers#1884)
Buffer Prototype Argument (zarr-developers#1910)
Create issue-metrics.yml
fixes bug in transpose (zarr-developers#1949)
...
* v3:
Allow 'chunks' as an alias for 'chunk_shape' in array creation. (zarr-developers#1991)
* v3: (22 commits)
chore: update pre-commit hooks (zarr-developers#2051)
Apply ruff/flake8-bandit rule B006 (zarr-developers#2049)
Move fixtures to `tests` (zarr-developers#1813)
Multiple imports for an import name (zarr-developers#2047)
Redundant list comprehension (zarr-developers#2048)
chore: update pre-commit hooks (zarr-developers#2039)
Cast fill value to array's dtype (zarr-developers#2020)
chore: update pre-commit hooks (zarr-developers#2017)
make shardingcodec pickleable (zarr-developers#2011)
doc: copy 3.0.0.alpha changelog into release.rst (zarr-developers#2007)
build(ci): enable python 3.12 in github actions (zarr-developers#2005)
Bump NumPy to 2.0 (zarr-developers#1983)
chore: update pre-commit hooks (zarr-developers#1989)
Fix indexing with bools (zarr-developers#1968)
Fix string interpolation (zarr-developers#1998)
Unnecessary comprehension (zarr-developers#1997)
Stop ignoring these ruff rules (zarr-developers#2001)
Merge collapsible if statements (zarr-developers#1999)
Unnecessary comprehension (zarr-developers#1996)
Handle Path in `make_store_path` (zarr-developers#1992)
...
@dcheriandcherian changed the title Add example hypothesis roundtrip testAdd hypothesis property testsJul 25, 2024
@dcherian
dcherian marked this pull request as ready for review July 25, 2024 03:31
@dcherian
dcherian requested a review from jhammanJuly 25, 2024 03:32
Comment threadsrc/zarr/strategies.py
@dcherian

Copy link
Copy Markdown
ContributorAuthor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

definitely! Given that I know nothing about hypothesis, how can I replicate this failure locally?

@dcherian

Copy link
Copy Markdown
ContributorAuthor

This may be user error. It's sensitive to the store.close()

importzarrfromzarr.arrayimportArrayfromzarr.groupimportGroupfromzarr.storeimportMemoryStoreimportnumpyasnpstore=MemoryStore(mode="w")
root=Group.create(store)
nparray=np.array([1], dtype=np.int8)
a=root.create_array(
"/0/0",
shape=nparray.shape,
chunks=(1,),
dtype=nparray.dtype.str,
attributes={},
# compressor=compressor, # TODO: FIXMEfill_value=nparray.dtype.type(0),
)
a[:] =nparrayprint(a[:]) # [1]store.close()
print(a[:]) # [0]

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

I can replicate this locally. store.close is quite minimal so I think our problem lies elsewhere. I will investigate.

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
@dcherian

Copy link
Copy Markdown
ContributorAuthor

pre-commit.ci autofix

Sign up for freeto 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.

6 participants

@dcherian@pep8speaks@d-v-b@jhamman@Zac-HD@joshmoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add hypothesis property tests - #1746

Merged
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests
Aug 8, 2024
Merged

Add hypothesis property tests#1746
jhamman merged 26 commits into
zarr-developers:v3from
dcherian:hypothesis-tests

Conversation

@dcherian

@dcheriandcherian commented Apr 5, 2024

Copy link
Copy Markdown
Contributor

After mamba install hypothesis

Use

python -m pytest --capture=no --hypothesis-verbosity=verbose test_properties.py

to see all the things it tries.

This was a quick attempt at a property test.

The other thing you can do is a "Stateful" test (e.g. https://github.com/pydata/xarray/blob/main/properties/test_index_manipulation.py)

which runs an arbitrary sequence of manipulations (e.g. add array, rename, move, delete, modify array, copy), and checks for consistency at each point.

cc @Zac-HD

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@pep8speaks

pep8speaks commented Apr 5, 2024

Copy link
Copy Markdown

Hello @dcherian! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

Line 5:1: E402 module level import not at top of file
Line 6:1: E402 module level import not at top of file
Line 8:1: E402 module level import not at top of file
Line 9:1: E402 module level import not at top of file
Line 10:1: E402 module level import not at top of file
Line 11:1: E402 module level import not at top of file
Line 12:1: E402 module level import not at top of file
Line 14:1: E402 module level import not at top of file
Line 15:1: E402 module level import not at top of file
Line 17:1: E266 too many leading '#' for block comment

Comment last updated at 2024-04-05 17:47:12 UTC

Comment threadtests/test_properties.py Outdated
Comment on lines +77 to +92
elif path == "/":
assert name is not None
array_path = name
array_name = "/" + name
else:
assert name is not None
array_path = f"{path}/{name}"
array_name = "/" + array_path

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

totally not obvious!

Comment threadtests/test_properties.py Outdated
@jhammanjhamman mentioned this pull request Apr 5, 2024
@dcherian
dcherian marked this pull request as draft April 11, 2024 16:20
1. Roundtrip a numpy array
2. Basic Indexing
@dcheriandcherian mentioned this pull request Jun 4, 2024
5 tasks
@dcherian

Copy link
Copy Markdown
ContributorAuthor

Some input needed:

  1. Should this be a separate action or folded in to the existing actions? I lean former. It's fast now (47s) but it could get slower in the future.
  2. There's more to make strategies.py actually useful as public API but I'd like to punt that to the future.
  3. I'll make comments where I'd like a careful review.

Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment on lines +74 to +75
# TODO: clean this up
if path is None and name is None:

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this mess be cleaned up?

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
* v3: (22 commits)
[v3] `Buffer` ensure correct subclass based on the `BufferPrototype` argument (zarr-developers#1974)
Fix doc build (zarr-developers#1987)
Fix doc build warnings (zarr-developers#1985)
Automatically generate API reference docs (zarr-developers#1918)
Update `RemoteStore.__str__` and add UPath tests (zarr-developers#1964)
[v3] Elevate codec pipeline (zarr-developers#1932)
0 dim arrays: indexing (zarr-developers#1980)
`parse_shapelike` allows 0 (zarr-developers#1979)
Clean up typing and docs for indexing (zarr-developers#1961)
add json indentation to config (zarr-developers#1952)
chore: update pre-commit hooks (zarr-developers#1973)
Bump pypa/gh-action-pypi-publish in the actions group (zarr-developers#1969)
chore: update pre-commit hooks (zarr-developers#1957)
Update release.rst (zarr-developers#1960)
doc: update release notes for 3.0.0.alpha (zarr-developers#1959)
Basic working FsspecStore (zarr-developers#1785)
Feature: Top level V3 API (zarr-developers#1884)
Buffer Prototype Argument (zarr-developers#1910)
Create issue-metrics.yml
fixes bug in transpose (zarr-developers#1949)
...
* v3:
Allow 'chunks' as an alias for 'chunk_shape' in array creation. (zarr-developers#1991)
* v3: (22 commits)
chore: update pre-commit hooks (zarr-developers#2051)
Apply ruff/flake8-bandit rule B006 (zarr-developers#2049)
Move fixtures to `tests` (zarr-developers#1813)
Multiple imports for an import name (zarr-developers#2047)
Redundant list comprehension (zarr-developers#2048)
chore: update pre-commit hooks (zarr-developers#2039)
Cast fill value to array's dtype (zarr-developers#2020)
chore: update pre-commit hooks (zarr-developers#2017)
make shardingcodec pickleable (zarr-developers#2011)
doc: copy 3.0.0.alpha changelog into release.rst (zarr-developers#2007)
build(ci): enable python 3.12 in github actions (zarr-developers#2005)
Bump NumPy to 2.0 (zarr-developers#1983)
chore: update pre-commit hooks (zarr-developers#1989)
Fix indexing with bools (zarr-developers#1968)
Fix string interpolation (zarr-developers#1998)
Unnecessary comprehension (zarr-developers#1997)
Stop ignoring these ruff rules (zarr-developers#2001)
Merge collapsible if statements (zarr-developers#1999)
Unnecessary comprehension (zarr-developers#1996)
Handle Path in `make_store_path` (zarr-developers#1992)
...
@dcheriandcherian changed the title Add example hypothesis roundtrip testAdd hypothesis property testsJul 25, 2024
@dcherian
dcherian marked this pull request as ready for review July 25, 2024 03:31
@dcherian
dcherian requested a review from jhammanJuly 25, 2024 03:32
Comment threadsrc/zarr/strategies.py
@dcherian

Copy link
Copy Markdown
ContributorAuthor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

This looks like a real failure:

 E AssertionError: E Arrays are not equal
E E Mismatched elements: 1 / 1 (100%)
E Max absolute difference: 1
E Max relative difference: inf
E x: array([1], dtype=int8)
E y: array([0], dtype=int8)

Apparently it is not roundtripping np.array([1], dtype=np.int8)@d-v-b are you able to take a look?

definitely! Given that I know nothing about hypothesis, how can I replicate this failure locally?

@dcherian

Copy link
Copy Markdown
ContributorAuthor

This may be user error. It's sensitive to the store.close()

importzarrfromzarr.arrayimportArrayfromzarr.groupimportGroupfromzarr.storeimportMemoryStoreimportnumpyasnpstore=MemoryStore(mode="w")
root=Group.create(store)
nparray=np.array([1], dtype=np.int8)
a=root.create_array(
"/0/0",
shape=nparray.shape,
chunks=(1,),
dtype=nparray.dtype.str,
attributes={},
# compressor=compressor, # TODO: FIXMEfill_value=nparray.dtype.type(0),
)
a[:] =nparrayprint(a[:]) # [1]store.close()
print(a[:]) # [0]

@d-v-b

d-v-b commented Aug 5, 2024

Copy link
Copy Markdown
Contributor

I can replicate this locally. store.close is quite minimal so I think our problem lies elsewhere. I will investigate.

Comment threadsrc/zarr/strategies.py
Comment threadsrc/zarr/strategies.py Outdated
Comment threadsrc/zarr/strategies.py Outdated
@dcherian

Copy link
Copy Markdown
ContributorAuthor

pre-commit.ci autofix

Sign up for freeto 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.

6 participants

@dcherian@pep8speaks@d-v-b@jhamman@Zac-HD@joshmoore