@@ -39,7 +39,7 @@ class AbstractInstrument(
3939 @abc .abstractmethod
4040 def image (
4141 self ,
42- scene : na .AbstractScalar ,
42+ scene : na .AbstractScalar | na . AbstractFunctionArray ,
4343 integrate : bool = True ,
4444 noise : bool = True ,
4545 ) -> na .FunctionArray [na .SpectralPositionalVectorArray , na .AbstractScalar ]:
@@ -66,7 +66,7 @@ def image(
6666 @abc .abstractmethod
6767 def backproject (
6868 self ,
69- image : na .AbstractScalar ,
69+ image : na .AbstractScalar | na . AbstractFunctionArray ,
7070 integrate : bool = True ,
7171 ) -> na .FunctionArray [na .SpectralPositionalVectorArray , na .AbstractScalar ]:
7272 """
@@ -233,11 +233,18 @@ def _energy_per_photon(self) -> u.Quantity | na.AbstractScalar:
233233
234234 def image (
235235 self ,
236- scene : na .AbstractScalar ,
236+ scene : na .AbstractScalar | na . AbstractFunctionArray ,
237237 integrate : bool = True ,
238238 noise : bool = True ,
239239 ) -> na .FunctionArray [na .SpectralPositionalVectorArray , na .AbstractScalar ]:
240240
241+ if isinstance (scene , na .AbstractFunctionArray ):
242+ if not np .all (scene .inputs == self .coordinates_scene ):
243+ raise ValueError (
244+ "`scene.inputs` and `self.coordinates_scene` are not equal."
245+ )
246+ scene = scene .outputs
247+
241248 values_input = scene * self ._volume_scene
242249
243250 values_input = values_input / self ._energy_per_photon
@@ -279,10 +286,17 @@ def image(
279286
280287 def backproject (
281288 self ,
282- image : na .AbstractScalar ,
289+ image : na .AbstractScalar | na . AbstractFunctionArray ,
283290 integrate : bool = True ,
284291 ) -> na .FunctionArray [na .SpectralPositionalVectorArray , na .AbstractScalar ]:
285292
293+ if isinstance (image , na .AbstractFunctionArray ):
294+ if not np .all (image .inputs .position == self .coordinates_sensor .position ):
295+ raise ValueError (
296+ "`image.inputs` and `self.coordinates_sensor` are not equal."
297+ )
298+ image = image .outputs
299+
286300 coordinates = self .coordinates_scene
287301
288302 axis_wavelength = self .axis_wavelength
@@ -514,7 +528,7 @@ def weights_transpose(self):
514528
515529 def image (
516530 self ,
517- scene : na .AbstractScalar ,
531+ scene : na .AbstractScalar | na . AbstractFunctionArray ,
518532 integrate : bool = True ,
519533 noise : bool = True ,
520534 ) -> na .FunctionArray [na .SpectralPositionalVectorArray , na .AbstractScalar ]:
@@ -529,7 +543,7 @@ def image(
529543
530544 def backproject (
531545 self ,
532- image : na .AbstractScalar ,
546+ image : na .AbstractScalar | na . AbstractFunctionArray ,
533547 integrate : bool = True ,
534548 ) -> na .FunctionArray [na .SpectralPositionalVectorArray , na .AbstractScalar ]:
535549
0 commit comments