Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Astropy 1.1.1 version breaks Tesla conversion to cgs again #14

Open
fredgent opened this issue Feb 19, 2016 · 5 comments
Open

Astropy 1.1.1 version breaks Tesla conversion to cgs again #14

fredgent opened this issue Feb 19, 2016 · 5 comments

Comments

@fredgent
Copy link
Contributor

With astropy 1.1.1 the conversion between Tesla and Gauss is once again broken. Tesla can be directly converted to Gauss and vice versa, but the
fv.attrs['field_to_cgs'] = field.unit.to_system(u.cgs)[0].scale
in the gdf_writer has no valid result

I have loaded astropy version 1.0.5 on iceberg, but we should raise this issue with the astropy developers. Clearly the bug was fixed last year and the latest upgrade has reintroduced it

@Cadair
Copy link
Member

Cadair commented Mar 4, 2016

a simple example:

field = u.Quantity([1,2,3])*u.T

field.unit.to_system(u.cgs)
---------------------------------------------------------------------------
UnitConversionError                       Traceback (most recent call last)
<ipython-input-6-6c708e450c60> in <module>()
----> 1 field.unit.to_system(u.cgs)

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in to_system(self, system)
   1282                 return sum / float(len(compose_bases))
   1283 
-> 1284         x = self.decompose(bases=bases)
   1285         composed = x.compose(units=system)
   1286         composed = sorted(composed, key=score, reverse=True)

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
   1925 
   1926     def decompose(self, bases=set()):
-> 1927         return self._represents.decompose(bases=bases)
   1928 
   1929     def is_unity(self):

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
   2102 
   2103         x = CompositeUnit(self.scale, self.bases, self.powers, decompose=True,
-> 2104                           decompose_bases=bases)
   2105         if len(bases) == 0:
   2106             self._decomposed_cache = x

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in __init__(self, scale, bases, powers, decompose, decompose_bases, _error_check)
   1985         self._powers = powers
   1986         self._decomposed_cache = None
-> 1987         self._expand_and_gather(decompose=decompose, bases=decompose_bases)
   1988         self._hash = None
   1989 

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in _expand_and_gather(self, decompose, bases)
   2058         for b, p in zip(self.bases, self.powers):
   2059             if decompose and b not in bases:
-> 2060                 b = b.decompose(bases=bases)
   2061 
   2062             if isinstance(b, CompositeUnit):

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
   1925 
   1926     def decompose(self, bases=set()):
-> 1927         return self._represents.decompose(bases=bases)
   1928 
   1929     def is_unity(self):

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
   2102 
   2103         x = CompositeUnit(self.scale, self.bases, self.powers, decompose=True,
-> 2104                           decompose_bases=bases)
   2105         if len(bases) == 0:
   2106             self._decomposed_cache = x

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in __init__(self, scale, bases, powers, decompose, decompose_bases, _error_check)
   1985         self._powers = powers
   1986         self._decomposed_cache = None
-> 1987         self._expand_and_gather(decompose=decompose, bases=decompose_bases)
   1988         self._hash = None
   1989 

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in _expand_and_gather(self, decompose, bases)
   2058         for b, p in zip(self.bases, self.powers):
   2059             if decompose and b not in bases:
-> 2060                 b = b.decompose(bases=bases)
   2061 
   2062             if isinstance(b, CompositeUnit):

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
   1925 
   1926     def decompose(self, bases=set()):
-> 1927         return self._represents.decompose(bases=bases)
   1928 
   1929     def is_unity(self):

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
   2102 
   2103         x = CompositeUnit(self.scale, self.bases, self.powers, decompose=True,
-> 2104                           decompose_bases=bases)
   2105         if len(bases) == 0:
   2106             self._decomposed_cache = x

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in __init__(self, scale, bases, powers, decompose, decompose_bases, _error_check)
   1985         self._powers = powers
   1986         self._decomposed_cache = None
-> 1987         self._expand_and_gather(decompose=decompose, bases=decompose_bases)
   1988         self._hash = None
   1989 

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in _expand_and_gather(self, decompose, bases)
   2058         for b, p in zip(self.bases, self.powers):
   2059             if decompose and b not in bases:
-> 2060                 b = b.decompose(bases=bases)
   2061 
   2062             if isinstance(b, CompositeUnit):

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
   1925 
   1926     def decompose(self, bases=set()):
-> 1927         return self._represents.decompose(bases=bases)
   1928 
   1929     def is_unity(self):

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
   2102 
   2103         x = CompositeUnit(self.scale, self.bases, self.powers, decompose=True,
-> 2104                           decompose_bases=bases)
   2105         if len(bases) == 0:
   2106             self._decomposed_cache = x

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in __init__(self, scale, bases, powers, decompose, decompose_bases, _error_check)
   1985         self._powers = powers
   1986         self._decomposed_cache = None
-> 1987         self._expand_and_gather(decompose=decompose, bases=decompose_bases)
   1988         self._hash = None
   1989 

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in _expand_and_gather(self, decompose, bases)
   2058         for b, p in zip(self.bases, self.powers):
   2059             if decompose and b not in bases:
-> 2060                 b = b.decompose(bases=bases)
   2061 
   2062             if isinstance(b, CompositeUnit):

/opt/miniconda/envs/sunpy-dev/lib/python2.7/site-packages/astropy/units/core.pyc in decompose(self, bases)
   1660             raise UnitConversionError(
   1661                 "Unit {0} can not be decomposed into the requested "
-> 1662                 "bases".format(self))
   1663 
   1664         return self

UnitConversionError: Unit A can not be decomposed into the requested bases

@Cadair
Copy link
Member

Cadair commented Mar 31, 2016

this is the fault of astropy/astropy#4355 and the fact it was backported to 1.1.1.

@Cadair
Copy link
Member

Cadair commented Mar 31, 2016

I guess the fix is to convert directly to Gauss

@SolarDrew
Copy link

I did try converting to Gauss and it doesn't actually seem to get around the problem, unless I missed something.

@Cadair
Copy link
Member

Cadair commented Apr 1, 2016

hot damn.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants