Skip to content

Commit bc5a40b

Browse files
committed
Update colour.SpectralDistribution.interpolate method to use continuous-based integration.
This provides support for fractional spectral-power distribution interpolation.
1 parent 4349fb7 commit bc5a40b

File tree

2 files changed

+437
-434
lines changed

2 files changed

+437
-434
lines changed

colour/colorimetry/spectrum.py

+13-15
Original file line numberDiff line numberDiff line change
@@ -1177,17 +1177,10 @@ def interpolate(
11771177
]
11781178
)
11791179

1180-
# Defining proper interpolation bounds.
1181-
# TODO: Provide support for fractional interval like 0.1, etc...
1182-
if np.around(shape_start) != shape_start or np.around(shape_end) != shape_end:
1183-
runtime_warning("Fractional bound encountered, rounding will occur!")
1184-
1185-
shape.start = max([shape.start, np.ceil(shape_start)])
1186-
shape.end = min([shape.end, np.floor(shape_end)])
1180+
shape.start = max([shape.start, shape_start])
1181+
shape.end = min([shape.end, shape_end])
11871182

11881183
if interpolator is None:
1189-
# User has specifically chosen the interpolator thus it is used
1190-
# instead of those from *CIE 167:2005* recommendation.
11911184
if self.interpolator not in (
11921185
SpragueInterpolator,
11931186
CubicSplineInterpolator,
@@ -1199,8 +1192,6 @@ def interpolate(
11991192
interpolator = CubicSplineInterpolator
12001193

12011194
if interpolator_kwargs is None:
1202-
# User has specifically chosen the interpolator thus its keyword
1203-
# arguments are used.
12041195
if self.interpolator not in (
12051196
SpragueInterpolator,
12061197
CubicSplineInterpolator,
@@ -1209,12 +1200,19 @@ def interpolate(
12091200
else:
12101201
interpolator_kwargs = {}
12111202

1212-
wavelengths, values = self.wavelengths, self.values
1203+
self_interpolator, self.interpolator = self.interpolator, interpolator
1204+
self_interpolator_kwargs, self.interpolator_kwargs = (
1205+
self.interpolator_kwargs,
1206+
interpolator_kwargs,
1207+
)
1208+
1209+
values = self[shape.wavelengths]
12131210

12141211
self.domain = shape.wavelengths
1215-
self.range = interpolator(wavelengths, values, **interpolator_kwargs)(
1216-
self.domain
1217-
)
1212+
self.values = values
1213+
1214+
self.interpolator = self_interpolator
1215+
self.interpolator_kwargs = self_interpolator_kwargs
12181216

12191217
return self
12201218

0 commit comments

Comments
 (0)