def _validate_other_add_sub(self, other): """ Conditions for other to satisfy before add/sub. Copied from synphot.SourceSpectrum so additions can happen with SourceSpectrum """ if not isinstance(other, (self.__class__, SourceSpectrum)): raise exceptions.IncompatibleSources( 'Can only operate on {0}.'.format(self.__class__.__name__))
def _validate_other_mul_div(self, other): """Conditions for other to satisfy before mul/div. Copied from synphot.SourceSpectrum so additions can happen with a SourceSpectrum """ if not isinstance(other, (u.Quantity, numbers.Number, BaseUnitlessSpectrum, SourceSpectrum, self.__class__)): raise exceptions.IncompatibleSources( 'Can only operate on scalar number/Quantity or spectrum') elif (isinstance(other, u.Quantity) and (other.unit.decompose() != u.dimensionless_unscaled or not np.isscalar(other.value) or not isinstance(other.value, numbers.Real))): raise exceptions.IncompatibleSources( 'Can only operate on real scalar dimensionless Quantity') elif (isinstance(other, numbers.Number) and not (np.isscalar(other) and isinstance(other, numbers.Real))): raise exceptions.IncompatibleSources( 'Can only operate on real scalar number')
def __mul__(self, other): """Multiply self and other.""" self._validate_other_mul_div(other) if isinstance(other, (u.Quantity, numbers.Number)): newcls = self.__class__(modelclass=self.model | Scale(other)) elif isinstance(other, BaseUnitlessSpectrum): newcls = self.__class__(modelclass=self.model * other.model) else: # Source spectrum raise exceptions.IncompatibleSources( 'Cannot multiply two source spectra together') self._merge_meta(self, other, newcls) return newcls