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 a warning category and stacklevel to rerun warnings.warn calls #2985

Merged
merged 1 commit into from Aug 15, 2023

Conversation

jleibs
Copy link
Member

@jleibs jleibs commented Aug 15, 2023

Resolves: #2408

What:

Stop overriding the global warnings.formatwarning

Instead introduce a RerunWarning category and also set stacklevel appropriately for better warning context.

Consider this example:

import warnings
import rerun as rr

warnings.warn("my warning")
rr.log_points("foo", [1, 2, 3])
rr.init("foo")
rr.log_points("foo", "not a point")

Before: wrongly annotated user-warning. No way to identify source of error.

WARNING:rerun:my warning
WARNING:rerun:Rerun is disabled - log_points() call ignored. You must call rerun.init before using log APIs.
WARNING:root:Ignoring rerun log call: Traceback (most recent call last):
  File "/home/jleibs/venv/lib/python3.10/site-packages/rerun_sdk/rerun/log/log_decorator.py", line 47, in wrapper
    return func(*args, **kwargs)
  File "/home/jleibs/venv/lib/python3.10/site-packages/rerun_sdk/rerun/log/points.py", line 228, in log_points
    positions = np.require(positions, dtype="float32")
  File "/home/jleibs/venv/lib/python3.10/site-packages/numpy/core/_asarray.py", line 110, in require
    return asanyarray(a, dtype=dtype)
ValueError: could not convert string to float: 'not a point'

After: Consistent pythonic warnings and actionable line-numbers.

/home/jleibs/rerun/test.py:4: UserWarning: my warning
  warnings.warn("my warning")
/home/jleibs/rerun/test.py:5: RerunWarning: Rerun is disabled - log_points() call ignored. You must call rerun.init before using log APIs.
  rr.log_points("foo", [1, 2, 3])
/home/jleibs/rerun/test.py:7: RerunWarning: Ignoring rerun log call: Traceback (most recent call last):
  File "/home/jleibs/rerun/rerun_py/rerun_sdk/rerun/log/log_decorator.py", line 51, in wrapper
    return func(*args, **kwargs)
  File "/home/jleibs/rerun/rerun_py/rerun_sdk/rerun/log/points.py", line 208, in log_points
    positions = np.require(positions, dtype="float32")
  File "/home/jleibs/rerun/venv/lib/python3.10/site-packages/numpy/core/_asarray.py", line 106, in require
    return asanyarray(a, dtype=dtype)
ValueError: could not convert string to float: 'not a point'

  rr.log_points("foo", "not a point")

Checklist

@jleibs jleibs marked this pull request as ready for review August 15, 2023 14:14
@jleibs jleibs added the 🐍 Python API Python logging API label Aug 15, 2023
@Wumpf Wumpf assigned Wumpf and unassigned Wumpf Aug 15, 2023
@Wumpf Wumpf self-requested a review August 15, 2023 14:30
Copy link
Member

@Wumpf Wumpf left a comment

Choose a reason for hiding this comment

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

nice!
maybe a candidate for 0.8.1?

@emilk emilk added this to the 0.8.1 milestone Aug 15, 2023
@Wumpf Wumpf merged commit 67ba639 into main Aug 15, 2023
24 of 27 checks passed
@Wumpf Wumpf deleted the jleibs/rerun_warnings branch August 15, 2023 16:58
emilk pushed a commit that referenced this pull request Aug 17, 2023
…2985)

Resolves: #2408

### What:
Stop overriding the global `warnings.formatwarning`

Instead introduce a RerunWarning category and also set stacklevel
appropriately for better warning context.

Consider this example:
```
import warnings
import rerun as rr

warnings.warn("my warning")
rr.log_points("foo", [1, 2, 3])
rr.init("foo")
rr.log_points("foo", "not a point")
```

Before: wrongly annotated user-warning. No way to identify source of
error.
```
WARNING:rerun:my warning
WARNING:rerun:Rerun is disabled - log_points() call ignored. You must call rerun.init before using log APIs.
WARNING:root:Ignoring rerun log call: Traceback (most recent call last):
  File "/home/jleibs/venv/lib/python3.10/site-packages/rerun_sdk/rerun/log/log_decorator.py", line 47, in wrapper
    return func(*args, **kwargs)
  File "/home/jleibs/venv/lib/python3.10/site-packages/rerun_sdk/rerun/log/points.py", line 228, in log_points
    positions = np.require(positions, dtype="float32")
  File "/home/jleibs/venv/lib/python3.10/site-packages/numpy/core/_asarray.py", line 110, in require
    return asanyarray(a, dtype=dtype)
ValueError: could not convert string to float: 'not a point'
```

After: Consistent pythonic warnings and actionable line-numbers.
```
/home/jleibs/rerun/test.py:4: UserWarning: my warning
  warnings.warn("my warning")
/home/jleibs/rerun/test.py:5: RerunWarning: Rerun is disabled - log_points() call ignored. You must call rerun.init before using log APIs.
  rr.log_points("foo", [1, 2, 3])
/home/jleibs/rerun/test.py:7: RerunWarning: Ignoring rerun log call: Traceback (most recent call last):
  File "/home/jleibs/rerun/rerun_py/rerun_sdk/rerun/log/log_decorator.py", line 51, in wrapper
    return func(*args, **kwargs)
  File "/home/jleibs/rerun/rerun_py/rerun_sdk/rerun/log/points.py", line 208, in log_points
    positions = np.require(positions, dtype="float32")
  File "/home/jleibs/rerun/venv/lib/python3.10/site-packages/numpy/core/_asarray.py", line 106, in require
    return asanyarray(a, dtype=dtype)
ValueError: could not convert string to float: 'not a point'

  rr.log_points("foo", "not a point")
```

### Checklist
* [x] I have read and agree to [Contributor
Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and
the [Code of
Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)
* [x] I've included a screenshot or gif (if applicable)
* [x] I have tested [demo.rerun.io](https://demo.rerun.io/pr/2985) (if
applicable)

- [PR Build Summary](https://build.rerun.io/pr/2985)
- [Docs
preview](https://rerun.io/preview/pr%3Ajleibs%2Frerun_warnings/docs)
- [Examples
preview](https://rerun.io/preview/pr%3Ajleibs%2Frerun_warnings/examples)
@emilk emilk mentioned this pull request Aug 17, 2023
3 tasks
emilk pushed a commit that referenced this pull request Aug 17, 2023
…2985)

Resolves: #2408

### What:
Stop overriding the global `warnings.formatwarning`

Instead introduce a RerunWarning category and also set stacklevel
appropriately for better warning context.

Consider this example:
```
import warnings
import rerun as rr

warnings.warn("my warning")
rr.log_points("foo", [1, 2, 3])
rr.init("foo")
rr.log_points("foo", "not a point")
```

Before: wrongly annotated user-warning. No way to identify source of
error.
```
WARNING:rerun:my warning
WARNING:rerun:Rerun is disabled - log_points() call ignored. You must call rerun.init before using log APIs.
WARNING:root:Ignoring rerun log call: Traceback (most recent call last):
  File "/home/jleibs/venv/lib/python3.10/site-packages/rerun_sdk/rerun/log/log_decorator.py", line 47, in wrapper
    return func(*args, **kwargs)
  File "/home/jleibs/venv/lib/python3.10/site-packages/rerun_sdk/rerun/log/points.py", line 228, in log_points
    positions = np.require(positions, dtype="float32")
  File "/home/jleibs/venv/lib/python3.10/site-packages/numpy/core/_asarray.py", line 110, in require
    return asanyarray(a, dtype=dtype)
ValueError: could not convert string to float: 'not a point'
```

After: Consistent pythonic warnings and actionable line-numbers.
```
/home/jleibs/rerun/test.py:4: UserWarning: my warning
  warnings.warn("my warning")
/home/jleibs/rerun/test.py:5: RerunWarning: Rerun is disabled - log_points() call ignored. You must call rerun.init before using log APIs.
  rr.log_points("foo", [1, 2, 3])
/home/jleibs/rerun/test.py:7: RerunWarning: Ignoring rerun log call: Traceback (most recent call last):
  File "/home/jleibs/rerun/rerun_py/rerun_sdk/rerun/log/log_decorator.py", line 51, in wrapper
    return func(*args, **kwargs)
  File "/home/jleibs/rerun/rerun_py/rerun_sdk/rerun/log/points.py", line 208, in log_points
    positions = np.require(positions, dtype="float32")
  File "/home/jleibs/rerun/venv/lib/python3.10/site-packages/numpy/core/_asarray.py", line 106, in require
    return asanyarray(a, dtype=dtype)
ValueError: could not convert string to float: 'not a point'

  rr.log_points("foo", "not a point")
```

### Checklist
* [x] I have read and agree to [Contributor
Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and
the [Code of
Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)
* [x] I've included a screenshot or gif (if applicable)
* [x] I have tested [demo.rerun.io](https://demo.rerun.io/pr/2985) (if
applicable)

- [PR Build Summary](https://build.rerun.io/pr/2985)
- [Docs
preview](https://rerun.io/preview/pr%3Ajleibs%2Frerun_warnings/docs)
- [Examples
preview](https://rerun.io/preview/pr%3Ajleibs%2Frerun_warnings/examples)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐍 Python API Python logging API
Projects
None yet
Development

Successfully merging this pull request may close these issues.

import rerun modifies default warnings, adding rerun: to all warnings
3 participants