Repository navigation
Closed
Labels
Description
Hi,
I was wondering if there would be support added for conversions of electromagnetic units between SI and CGS systems? Astropy is quite good for most other calculations with units.
Python: 2.7.13
IPython: 5.3.0 (Using a Jupyter Notebook in this example)
astropy: 1.3
numpy: 1.12.0
Python package manager: Conda 4.3.14 (miniconda2)
OS: Ubuntu 14.04
This problem might be related to these issues (please let me know of any others):
SWAT-Sheffield/pysac#14
#5736
Here is a minimal example:
(1.0*u.T).cgs
Error:
---------------------------------------------------------------------------
UnitConversionError Traceback (most recent call last)
<ipython-input-13-c6a2c48e6b23> in <module>()
----> 1 (1.0*u.T).cgs
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/utils/decorators.pyc in __get__(self, obj, owner)
720 return obj.__dict__[self._key]
721 except KeyError:
--> 722 val = self.fget(obj)
723 obj.__dict__[self._key] = val
724 return val
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in cgs(self)
1342 """
1343 from . import cgs
-> 1344 return self.to_system(cgs)[0]
1345
1346 @property
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in to_system(self, system)
1322 return sum / float(len(compose_bases))
1323
-> 1324 x = self.decompose(bases=bases)
1325 composed = x.compose(units=system)
1326 composed = sorted(composed, key=score, reverse=True)
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
1952
1953 def decompose(self, bases=set()):
-> 1954 return self._represents.decompose(bases=bases)
1955
1956 def is_unity(self):
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
2128
2129 x = CompositeUnit(self.scale, self.bases, self.powers, decompose=True,
-> 2130 decompose_bases=bases)
2131 if len(bases) == 0:
2132 self._decomposed_cache = x
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in __init__(self, scale, bases, powers, decompose, decompose_bases, _error_check)
2012 self._powers = powers
2013 self._decomposed_cache = None
-> 2014 self._expand_and_gather(decompose=decompose, bases=decompose_bases)
2015 self._hash = None
2016
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in _expand_and_gather(self, decompose, bases)
2085 for b, p in zip(self.bases, self.powers):
2086 if decompose and b not in bases:
-> 2087 b = b.decompose(bases=bases)
2088
2089 if isinstance(b, CompositeUnit):
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
1952
1953 def decompose(self, bases=set()):
-> 1954 return self._represents.decompose(bases=bases)
1955
1956 def is_unity(self):
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
2128
2129 x = CompositeUnit(self.scale, self.bases, self.powers, decompose=True,
-> 2130 decompose_bases=bases)
2131 if len(bases) == 0:
2132 self._decomposed_cache = x
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in __init__(self, scale, bases, powers, decompose, decompose_bases, _error_check)
2012 self._powers = powers
2013 self._decomposed_cache = None
-> 2014 self._expand_and_gather(decompose=decompose, bases=decompose_bases)
2015 self._hash = None
2016
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in _expand_and_gather(self, decompose, bases)
2085 for b, p in zip(self.bases, self.powers):
2086 if decompose and b not in bases:
-> 2087 b = b.decompose(bases=bases)
2088
2089 if isinstance(b, CompositeUnit):
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
1952
1953 def decompose(self, bases=set()):
-> 1954 return self._represents.decompose(bases=bases)
1955
1956 def is_unity(self):
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
2128
2129 x = CompositeUnit(self.scale, self.bases, self.powers, decompose=True,
-> 2130 decompose_bases=bases)
2131 if len(bases) == 0:
2132 self._decomposed_cache = x
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in __init__(self, scale, bases, powers, decompose, decompose_bases, _error_check)
2012 self._powers = powers
2013 self._decomposed_cache = None
-> 2014 self._expand_and_gather(decompose=decompose, bases=decompose_bases)
2015 self._hash = None
2016
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in _expand_and_gather(self, decompose, bases)
2085 for b, p in zip(self.bases, self.powers):
2086 if decompose and b not in bases:
-> 2087 b = b.decompose(bases=bases)
2088
2089 if isinstance(b, CompositeUnit):
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
1952
1953 def decompose(self, bases=set()):
-> 1954 return self._represents.decompose(bases=bases)
1955
1956 def is_unity(self):
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
2128
2129 x = CompositeUnit(self.scale, self.bases, self.powers, decompose=True,
-> 2130 decompose_bases=bases)
2131 if len(bases) == 0:
2132 self._decomposed_cache = x
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in __init__(self, scale, bases, powers, decompose, decompose_bases, _error_check)
2012 self._powers = powers
2013 self._decomposed_cache = None
-> 2014 self._expand_and_gather(decompose=decompose, bases=decompose_bases)
2015 self._hash = None
2016
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in _expand_and_gather(self, decompose, bases)
2085 for b, p in zip(self.bases, self.powers):
2086 if decompose and b not in bases:
-> 2087 b = b.decompose(bases=bases)
2088
2089 if isinstance(b, CompositeUnit):
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
1690 raise UnitConversionError(
1691 "Unit {0} can not be decomposed into the requested "
-> 1692 "bases".format(self))
1693
1694 return self
UnitConversionError: Unit A can not be decomposed into the requested bases
A more explicit conversion attempt for Gauss also fails:
(1.0*u.G**2).to("g/(cm*s^2)")
---------------------------------------------------------------------------
UnitConversionError Traceback (most recent call last)
<ipython-input-38-8841affb2bac> in <module>()
----> 1 (1.0*u.G**2).to("g/(cm*s^2)")
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/quantity.pyc in to(self, unit, equivalencies)
764 unit = Unit(unit)
765 new_val = self.unit.to(unit, self.view(np.ndarray),
--> 766 equivalencies=equivalencies)
767 return self._new_view(new_val, unit)
768
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in to(self, other, value, equivalencies)
1006 If units are inconsistent
1007 """
-> 1008 return self._get_converter(other, equivalencies=equivalencies)(value)
1009
1010 def in_units(self, other, value=1.0, equivalencies=[]):
/home/miles/miniconda2/lib/python2.7/site-packages/astropy/units/core.pyc in _get_converter(self, other, equivalencies)
908 pass
909
--> 910 raise exc
911
912 @deprecated('1.0')
UnitConversionError: 'G2' and 'g / (cm s2)' (pressure) are not convertible
Activity
MilesCranmer commentedon Mar 18, 2017
If it helps, on the issue here, @Cadair pointed out this might be caused by #4355.
Cheers,
Miles
Cadair commentedon Mar 18, 2017
👍 This should be doable somehow, maybe an equivalency?
astrofrog commentedon Mar 18, 2017
These may be related: #1687, #4359, #4086
mhvk commentedon Apr 12, 2021
Closing this in favour of #4359