Skip to content

Commit

Permalink
More explicit handling of TooManyUnknowns (vs. other resolution errors)
Browse files Browse the repository at this point in the history
Fixes some flake8 warnings
  • Loading branch information
JorisVincent committed Mar 13, 2023
1 parent c2bfe08 commit 5f437bb
Show file tree
Hide file tree
Showing 8 changed files with 25 additions and 19 deletions.
2 changes: 1 addition & 1 deletion stimupy/components/__init__.py
Expand Up @@ -224,7 +224,7 @@ def resolve_grating_params(
length, visual_angle, ppd = resolution.resolve_1D(
length=length, visual_angle=visual_angle, ppd=ppd
)
except ValueError:
except resolution.TooManyUnknownsError:
ppd = ppd
length = length
visual_angle = visual_angle
Expand Down
5 changes: 2 additions & 3 deletions stimupy/components/circulars.py
@@ -1,6 +1,5 @@
import copy
import itertools
import warnings

import numpy as np
import scipy.special as sp
Expand Down Expand Up @@ -196,7 +195,7 @@ def disc_and_rings(
# Try to resolve resolution;
try:
shape, visual_size, ppd = resolution.resolve(shape=shape, visual_size=visual_size, ppd=ppd)
except ValueError:
except resolution.TooManyUnknownsError:
# Check visual_size
visual_size = resolution.validate_visual_size(visual_size)

Expand Down Expand Up @@ -413,7 +412,7 @@ def grating(
# Resolve sizes
try:
shape, visual_size, ppd = resolution.resolve(shape=shape, visual_size=visual_size, ppd=ppd)
except:
except resolution.TooManyUnknownsError:
pass

# Resolve grating
Expand Down
2 changes: 1 addition & 1 deletion stimupy/components/frames.py
Expand Up @@ -170,7 +170,7 @@ def grating(
# Try to resolve resolution
try:
shape, visual_size, ppd = resolution.resolve(shape=shape, visual_size=visual_size, ppd=ppd)
except ValueError:
except resolution.TooManyUnknownsError:
ppd = resolution.validate_ppd(ppd) if ppd is not None else None
shape = resolution.validate_shape(shape) if shape is not None else None
visual_size = (
Expand Down
6 changes: 3 additions & 3 deletions stimupy/components/gratings.py
Expand Up @@ -195,7 +195,7 @@ def square_wave(
# Try to resolve resolution
try:
shape, visual_size, ppd = resolution.resolve(shape=shape, visual_size=visual_size, ppd=ppd)
except ValueError:
except resolution.TooManyUnknownsError:
ppd = resolution.validate_ppd(ppd)
shape = resolution.validate_shape(shape)
visual_size = resolution.validate_visual_size(visual_size)
Expand Down Expand Up @@ -346,7 +346,7 @@ def sine_wave(
# Try to resolve resolution
try:
shape, visual_size, ppd = resolution.resolve(shape=shape, visual_size=visual_size, ppd=ppd)
except ValueError:
except resolution.TooManyUnknownsError:
ppd = resolution.validate_ppd(ppd)
shape = resolution.validate_shape(shape)
visual_size = resolution.validate_visual_size(visual_size)
Expand Down Expand Up @@ -578,7 +578,7 @@ def staircase(
# Try to resolve resolution
try:
shape, visual_size, ppd = resolution.resolve(shape=shape, visual_size=visual_size, ppd=ppd)
except ValueError:
except resolution.TooManyUnknownsError:
ppd = resolution.validate_ppd(ppd)
shape = resolution.validate_shape(shape)
visual_size = resolution.validate_visual_size(visual_size)
Expand Down
2 changes: 1 addition & 1 deletion stimupy/illusions/dungeons.py
Expand Up @@ -125,7 +125,7 @@ def resolve_dungeon_params(
# Try to resolve resolution
try:
shape, visual_size, ppd = resolution.resolve(shape=shape, visual_size=visual_size, ppd=ppd)
except ValueError:
except resolution.TooManyUnknownsError:
ppd = resolution.validate_ppd(ppd)
shape = resolution.validate_shape(shape)
visual_size = resolution.validate_visual_size(visual_size)
Expand Down
4 changes: 2 additions & 2 deletions stimupy/illusions/sbcs.py
Expand Up @@ -527,7 +527,7 @@ def two_sided_with_dots(
try:
shape, visual_size, ppd = resolution.resolve(shape=shape, visual_size=visual_size, ppd=ppd)
visual_size_ = (visual_size[0], visual_size[1] / 2)
except:
except resolution.TooManyUnknownsError:
visual_size_ = None

stim1 = with_dots(
Expand Down Expand Up @@ -618,7 +618,7 @@ def two_sided_dotted(
try:
shape, visual_size, ppd = resolution.resolve(shape=shape, visual_size=visual_size, ppd=ppd)
visual_size_ = (visual_size[0], visual_size[1] / 2)
except:
except resolution.TooManyUnknownsError:
visual_size_ = None

stim1 = dotted(
Expand Down
17 changes: 12 additions & 5 deletions stimupy/utils/resolution.py
@@ -1,6 +1,7 @@
import copy
import warnings
from collections import namedtuple
import copy

import numpy as np

Visual_size = namedtuple("Visual_size", "height width")
Expand All @@ -12,6 +13,10 @@ class ResolutionError(ValueError):
pass


class TooManyUnknownsError(ValueError):
pass


def resolve(shape=None, visual_size=None, ppd=None):
"""Resolves the full resolution, for 2 givens and 1 unknown
Expand Down Expand Up @@ -105,7 +110,9 @@ def resolve_1D(length=None, visual_angle=None, ppd=None, round=True):

# Triage based on number of unknowns
if n_unknowns > 1: # More than 1 unknown we cannot resolve
raise ValueError(f"Too many unkowns to resolve resolution; {length},{visual_angle},{ppd}")
raise TooManyUnknownsError(
f"Too many unkowns to resolve resolution; {length},{visual_angle},{ppd}"
)
else: # 1 unknown, so need to resolve
# Which unknown?
if length is None:
Expand Down Expand Up @@ -364,7 +371,7 @@ def validate_shape(shape):
try:
if len(shape) < 1:
# Empty sequence
raise ValueError(f"shape must be of at least length 1: {shape}")
raise TypeError(f"shape must be of at least length 1: {shape}")
except TypeError: # not a sequence; make it one
shape = (shape, shape)

Expand Down Expand Up @@ -431,7 +438,7 @@ def validate_ppd(ppd):
try:
if len(ppd) < 1:
# Empty sequence
raise ValueError(f"ppd must be of at least length 1: {ppd}")
raise TypeError(f"ppd must be of at least length 1: {ppd}")
except TypeError: # not a sequence; make it one
ppd = (ppd, ppd)

Expand Down Expand Up @@ -496,7 +503,7 @@ def validate_visual_size(visual_size):
try:
if len(visual_size) < 1:
# Empty sequence
raise ValueError(f"visual_size must be of at least length 1: {visual_size}")
raise TypeError(f"visual_size must be of at least length 1: {visual_size}")
except TypeError: # not a sequence; make it one
visual_size = (visual_size, visual_size)

Expand Down
6 changes: 3 additions & 3 deletions tests/test_validate_resolution_components.py
Expand Up @@ -54,7 +54,7 @@ def test_valid_visual_size(visual_size, expected):
@pytest.mark.parametrize(
"visual_size, exception",
[
((), ValueError),
((), TypeError),
("bla", ValueError),
((32, 32, 32), TypeError),
({32, 32}, TypeError),
Expand Down Expand Up @@ -94,7 +94,7 @@ def test_valid_shape(shape, expected):
@pytest.mark.parametrize(
"shape, exception",
[
((), ValueError),
((), TypeError),
("bla", ValueError),
((32, 32, 32), TypeError),
({32, 32}, TypeError),
Expand Down Expand Up @@ -134,7 +134,7 @@ def test_valid_ppd(ppd, expected):
@pytest.mark.parametrize(
"ppd, exception",
[
((), ValueError),
((), TypeError),
("bla", ValueError),
((32, 32, 32), TypeError),
({32, 32}, TypeError),
Expand Down

0 comments on commit 5f437bb

Please sign in to comment.