Commit f8d338bc authored by Ole Streicher's avatar Ole Streicher

New upstream release candidate 1.0rc2

parent 08d784fb
1.0rc1 (2015-01-27)
1.0rc2 (2015-02-12)
-------------------
General
......@@ -52,6 +52,9 @@ New Features
that can be used to check that two frames are equivalent (ignoring the data).
[#3330]
- The ``__repr__`` of coordinate objects now shows scalar coordinates in the
same format as vector coordinates. [#3350, 3448]
- ``astropy.cosmology``
- Add lookback_distance, which is c * lookback_time. [#3145]
......@@ -221,6 +224,14 @@ New Features
``Quantity`` and other ``ndarray`` subclasses (using the ``subok=True``
flag). [#2327]
- Added ``astropy.utils.resolve_name`` which returns a member of a module
or class given the fully qualified dotted name of that object as a
string. [#3389]
- Added ``astropy.utils.minversion`` which can be used to check minimum
version requirements of Python modules (to test for specific features and/
or bugs and the like). [#3389]
- ``astropy.visualization``
- Created ``astropy.visualization`` module and added functionality relating
......@@ -266,6 +277,9 @@ New Features
- Add ability to use ``WCS`` object to define projections in Matplotlib,
using the ``WCSAxes`` package. [#3183]
- Added ``is_proj_plane_distorted`` for testing if pixels are
distorted. [#3329]
API Changes
^^^^^^^^^^^
......@@ -404,6 +418,10 @@ API Changes
- Custom units can be defined "inline" by placing them between single
quotes.
- ``Unit.get_converter`` has been deprecated. It is not strictly
necessary for end users, and it was confusing due to lack of
support for ``Quantity`` objects. [#3456]
- ``astropy.utils``
- Some members of ``astropy.utils.misc`` were moved into new submodules.
......@@ -475,9 +493,19 @@ Bug Fixes
- Fixed the problem in ``fits.open`` of some filenames with colon (``:``) in
the name being recognized as URLs instead of file names. [#3122]
- Setting ``memmap=True`` in ``fits.open`` and related functions now raises a ValueError if opening a file in memory-mapped mode is impossible. [#2298]
- Setting ``memmap=True`` in ``fits.open`` and related functions now raises
a ValueError if opening a file in memory-mapped mode is impossible. [#2298]
- CONTINUE cards no longer end the value of the final card in the series with
an ampersand, per the specification of the CONTINUE card convention. [#3282]
- CONTINUE cards no longer end the value of the final card in the series with an ampersand, per the specification of the CONTINUE card convention. [#3282]
- Fixed a crash that occurred when reading an ASCII table containing
zero-precision floating point fields. [#3422]
- When a float field for an ASCII table has zero-precision a decimal point
(with no digits following it) is still written to the field as long as
there is space for it, as recommended by the FITS standard. This makes it
less ambiguous that these columns should be interpreted as floats. [#3422]
- ``astropy.logger``
......@@ -499,11 +527,16 @@ Bug Fixes
- Fix a problem when doing nested iterators on a single table. [#3358]
- Fix an error when an empty list, tuple, or ndarray is used for item access
within a table. This now returns the table with no rows. [#3442]
- ``astropy.time``
- When creating a Time object from a datetime object the time zone
info is now correctly used. [#3160]
- For Time objects, it is now checked that numerical input is finite. [#3396]
- ``astropy.units``
- Added a ``latex_inline`` unit format that returns the units in LaTeX math
......@@ -529,6 +562,11 @@ Bug Fixes
- ``astropy.wcs.WCS.sub`` now accepts unicode strings as input on
Python 2.x [#3356]
- Misc
- Some modules and tests that would crash upon import when using a non-final
release of Numpy (e.g. 1.9.0rc1). [#3471]
Other Changes and Additions
^^^^^^^^^^^^^^^^^^^^^^^^^^^
......@@ -568,7 +606,7 @@ Other Changes and Additions
- The list of modules displayed in the pytest header can now be customized.
[#3157]
- `jinja2 <http://jinja.pocoo.org/docs/dev/>`_ is now required to build the
- `jinja2 <http://jinja.pocoo.org/docs/dev/>`_>=2.7 is now required to build the
source code from the git repository, in order to allow the ERFA wrappers to
be generated. [#3166]
......
Metadata-Version: 1.1
Name: astropy
Version: 1.0rc1
Version: 1.0rc2
Summary: Community-developed python astronomy tools
Home-page: http://astropy.org
Author: The Astropy Developers
Author-email: astropy.team@gmail.com
License: BSD
Download-URL: http://pypi.python.org/packages/source/a/astropy/astropy-1.0rc1.tar.gz
Download-URL: http://pypi.python.org/packages/source/a/astropy/astropy-1.0rc2.tar.gz
Description:
Astropy is a package intended to contain core functionality and some
common tools needed for performing astronomy and astrophysics research with
......
......@@ -463,12 +463,10 @@ class _Bootstrapper(object):
def _do_upgrade(self, dist):
# Build up a requirement for a higher bugfix release but a lower minor
# release (so API compatibility is guaranteed)
# sketchy version parsing--maybe come up with something a bit more
# robust for this
major, minor = (int(part) for part in dist.parsed_version[:2])
next_minor = '.'.join([str(major), str(minor + 1), '0'])
next_version = _next_version(dist.parsed_version)
req = pkg_resources.Requirement.parse(
'{0}>{1},<{2}'.format(DIST_NAME, dist.version, next_minor))
'{0}>{1},<{2}'.format(DIST_NAME, dist.version, next_version))
package_index = PackageIndex(index_url=self.index_url)
......@@ -532,7 +530,7 @@ class _Bootstrapper(object):
perl_warning = ('perl: warning: Falling back to the standard locale '
'("C").')
if not stderr.strip().endswith(perl_warning):
# Some other uknown error condition occurred
# Some other unknown error condition occurred
log.warn('git submodule command failed '
'unexpectedly:\n{0}'.format(stderr))
return False
......@@ -732,6 +730,40 @@ def run_cmd(cmd):
return (p.returncode, stdout, stderr)
def _next_version(version):
"""
Given a parsed version from pkg_resources.parse_version, returns a new
version string with the next minor version.
Examples
========
>>> _next_version(pkg_resources.parse_version('1.2.3'))
'1.3.0'
"""
if hasattr(version, 'base_version'):
# New version parsing from setuptools >= 8.0
if version.base_version:
parts = version.base_version.split('.')
else:
parts = []
else:
parts = []
for part in version:
if part.startswith('*'):
break
parts.append(part)
parts = [int(p) for p in parts]
if len(parts) < 3:
parts += [0] * (3 - len(parts))
major, minor, micro = parts[:3]
return '{0}.{1}.{2}'.format(major, minor + 1, 0)
class _DummyFile(object):
"""A noop writeable object."""
......@@ -846,7 +878,7 @@ def use_astropy_helpers(**kwargs):
that should be added to `sys.path` so that `astropy_helpers` can be
imported from that path.
If the path is a git submodule it will automatically be initialzed
If the path is a git submodule it will automatically be initialized
and/or updated.
The path may also be to a ``.tar.gz`` archive of the astropy_helpers
......
......@@ -58,15 +58,12 @@ def _check_numpy():
except ImportError:
pass
else:
major, minor, rest = numpy.__version__.split(".", 2)
rmajor, rminor, rest = __minimum_numpy_version__.split(".", 2)
requirement_met = ((int(major), int(minor)) >=
(int(rmajor), int(rminor)))
from .utils import minversion
requirement_met = minversion(numpy, __minimum_numpy_version__)
if not requirement_met:
msg = ("numpy version {0} or later must be installed to use "
"astropy".format(
__minimum_numpy_version__))
msg = ("Numpy version {0} or later must be installed to use "
"Astropy".format(__minimum_numpy_version__))
raise ImportError(msg)
return numpy
......
This diff is collapsed.
This diff is collapsed.
......@@ -34,15 +34,15 @@ github repository for more about this.)
from __future__ import absolute_import, division, print_function
import warnings
from distutils.version import LooseVersion
from ..utils.compat import NUMPY_LT_1_8
from ..utils.exceptions import AstropyUserWarning
import numpy
from . import _core
NPYLT18 = LooseVersion(numpy.__version__) < LooseVersion('1.8')
# TODO: remove the above variable and the code using it and make_outputs_scalar when numpy < 1.8 is no longer supported
# TODO: remove the above variable and the code using it and make_outputs_scalar
# when numpy < 1.8 is no longer supported
__all__ = ['ErfaError', 'ErfaWarning',
{{ funcs|map(attribute='pyname')|surround("'","'")|join(", ") }},
......@@ -192,7 +192,7 @@ def {{ func.pyname }}({{ func.args_by_inout('in|inout')|map(attribute='name')|jo
{%- if func.args_by_inout('in|inout') %}
make_outputs_scalar = False
if NPYLT18:
if NUMPY_LT_1_8:
# in numpy < 1.8, the iterator used below doesn't work with 0d/scalar arrays
# so we replace all scalars with 1d arrays
make_outputs_scalar = True
......@@ -247,4 +247,4 @@ STATUS_CODES['{{ func.pyname }}'] = {{ stat.doc_info.statuscodes|string }}
{% endif %}
{%- endfor %}
{% endfor %}
\ No newline at end of file
{% endfor %}
......@@ -17,7 +17,6 @@ For more about the module and how to use it, see the ``core.py`` docstrings.
from __future__ import absolute_import, division, print_function
import warnings
from distutils.version import LooseVersion
from ..utils.exceptions import AstropyUserWarning
......
......@@ -17,7 +17,6 @@ For more about the module and how to use it, see the ``core.py`` docstrings.
from __future__ import absolute_import, division, print_function
import warnings
from distutils.version import LooseVersion
from ..utils.exceptions import AstropyUserWarning
......
......@@ -3,11 +3,12 @@ from __future__ import absolute_import
import os
import glob
import warnings
from distutils import log
from distutils.extension import Extension
from astropy_helpers import setup_helpers
from astropy_helpers.version_helpers import get_pkg_version_module
ERFAPKGDIR = os.path.relpath(os.path.dirname(__file__))
......@@ -19,7 +20,6 @@ SRC_FILES += [os.path.join(ERFAPKGDIR, filename)
GEN_FILES = [os.path.join(ERFAPKGDIR, 'core.py'), os.path.join(ERFAPKGDIR, 'core.pyx')]
def pre_build_py_hook(cmd_obj):
preprocess_source()
......@@ -33,7 +33,6 @@ def pre_sdist_hook(cmd_obj):
def preprocess_source():
# Generating the ERFA wrappers should only be done if needed. This also
# ensures that it is not done for any release tarball since those will
# include core.py and core.pyx.
......@@ -43,16 +42,30 @@ def preprocess_source():
erfa_mtime = max(os.path.getmtime(filename) for filename in SRC_FILES)
gen_mtime = min(os.path.getmtime(filename) for filename in GEN_FILES)
# If generated source is recent enough, don't update
version = get_pkg_version_module('astropy')
if gen_mtime > erfa_mtime:
# If generated source is recent enough, don't update
return
elif version.release:
# or, if we're on a release, issue a warning, but go ahead and use
# the wrappers anyway
log.warn('WARNING: The autogenerated wrappers in astropy._erfa '
'seem to be older than the source templates used to '
'create them. Because this is a release version we will '
'use them anyway, but this might be a sign of some sort '
'of version mismatch or other tampering. Or it might just '
'mean you moved some files around or otherwise '
'accidentally changed timestamps.')
return
# otherwise rebuild the autogenerated files
# If jinja2 isn't present, then print a warning and use existing files
try:
import jinja2
except:
warnings.warn("jinja2 could not be imported, so the existing ERFA "
"core.py and core.pyx files will be used")
log.warn("WARNING: jinja2 could not be imported, so the existing "
"ERFA core.py and core.pyx files will be used")
return
name = 'erfa_generator'
......
......@@ -812,8 +812,8 @@ def update_default_config(pkg, default_cfg_dir_or_fn, version=None):
Raises
------
ConfigurationDefaultMissingError
If the default configuration could not be found.
AttributeError
If the version number of the package could not determined.
"""
......@@ -826,7 +826,7 @@ def update_default_config(pkg, default_cfg_dir_or_fn, version=None):
# There is no template configuration file, which basically
# means the affiliated package is not using the configuration
# system, so just return.
return
return False
cfgfn = get_config(pkg).filename
......@@ -842,9 +842,6 @@ def update_default_config(pkg, default_cfg_dir_or_fn, version=None):
if version is None:
mod = __import__(pkg)
if not hasattr(mod, '__version__'):
raise ConfigurationDefaultMissingError(
'Could not determine version of package {0}'.format(pkg))
version = mod.__version__
# Don't install template files for dev versions, or we'll end up
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -462,7 +462,7 @@ class TestConvolve2D(object):
def test_big_fail(self):
""" Test that convolve_fft raises an exception if a too-large array is passed in """
with pytest.raises(ValueError) as ex:
with pytest.raises((ValueError, MemoryError)) as ex:
# while a good idea, this approach did not work; it actually writes to disk
#arr = np.memmap('file.np', mode='w+', shape=(512, 512, 512), dtype=np.complex)
# this just allocates the memory but never touches it; it's better:
......
......@@ -300,13 +300,6 @@ class TimeFrameAttribute(FrameAttribute):
value, err))
converted = True
if not out.isscalar:
msg0 = ('Time input {0}={1!r} is not a single (scalar) value. Some '
'transformations do not yet support vector frame '
'attributes, so some transformations may not work.')
msg = msg0.format(self.name, value)
warnings.warn(msg, AstropyWarning)
return out, converted
......@@ -810,11 +803,13 @@ class BaseCoordinateFrame(object):
>>> from astropy.coordinates import SkyCoord, CartesianRepresentation
>>> coord = SkyCoord(0*u.deg, 0*u.deg)
>>> coord.represent_as(CartesianRepresentation)
<CartesianRepresentation x=1.0, y=0.0, z=0.0>
<CartesianRepresentation (x, y, z) [dimensionless]
(1.0, 0.0, 0.0)>
>>> coord.representation = CartesianRepresentation
>>> coord
<SkyCoord (ICRS): x=1.0, y=0.0, z=0.0>
<SkyCoord (ICRS): (x, y, z) [dimensionless]
(1.0, 0.0, 0.0)>
"""
new_representation = _get_repr_cls(new_representation)
......
......@@ -17,7 +17,9 @@ from .icrs import ICRS
# Measured by minimizing the difference between a plane of coordinates along
# l=0, b=[-90,90] and the Galactocentric x-z plane
ROLL0 = Angle(58.5986320306*u.degree)
# This is not used directly, but accessed via `get_roll0`. We define it here to
# prevent having to create new Angle objects every time `get_roll0` is called.
_ROLL0 = Angle(58.5986320306*u.degree)
class Galactocentric(BaseCoordinateFrame):
r"""
......@@ -129,6 +131,19 @@ class Galactocentric(BaseCoordinateFrame):
z_sun = FrameAttribute(default=27.*u.pc)
roll = FrameAttribute(default=0.*u.deg)
@classmethod
def get_roll0(cls):
"""
The additional roll angle (about the final x axis) necessary to align
the final z axis to match the Galactic yz-plane. Setting the ``roll``
frame attribute to -this method's return value removes this rotation,
allowing the use of the `Galactocentric` frame in more general contexts.
"""
# note that the actual value is defined at the module level. We make at
# a property here because this module isn't actually part of the public
# API, so it's better for it to be accessable from Galactocentric
return _ROLL0
# ICRS to/from Galactocentric ----------------------->
@frame_transform_graph.transform(FunctionTransform, ICRS, Galactocentric)
def icrs_to_galactocentric(icrs_coord, galactocentric_frame):
......@@ -148,7 +163,7 @@ def icrs_to_galactocentric(icrs_coord, galactocentric_frame):
R1 = mat1 * mat2
# extra roll away from the Galactic x-z plane
R2 = rotation_matrix(ROLL0 - galactocentric_frame.roll, 'x')
R2 = rotation_matrix(galactocentric_frame.get_roll0() - galactocentric_frame.roll, 'x')
# construct transformation matrix
R = R2*R1
......@@ -197,7 +212,7 @@ def galactocentric_to_icrs(galactocentric_coord, icrs_frame):
R1 = mat1 * mat2
# extra roll away from the Galactic x-z plane
R2 = rotation_matrix(ROLL0 - galactocentric_coord.roll, 'x')
R2 = rotation_matrix(galactocentric_coord.get_roll0() - galactocentric_coord.roll, 'x')
# construct transformation matrix
R = R2*R1
......
......@@ -166,14 +166,18 @@ def search_around_3d(coords1, coords2, distlimit, storekdtree='_kdtree_3d'):
Searches for pairs of points that are at least as close as a specified
distance in 3D space.
This is intended for use on coordinate objects with arrays of coordinates,
not scalars. For scalar coordinates, it is better to use the
``separation_3d`` methods.
Parameters
----------
coords1 : `~astropy.coordinates.BaseCoordinateFrame` or `~astropy.coordinates.SkyCoord`
The first set of coordinates, which will be searched for matches from
``coords2`` within ``seplimit``.
``coords2`` within ``seplimit``. Cannot be a scalar coordinate.
coords2 : `~astropy.coordinates.BaseCoordinateFrame` or `~astropy.coordinates.SkyCoord`
The second set of coordinates, which will be searched for matches from
``coords1`` within ``seplimit``.
``coords1`` within ``seplimit``. Cannot be a scalar coordinate.
distlimit : `~astropy.units.Quantity` with distance units
The physical radius to search within.
storekdtree : bool or str, optional
......@@ -198,8 +202,8 @@ def search_around_3d(coords1, coords2, distlimit, storekdtree='_kdtree_3d'):
Notes
-----
This function requires `SciPy <http://www.scipy.org>`_ to be installed
or it will fail.
This function requires `SciPy <http://www.scipy.org>`_ (>=0.12.0)
to be installed or it will fail.
If you are using this function to search in a catalog for matches around
specific points, the convention is for ``coords2`` to be the catalog, and
......@@ -215,6 +219,13 @@ def search_around_3d(coords1, coords2, distlimit, storekdtree='_kdtree_3d'):
if not distlimit.isscalar:
raise ValueError('distlimit must be a scalar in search_around_3d')
if coords1.isscalar or coords2.isscalar:
raise ValueError('One of the inputs to search_around_3d is a scalar. '
'search_around_3d is intended for use with array '
'coordinates, not scalars. Instead, use '
'``coord1.separation_3d(coord2) < distlimit`` to find '
'the coordinates near a scalar coordinate.')
kdt2 = _get_cartesian_kdtree(coords2, storekdtree)
cunit = coords2.cartesian.x.unit
......@@ -252,14 +263,18 @@ def search_around_sky(coords1, coords2, seplimit, storekdtree='_kdtree_sky'):
Searches for pairs of points that have an angular separation at least as
close as a specified angle.
This is intended for use on coordinate objects with arrays of coordinates,
not scalars. For scalar coordinates, it is better to use the ``separation``
methods.
Parameters
----------
coords1 : `~astropy.coordinates.BaseCoordinateFrame` or `~astropy.coordinates.SkyCoord`
The first set of coordinates, which will be searched for matches from
``coords2`` within ``seplimit``.
``coords2`` within ``seplimit``. Cannot be a scalar coordinate.
coords2 : `~astropy.coordinates.BaseCoordinateFrame` or `~astropy.coordinates.SkyCoord`
The second set of coordinates, which will be searched for matches from
``coords1`` within ``seplimit``.
``coords1`` within ``seplimit``. Cannot be a scalar coordinate.
seplimit : `~astropy.units.Quantity` with angle units
The on-sky separation to search within.
storekdtree : bool or str, optional
......@@ -286,8 +301,8 @@ def search_around_sky(coords1, coords2, seplimit, storekdtree='_kdtree_sky'):
Notes
-----
This function requires `SciPy <http://www.scipy.org>`_ to be installed
or it will fail.
This function requires `SciPy <http://www.scipy.org>`_ (>=0.12.0)
to be installed or it will fail.
In the current implementation, the return values are always sorted in the
same order as the ``coords1`` (so ``idx1`` is in ascending order). This is
......@@ -299,6 +314,13 @@ def search_around_sky(coords1, coords2, seplimit, storekdtree='_kdtree_sky'):
if not seplimit.isscalar:
raise ValueError('seplimit must be a scalar in search_around_sky')
if coords1.isscalar or coords2.isscalar:
raise ValueError('One of the inputs to search_around_sky is a scalar. '
'search_around_sky is intended for use with array '
'coordinates, not scalars. Instead, use '
'``coord1.separation(coord2) < seplimit`` to find the '
'coordinates near a scalar coordinate.')
# we convert coord1 to match coord2's frame. We do it this way
# so that if the conversion does happen, the KD tree of coord2 at least gets
# saved. (by convention, coord2 is the "catalog" if that makes sense)
......
......@@ -8,6 +8,7 @@ from __future__ import (absolute_import, division, print_function,
unicode_literals)
import abc
import functools
import numpy as np
import astropy.units as u
......@@ -22,12 +23,13 @@ __all__ = ["BaseRepresentation", "CartesianRepresentation",
"SphericalRepresentation", "UnitSphericalRepresentation",
"PhysicsSphericalRepresentation", "CylindricalRepresentation"]
NUMPY_LT_1P7 = [int(x) for x in np.__version__.split('.')[:2]] < [1, 7]
# Module-level dict mapping representation string alias names to class.
# This is populated by the metaclass init so all representation classes
# get registered automatically.
REPRESENTATION_CLASSES = {}
class MetaBaseRepresentation(type):
def __init__(cls, name, bases, dct):
super(MetaBaseRepresentation, cls).__init__(name, bases, dct)
......@@ -43,6 +45,17 @@ class MetaBaseRepresentation(type):
REPRESENTATION_CLASSES[cls.get_name()] = cls
def _fstyle(precision, x):
fmt_str = '{0:.{precision}f}'
s = fmt_str.format(x, precision=precision)
s_trunc = s.rstrip('0')
if s_trunc[-1] == '.':
# Ensure there is one trailing 0 after a bare decimal point
return s_trunc + '0'
else:
return s_trunc
@six.add_metaclass(MetaBaseRepresentation)
class BaseRepresentation(object):
"""
......@@ -153,29 +166,42 @@ class BaseRepresentation(object):
return unitstr
def __str__(self):
if self.isscalar and len(set(self._units.values())) > 1:
return '({0})'.format(', '.join(
['{0}'.format(getattr(self, component))
for component in self.components]))
else:
return '{0} {1:s}'.format(self._values, self._unitstr)
return '{0} {1:s}'.format(self._values, self._unitstr)
def __repr__(self):
if self.isscalar:
return '<{0} {1}>'.format(
self.__class__.__name__,
', '.join(['{0}={1}'.format(component,
getattr(self, component))
for component in self.components]))
prefixstr = ' '
if self._values.shape == ():
v = [tuple([self._values[nm] for nm in self._values.dtype.names])]
v = np.array(v, dtype=self._values.dtype)
else:
prefixstr = ' '
arrstr = np.array2string(self._values, separator=', ',
v = self._values
names = self._values.dtype.names
precision = np.get_printoptions()['precision']
fstyle = functools.partial(_fstyle, precision)
format_val = lambda val: np.array2string(val, style=fstyle)
formatter = {
'numpystr': lambda x: '({0})'.format(
', '.join(format_val(x[name]) for name in names))
}
if NUMPY_LT_1P7:
arrstr = np.array2string(v, separator=', ',
prefix=prefixstr)
return '<{0} ({1}) in {2:s}\n{3}{4}>'.format(
self.__class__.__name__, ', '.join(self.components),
self._unitstr, prefixstr, arrstr)
else:
arrstr = np.array2string(v, formatter=formatter,
separator=', ',
prefix=prefixstr)
if self._values.shape == ():
arrstr = arrstr[1:-1]
unitstr = ('in ' + self._unitstr) if self._unitstr else '[dimensionless]'
return '<{0} ({1}) {2:s}\n{3}{4}>'.format(
self.__class__.__name__, ', '.join(self.components),
unitstr, prefixstr, arrstr)
class CartesianRepresentation(BaseRepresentation):
......
......@@ -548,6 +548,9 @@ class SkyCoord(object):
"""
Computes on-sky separation between this coordinate and another.
For more on how to use this (and related) functionality, see the
examples in :doc:`/coordinates/matchsep`.
Parameters
----------
other : `~astropy.coordinates.SkyCoord` or `~astropy.coordinates.BaseCoordinateFrame`
......@@ -592,6 +595,9 @@ class SkyCoord(object):
Computes three dimensional separation between this coordinate
and another.
For more on how to use this (and related) functionality, see the
examples in :doc:`/coordinates/matchsep`.
Parameters
----------
other : `~astropy.coordinates.SkyCoord` or `~astropy.coordinates.BaseCoordinateFrame`
......@@ -636,6 +642,9 @@ class SkyCoord(object):
Finds the nearest on-sky matches of this coordinate in a set of
catalog coordinates.
For more on how to use this (and related) functionality, see the
examples in :doc:`/coordinates/matchsep`.
Parameters
----------
catalogcoord : `~astropy.coordinates.SkyCoord` or `~astropy.coordinates.BaseCoordinateFrame`
......@@ -673,6 +682,7 @@ class SkyCoord(object):
See Also
--------
astropy.coordinates.match_coordinates_sky
SkyCoord.match_to_catalog_3d
"""
from .matching import match_coordinates_sky
......@@ -697,6 +707,9 @@ class SkyCoord(object):
from the on-sky distance if ``distance`` is set in this object or the
``catalogcoord`` object.
For more on how to use this (and related) functionality, see the
examples in :doc:`/coordinates/matchsep`.
Parameters
----------
catalogcoord : `~astropy.coordinates.SkyCoord` or `~astropy.coordinates.BaseCoordinateFrame`
......@@ -734,6 +747,7 @@ class SkyCoord(object):
See Also
--------
astropy.coordinates.match_coordinates_3d