Hello community,

here is the log from the commit of package python-skyfield for openSUSE:Factory 
checked in at 2020-07-27 17:40:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-skyfield (Old)
 and      /work/SRC/openSUSE:Factory/.python-skyfield.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-skyfield"

Mon Jul 27 17:40:44 2020 rev:3 rq:822763 version:1.25

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-skyfield/python-skyfield.changes  
2020-07-24 10:04:19.685873586 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-skyfield.new.3592/python-skyfield.changes    
    2020-07-27 17:41:32.707064312 +0200
@@ -1,0 +2,32 @@
+Sat Jul 25 11:43:28 UTC 2020 - Benjamin Greiner <c...@bnavigator.de>
+
+- Update to version 1.25
+  * Added skyfield.data.stellarium.parse_constellations()
+    and skyfield.data.stellarium.parse_star_names()
+    to load Stellarium star names and constellation lines. 
+    Constellation lines are featured in a new example script 
+    neowise-chart that produces a finder chart for 
+    comet C/2020 F3 NEOWISE.
+  * The Hipparcos star catalog should now load faster, having 
+    switched behind the scenes to a higher performance Pandas 
+    import routine.
+  * Fixed the ability of  skyfield.timelib.Timescale.utc()
+    to accept a Python datetime.date object as its argument.
+    #409
+  * Slightly lowered the precision of two tests when they 
+    detect that Python is compiled for a 32-bit processor, so 
+    the test suite can succeed when contributors package 
+    Skyfield for 32-bit Linux. #411
+- use upstreams custom test runner 'assay'
+  * The runner does not have any releases yet. No package 
+    available, so use assay-master-252.79f5d78.tar.gz directly
+  * drop skyfield-pr405-replace-assay-by-pytest.patch
+  * gh#brandon-rhodes/assay#6, gh#skyfielders/python-skyfield#405
+- the unit test expect a truncated hipparcos catalog
+  * generate-hipparcos.sh
+  * hip_main.dat.gz
+- drop skyfield-pr404-comparefloat.patch addressed upstream
+  gh#skyfielders/python-skyfield#404
+  gh#skyfielders/python-skyfield#411
+
+-------------------------------------------------------------------

Old:
----
  skyfield-1.24.tar.gz
  skyfield-pr404-comparefloat.patch
  skyfield-pr405-replace-assay-by-pytest.patch

New:
----
  assay-master-252.79f5d78.tar.gz
  generate-hipparcos.sh
  skyfield-1.25.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-skyfield.spec ++++++
--- /var/tmp/diff_new_pack.dvc2us/_old  2020-07-27 17:41:39.951071113 +0200
+++ /var/tmp/diff_new_pack.dvc2us/_new  2020-07-27 17:41:39.955071116 +0200
@@ -17,11 +17,11 @@
 
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%define assaycommit 18f320237345813a49173657e7d2d6ca85e9a38a
-%define assayver    245.18f3202
+%define assaycommit 79f5d784a55d70f31b2c90b636910738cd74840e
+%define assayver    252.79f5d78
 %define skip_python2 1
 Name:           python-skyfield
-Version:        1.24
+Version:        1.25
 Release:        0
 Summary:        Elegant astronomy for Python
 License:        MIT
@@ -36,12 +36,12 @@
 Source6:        ftp://cddis.nasa.gov/products/iers/deltat.data
 Source7:        ftp://cddis.nasa.gov/products/iers/deltat.preds
 Source8:        https://hpiers.obspm.fr/iers/bul/bulc/Leap_Second.dat
-Source9:        http://cdsarc.u-strasbg.fr/ftp/cats/I/239/hip_main.dat.gz
+# use generate-hipparcos.sh to download and truncate the test data
+Source9:        hip_main.dat.gz
+Source10:       generate-hipparcos.sh
+# upstreams custom test runner assay: gh#skyfielders/python-skyfield#405
+Source98:       
https://github.com/brandon-rhodes/assay/archive/%{assaycommit}.tar.gz#/assay-master-%{assayver}.tar.gz
 Source99:       python-skyfield-rpmlintrc
-# PR404 Refine some float comparisons in the unit tests for flaky platforms 
gh#skyfielders/python-skyfield#404
-Patch0:         skyfield-pr404-comparefloat.patch
-# PR405 Replace upstreams custom testrunner 'assay' with standard pytest 
gh#skyfielders/python-skyfield#405
-Patch1:         skyfield-pr405-replace-assay-by-pytest.patch
 BuildRequires:  %{python_module astropy}
 BuildRequires:  %{python_module beautifulsoup4}
 BuildRequires:  %{python_module certifi}
@@ -49,9 +49,9 @@
 BuildRequires:  %{python_module jplephem >= 2.13}
 BuildRequires:  %{python_module lxml}
 BuildRequires:  %{python_module matplotlib}
+BuildRequires:  %{python_module mock}
 BuildRequires:  %{python_module numpy}
 BuildRequires:  %{python_module pandas}
-BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module sgp4 >= 2.2}
 BuildRequires:  fdupes
@@ -74,10 +74,7 @@
 research-grade positions for planets and Earth satellites.
 
 %prep
-%setup -q -n skyfield-%{version}
-%autopatch -p1
-# https://github.com/skyfielders/python-skyfield/issues/411
-sed -i -e 's/assert relative_error < 2e-12/assert relative_error < 4e-12/' 
skyfield/tests/test_positions.py
+%setup -q -n skyfield-%{version} -b 98
 # copy all test data files into the rootdir
 cp %{SOURCE1} %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} 
%{SOURCE7} %{SOURCE8} %{SOURCE9} ./
 
@@ -89,7 +86,8 @@
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
-%pytest
+export PYTHONPATH="../assay-%{assaycommit}"
+%python_exec -m assay --batch skyfield.tests
 
 %files %{python_files}
 %doc README.rst



++++++ generate-hipparcos.sh ++++++
#!/bin/sh
# Get truncated Hipparcos catalog for testing
# Truncate the Hipparcos catalog to stars with magnitude brighter than 6.6
# corresponds to last line of
# https://github.com/skyfielders/python-skyfield/blob/master/builders/Makefile 
URL=http://cdsarc.u-strasbg.fr/ftp/cats/I/239/hip_main.dat.gz 
curl "$URL" | zcat | awk -F\| '$6 <= 6.6 || $2 == 87937' | gzip -c -9 > 
hip_main.dat.gz
++++++ hip_main.dat.gz ++++++
++++ 118221 lines (skipped)
++++ between hip_main.dat.gz
++++ and /work/SRC/openSUSE:Factory/.python-skyfield.new.3592/hip_main.dat.gz


++++++ skyfield-1.24.tar.gz -> skyfield-1.25.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/PKG-INFO new/skyfield-1.25/PKG-INFO
--- old/skyfield-1.24/PKG-INFO  2020-07-21 03:45:09.000000000 +0200
+++ new/skyfield-1.25/PKG-INFO  2020-07-24 12:07:05.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: skyfield
-Version: 1.24
+Version: 1.25
 Summary: Elegant astronomy for Python
 Home-page: http://github.com/brandon-rhodes/python-skyfield/
 Author: Brandon Rhodes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/__init__.py 
new/skyfield-1.25/skyfield/__init__.py
--- old/skyfield-1.24/skyfield/__init__.py      2020-07-21 03:40:13.000000000 
+0200
+++ new/skyfield-1.25/skyfield/__init__.py      2020-07-24 11:43:58.000000000 
+0200
@@ -5,5 +5,5 @@
 the source code, as well as the http://rhodesmill.org/skyfield/ site!
 
 """
-VERSION = (1, 24)
+VERSION = (1, 25)
 __version__ = '.'.join(map(str, VERSION))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/constellationlib.py 
new/skyfield-1.25/skyfield/constellationlib.py
--- old/skyfield-1.24/skyfield/constellationlib.py      2020-06-12 
20:16:38.000000000 +0200
+++ new/skyfield-1.25/skyfield/constellationlib.py      2020-07-24 
11:51:59.000000000 +0200
@@ -29,11 +29,11 @@
 from .timelib import Time, julian_date_of_besselian_epoch
 
 def load_constellation_map():
-    """Load Skyfield's constellation map and return a lookup function
+    """Load Skyfield's constellation boundaries and return a lookup function.
 
-    Skyfield carries an internal constellation map that is optimized for
-    quick position lookup.  Call this function to load the map and
-    return a function mapping position to constellation name.
+    Skyfield carries an internal map of constellation boundaries that is
+    optimized for quick position lookup.  Call this function to load the
+    map and return a function mapping position to constellation name.
 
     >>> from skyfield.api import position_of_radec, load_constellation_map
     >>> constellation_at = load_constellation_map()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/data/hipparcos.py 
new/skyfield-1.25/skyfield/data/hipparcos.py
--- old/skyfield-1.24/skyfield/data/hipparcos.py        2020-06-04 
15:43:53.000000000 +0200
+++ new/skyfield-1.25/skyfield/data/hipparcos.py        2020-07-21 
13:18:03.000000000 +0200
@@ -41,6 +41,21 @@
 installer, like "pip install pandas" or "conda install pandas".
 """
 
+_COLUMN_NAMES = (
+    'Catalog', 'HIP', 'Proxy', 'RAhms', 'DEdms', 'Vmag',
+    'VarFlag', 'r_Vmag', 'RAdeg', 'DEdeg', 'AstroRef', 'Plx', 'pmRA',
+    'pmDE', 'e_RAdeg', 'e_DEdeg', 'e_Plx', 'e_pmRA', 'e_pmDE', 'DE:RA',
+    'Plx:RA', 'Plx:DE', 'pmRA:RA', 'pmRA:DE', 'pmRA:Plx', 'pmDE:RA',
+    'pmDE:DE', 'pmDE:Plx', 'pmDE:pmRA', 'F1', 'F2', '---', 'BTmag',
+    'e_BTmag', 'VTmag', 'e_VTmag', 'm_BTmag', 'B-V', 'e_B-V', 'r_B-V',
+    'V-I', 'e_V-I', 'r_V-I', 'CombMag', 'Hpmag', 'e_Hpmag', 'Hpscat',
+    'o_Hpmag', 'm_Hpmag', 'Hpmax', 'HPmin', 'Period', 'HvarType',
+    'moreVar', 'morePhoto', 'CCDM', 'n_CCDM', 'Nsys', 'Ncomp',
+    'MultFlag', 'Source', 'Qual', 'm_HIP', 'theta', 'rho', 'e_rho',
+    'dHp', 'e_dHp', 'Survey', 'Chart', 'Notes', 'HD', 'BD', 'CoD',
+    'CPD', '(V-I)red', 'SpType', 'r_SpType',
+)
+
 def load_dataframe(fobj, compression='gzip'):
     """Given an open file for `hip_main.dat.gz`, return a parsed dataframe.
 
@@ -49,21 +64,19 @@
 
     """
     try:
-        from pandas import read_fwf
+        from pandas import read_csv
     except ImportError:
         raise ImportError(PANDAS_MESSAGE)
 
-    names, colspecs = zip(
-        ('hip', (2, 14)),
-        ('magnitude', (41, 46)),
-        ('ra_degrees', (51, 63)),
-        ('dec_degrees', (64, 76)),
-        ('parallax_mas', (79, 86)),  # TODO: have Star load this
-        ('ra_mas_per_year', (87, 95)),
-        ('dec_mas_per_year', (96, 104)),
+    df = read_csv(
+        fobj, sep='|', compression=compression, names=_COLUMN_NAMES,
+        usecols=['HIP', 'Vmag', 'RAdeg', 'DEdeg', 'Plx', 'pmRA', 'pmDE'],
+        na_values=['     ', '       ', '        ', '            '],
+    )
+    df.columns = (
+        'hip', 'magnitude', 'ra_degrees', 'dec_degrees',
+        'parallax_mas', 'ra_mas_per_year', 'dec_mas_per_year',
     )
-
-    df = read_fwf(fobj, colspecs, names=names, compression=compression)
     df = df.assign(
         ra_hours = df['ra_degrees'] / 15.0,
         epoch_year = 1991.25,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/data/stellarium.py 
new/skyfield-1.25/skyfield/data/stellarium.py
--- old/skyfield-1.24/skyfield/data/stellarium.py       1970-01-01 
01:00:00.000000000 +0100
+++ new/skyfield-1.25/skyfield/data/stellarium.py       2020-07-24 
11:55:32.000000000 +0200
@@ -0,0 +1,59 @@
+"""Parse Stellarium data files."""
+
+from collections import namedtuple
+
+StarName = namedtuple('StarName', 'hip name')
+
+def parse_constellations(lines):
+    """Return a list of constellation outlines.
+
+    Each constellation outline is a list of edges, each of which is
+    drawn between a pair of specific stars::
+
+        [
+            (name, [(star1, star2), (star3, star4), ...]),
+            (name, [(star1, star2), (star3, star4), ...]),
+            ...
+        ]
+
+    Each name is a 3-letter constellation abbreviation; each star is an
+    integer Hipparcos catalog number.  See :ref:`neowise-chart` for an
+    example of how to combine this data with the Hipparcos star catalog
+    to draw constellation lines on a chart.
+
+    """
+    constellations = []
+    for line in lines:
+        line = line.lstrip()
+        if line.startswith(b'#'):
+            continue
+        fields = line.split()
+        if not fields:
+            continue
+        name = fields[0]
+        edges = [(int(fields[i]), int(fields[i+1]))
+                 for i in range(2, len(fields), 2)]
+        constellations.append((name.decode('utf-8'), edges))
+    return constellations
+
+def parse_star_names(lines):
+    """Return the names in a Stellarium ``star_names.fab`` file.
+
+    Returns a list of named tuples, each of which offers a ``.hip``
+    attribute with a Hipparcos catalog number and a ``.name`` attribute
+    with the star name.  Do not depend on the tuple having only length
+    two; additional fields may be added in the future.
+
+    """
+    names = []
+    for line in lines:
+        line = line.strip()
+        if line == b'' or line.startswith(b'#'):
+            continue
+        fields = line.split()
+        hip, name = fields[0].split(b'|')
+        names.append(StarName(
+            int(hip),
+            name.strip(b'_(")').decode('utf-8'),
+        ))
+    return names
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/documentation/api.rst 
new/skyfield-1.25/skyfield/documentation/api.rst
--- old/skyfield-1.24/skyfield/documentation/api.rst    2020-07-17 
16:17:03.000000000 +0200
+++ new/skyfield-1.25/skyfield/documentation/api.rst    2020-07-24 
11:45:40.000000000 +0200
@@ -310,6 +310,8 @@
 ==============
 
 .. autofunction:: skyfield.api.load_constellation_map
+.. autofunction:: skyfield.data.stellarium.parse_constellations
+.. autofunction:: skyfield.data.stellarium.parse_star_names
 
 Searching
 =========
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/skyfield-1.24/skyfield/documentation/example-plots.rst 
new/skyfield-1.25/skyfield/documentation/example-plots.rst
--- old/skyfield-1.24/skyfield/documentation/example-plots.rst  2020-06-04 
15:43:53.000000000 +0200
+++ new/skyfield-1.25/skyfield/documentation/example-plots.rst  2020-07-24 
11:56:33.000000000 +0200
@@ -6,8 +6,32 @@
 This section of the documentation
 will gradually accumulate example scripts
 for producing images from Skyfield computations.
-For the moment there’s only example so far,
-for plotting the elevation of a satellite over time:
+
+Note that these example scripts
+are written for fairly recent versions of `matplotlib`_.
+If you try running them on a system
+with an older version of the library,
+you might see errors — in particular with how they specify colors,
+in which case you can try omitting those parameters
+to get the script running.
+In any case,
+these are only intended to be a starting point
+for building your own scripts,
+either with matplotlib or whatever other plotting library you prefer.
+
+.. _neowise-chart:
+
+Drawing a finder chart for comet NEOWISE
+========================================
+
+Here is a stand-alone script
+that brings together four different data sources —
+a planetary ephemeris, a comet orbit database, a large star catalog,
+and constellation diagrams —
+to plot the course of Comet NEOWISE across Ursa Major
+over one week of July 2020:
+
+.. image:: _static/neowise-finder-chart.png
 
 .. testsetup::
 
@@ -15,6 +39,42 @@
     matplotlib.use('Agg')  # to avoid “no display name” error on Travis CI
     del matplotlib
 
+    import sys
+    sys.path[0:0] = ['../../examples']
+    import comet_neowise_chart
+
+Its code includes many design decisions and presentation tweaks
+that you will probably want to adjust for your own project.
+Use the script as a starting point:
+
+.. include:: ../../examples/comet_neowise_chart.py
+   :literal:
+
+.. testcleanup::
+
+    import os
+    os.rename('neowise-finder-chart.png', '_static/neowise-finder-chart.png')
+
+If you choose a different rendering engine
+instead of the venerable but rather ornery and complicated `matplotlib`_,
+then of course the plotting calls you make
+will be completely different.
+But the basic data loading and filtering will be the same,
+so hopefully the script will still help get you started
+in targeting a more modern plotting library.
+
+Plotting satellite altitude during re-entry
+===========================================
+
+Here is the decreasing altitude of a satellite as its orbit decayed
+and it re-entered the atmosphere above the Pacific Ocean:
+
+.. image:: _static/goce-reentry.png
+
+The code to produce the diagram using `matplotlib`_,
+including custom tick marks that are based on the date,
+is:
+
 .. testcode::
 
     from matplotlib import pyplot as plt
@@ -47,36 +107,34 @@
 
     # Start a new figure.
 
-    plt.figure()
+    fig, ax = plt.subplots()
 
     # Draw the blue curve.
 
     x = t.toordinal()
     y = sat.at(t).distance().km - earth_radius_km
-    plt.plot(x, y)
+    ax.plot(x, y)
 
     # Label the official moment of reentry.
 
     x = reentry.toordinal()
     y = sat.at(reentry).distance().km - earth_radius_km
-    plt.plot(x, y, 'ro')
-    plt.text(x, y + 10, 'Moment of re-entry')
+    ax.plot(x, y, 'ro')
+    ax.text(x, y + 10, 'Moment of re-entry')
 
     # Grid lines and labels.
 
-    axes = plt.axes()
-    axes.grid(True)
-    label_dates_and_hours(axes)
-    plt.title('GOCE satellite altitude')
-    plt.ylabel('km above sea level')
+    label_dates_and_hours(ax)
+    ax.grid()
+    ax.set(title='GOCE satellite altitude', ylabel='km above sea level')
 
     # Render the plot to a PNG file.
 
-    plt.savefig('goce-reentry.png')
-
-.. image:: _static/goce-reentry.png
+    fig.savefig('goce-reentry.png', bbox_inches='tight')
 
 .. testcleanup::
 
     import os
     os.rename('goce-reentry.png', '_static/goce-reentry.png')
+
+.. _matplotlib: https://matplotlib.org/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/documentation/searches.rst 
new/skyfield-1.25/skyfield/documentation/searches.rst
--- old/skyfield-1.24/skyfield/documentation/searches.rst       2020-06-15 
18:41:50.000000000 +0200
+++ new/skyfield-1.25/skyfield/documentation/searches.rst       2020-07-21 
12:20:38.000000000 +0200
@@ -183,17 +183,16 @@
 
     from matplotlib import pyplot as plt
 
-    plt.figure(figsize=(5, 3))
-    plt.title('Elongation of Mars (degrees)')
-    plt.xlabel('Year')
-    plt.axes().grid(True)
-    plt.axes().axhline(90, color='r')  # Red line at 90°
+    fig, ax = plt.subplots(figsize=(5, 3))
 
     t = ts.utc(2018, 1, range(366 * 5))
-    plt.plot(t.J, mars_elongation_degrees(t))
+    ax.axhline(90, color='r')  # Red line at 90°
+    ax.plot(t.J, mars_elongation_degrees(t))
+    ax.set(title='Elongation of Mars (degrees)', xlabel='Year')
+    ax.grid(True)
 
-    plt.tight_layout()
-    plt.savefig('mars-elongation.png')
+    fig.tight_layout()
+    fig.savefig('mars-elongation.png')
 
 .. image:: _static/mars-elongation.png
 
@@ -251,12 +250,10 @@
 
 .. testcode::
 
-    from matplotlib import pyplot as plt
-
-    plt.figure(figsize=(5, 1.5))
-    plt.plot(t.J, mars_quadrature(t))
-    plt.tight_layout()
-    plt.savefig('mars-quadrature.png')
+    fig, ax = plt.subplots(figsize=(5, 1.5))
+    ax.plot(t.J, mars_quadrature(t))
+    fig.tight_layout()
+    fig.savefig('mars-quadrature.png')
 
 .. image:: _static/mars-quadrature.png
 
@@ -280,10 +277,10 @@
 .. testcode::
 
     t_annual = ts.utc(range(2018, 2024))
-    plt.figure(figsize=(5, 1.5))
-    plt.plot(t_annual.J, mars_quadrature(t_annual), 'ro')
-    plt.tight_layout()
-    plt.savefig('mars-quadrature-undersampled.png')
+    fig, ax = plt.subplots(figsize=(5, 1.5))
+    ax.plot(t_annual.J, mars_quadrature(t_annual), 'ro')
+    fig.tight_layout()
+    fig.savefig('mars-quadrature-undersampled.png')
 
 .. image:: _static/mars-quadrature-undersampled.png
 
@@ -407,16 +404,15 @@
 
 .. testcode::
 
-    plt.figure(figsize=(5, 2))
-    plt.title('Elongation of Venus (degrees)')
-    plt.xlabel('Year')
-    plt.axes().grid(True)
+    fig, ax = plt.subplots(figsize=(5, 2))
 
     t = ts.utc(2018, 1, range(366 * 5))
-    plt.plot(t.J, venus_elongation_degrees(t))
+    ax.plot(t.J, venus_elongation_degrees(t))
+    ax.set(title='Elongation of Venus (degrees)', xlabel='Year')
+    ax.grid()
 
-    plt.tight_layout()
-    plt.savefig('venus-elongation.png')
+    fig.tight_layout()
+    fig.savefig('venus-elongation.png')
 
 .. image:: _static/venus-elongation.png
 
@@ -445,16 +441,15 @@
 
 .. testcode::
 
-    plt.figure(figsize=(5, 2))
-    plt.title('Elongation of Venus (degrees)')
-    plt.xlabel('Year')
-    plt.axes().grid(True)
+    fig, ax = plt.subplots(figsize=(5, 2))
 
     t = ts.utc(range(2018, 2024))
-    plt.plot(t.J, venus_elongation_degrees(t), 'ro')
+    ax.plot(t.J, venus_elongation_degrees(t), 'ro')
+    ax.set(title='Elongation of Venus (degrees)', xlabel='Year')
+    ax.grid()
 
-    plt.tight_layout()
-    plt.savefig('venus-elongation-undersampled.png')
+    fig.tight_layout()
+    fig.savefig('venus-elongation-undersampled.png')
 
 .. image:: _static/venus-elongation-undersampled.png
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/documentation/stars.rst 
new/skyfield-1.25/skyfield/documentation/stars.rst
--- old/skyfield-1.24/skyfield/documentation/stars.rst  2020-06-15 
18:37:27.000000000 +0200
+++ new/skyfield-1.25/skyfield/documentation/stars.rst  2020-07-21 
12:10:54.000000000 +0200
@@ -151,13 +151,13 @@
 
    from matplotlib import pyplot as plt
 
-   plt.figure()
-   plt.title('The brightest stars in Orion')
-   plt.scatter(ra.hours, dec.degrees, 8 - df['magnitude'], 'k')
-   plt.xlim(7.0, 4.0)
-   plt.ylim(-20, 20)
-   plt.axes().grid(True)
-   plt.savefig('bright_stars.png')
+   fig, ax = plt.subplots()
+   ax.scatter(ra.hours, dec.degrees, 8 - df['magnitude'], 'k')
+   ax.set_xlim(7.0, 4.0)
+   ax.set_ylim(-20, 20)
+   ax.grid(True)
+   ax.set(title='The brightest stars in Orion')
+   fig.savefig('bright_stars.png')
 
 The result of the simple filtering and plotting is an (admittedly
 primitive) rendering of Orion!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/named_stars.py 
new/skyfield-1.25/skyfield/named_stars.py
--- old/skyfield-1.24/skyfield/named_stars.py   2020-06-12 20:16:38.000000000 
+0200
+++ new/skyfield-1.25/skyfield/named_stars.py   2020-07-24 11:24:47.000000000 
+0200
@@ -1,3 +1,4 @@
+# TODO: Deprecate; maybe even remove, since it's not documented?
 """
 Convenience functions for users to get a Star instance using a small database
 of named stars.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/projections.py 
new/skyfield-1.25/skyfield/projections.py
--- old/skyfield-1.24/skyfield/projections.py   2020-07-17 16:17:03.000000000 
+0200
+++ new/skyfield-1.25/skyfield/projections.py   2020-07-24 00:42:26.000000000 
+0200
@@ -43,8 +43,11 @@
     # https://math.stackexchange.com/questions/409217/
     p = center.position.au
     u = p / length_of(p)
-    c = u.mean(axis=1)
-    c = c / length_of(c)
+    if len(u.shape) > 1:
+        c = u.mean(axis=1)
+        c = c / length_of(c)
+    else:
+        c = u
     x_c, y_c, z_c = c
 
     def project(position):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/tests/fixes.py 
new/skyfield-1.25/skyfield/tests/fixes.py
--- old/skyfield-1.24/skyfield/tests/fixes.py   2020-07-20 17:55:20.000000000 
+0200
+++ new/skyfield-1.25/skyfield/tests/fixes.py   2020-07-24 10:28:10.000000000 
+0200
@@ -1,10 +1,13 @@
 """Helpers for making Skyfield tests stable."""
 
 import datetime as dt
+import sys
+
 from skyfield import earthlib
 import skyfield.api
 import skyfield.timelib
 
+IS_32_BIT = (sys.maxsize == 0x7fffffff)
 _real_datetime_class = dt.datetime
 
 class datetime(dt.datetime):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/tests/test_io.py 
new/skyfield-1.25/skyfield/tests/test_io.py
--- old/skyfield-1.24/skyfield/tests/test_io.py 2020-07-10 11:52:13.000000000 
+0200
+++ new/skyfield-1.25/skyfield/tests/test_io.py 2020-07-22 16:27:39.000000000 
+0200
@@ -5,7 +5,10 @@
 import tempfile
 from contextlib import contextmanager
 from datetime import date
-from mock import patch
+try:
+    from unittest.mock import patch
+except ImportError:
+    from mock import patch
 
 from skyfield import api
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/tests/test_io_parsing.py 
new/skyfield-1.25/skyfield/tests/test_io_parsing.py
--- old/skyfield-1.24/skyfield/tests/test_io_parsing.py 2020-06-12 
20:16:38.000000000 +0200
+++ new/skyfield-1.25/skyfield/tests/test_io_parsing.py 2020-07-24 
11:22:34.000000000 +0200
@@ -2,7 +2,7 @@
 
 import gzip
 from skyfield import iokit
-from skyfield.data.hipparcos import load_dataframe
+from skyfield.data import hipparcos, stellarium
 from skyfield.functions import BytesIO
 from skyfield.iokit import parse_tle
 
@@ -125,7 +125,7 @@
     g.close()
     b.seek(0)
     try:
-        df = load_dataframe(b)
+        df = hipparcos.load_dataframe(b)
     except ImportError:
         # raise SkipTest('pandas not available')
         # Assay doesn't understand skipping tests yet; just pass
@@ -135,3 +135,21 @@
     row = df.iloc[0]
     assert abs(row.ra_degrees - 000.00091185) < 1e-30
     assert abs(row.dec_degrees - +01.08901332) < 1e-30
+
+star_text = b"""\
+# star names by constellation
+# Andromeda (And)
+   677|_("Alpheratz") 1,2,5,6,11,12
+   677|_("Sirrah")
+  5447|_("Mirach") 1,2,5,6,11,12,23
+  9640|_("Almach") 1,2,5,6,11,12
+  9640|_("Almaak")
+"""
+
+def test_stellarium_star_names():
+    f = BytesIO(star_text)
+    star_names = stellarium.parse_star_names(f)
+    assert star_names[0].hip == 677
+    assert star_names[0].name == 'Alpheratz'
+    assert star_names[4].hip == 9640
+    assert star_names[4].name == 'Almaak'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/tests/test_planetarylib.py 
new/skyfield-1.25/skyfield/tests/test_planetarylib.py
--- old/skyfield-1.24/skyfield/tests/test_planetarylib.py       2020-07-17 
16:17:03.000000000 +0200
+++ new/skyfield-1.25/skyfield/tests/test_planetarylib.py       2020-07-24 
10:34:20.000000000 +0200
@@ -2,6 +2,7 @@
 from skyfield.api import PlanetaryConstants, T0, load
 from skyfield.constants import AU_KM, AU_M
 from skyfield.positionlib import ICRF
+from .fixes import IS_32_BIT
 
 def test_frame_rotation_matrices():
     # To produce the following matrices:
@@ -47,7 +48,10 @@
 
     R2, Rv = frame.rotation_and_rate_at(ts.tdb_jd(tdb))
     assert (R == R2).all()
-    assert (Rv == desired_rate).all()  # Boom.
+    if IS_32_BIT:
+        assert abs(Rv - desired_rate).max() < 3e-26
+    else:
+        assert (Rv == desired_rate).all()  # Boom.
 
     # Second, a moment when the angle W is more than 2500 radians.
 
@@ -93,11 +97,17 @@
     frame = pc.build_frame_named('MOON_ME_DE421')
     R = frame.rotation_at(ts.tdb_jd(tdb))
     delta = abs(R - desired_rotation)
-    assert (R == desired_rotation).all()
+    if IS_32_BIT:
+        assert abs(R - desired_rotation).max() < 2e-16
+    else:
+        assert (R == desired_rotation).all()
 
     R2, Rv = frame.rotation_and_rate_at(ts.tdb_jd(tdb))
     assert (R == R2).all()
-    assert (Rv == desired_rate).all()
+    if IS_32_BIT:
+        assert abs(Rv - desired_rate).max() < 2e-23
+    else:
+        assert (Rv == desired_rate).all()
 
 def test_rotating_vector_into_frame():
     et_seconds = 259056665.1855896
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/tests/test_positions.py 
new/skyfield-1.25/skyfield/tests/test_positions.py
--- old/skyfield-1.24/skyfield/tests/test_positions.py  2020-07-21 
03:38:20.000000000 +0200
+++ new/skyfield-1.25/skyfield/tests/test_positions.py  2020-07-24 
10:28:50.000000000 +0200
@@ -5,7 +5,7 @@
 from skyfield.functions import length_of, mxv, rot_z
 from skyfield.positionlib import ICRF, ITRF_to_GCRS2, _GIGAPARSEC_AU
 from skyfield.starlib import Star
-from .fixes import low_precision_ERA
+from .fixes import IS_32_BIT, low_precision_ERA
 
 def test_subtraction():
     p0 = ICRF((10,20,30), (40,50,60))
@@ -126,7 +126,8 @@
     relative_error = (length_of(actual_motion - predicted_motion)
                       / length_of(actual_motion))
 
-    assert relative_error < 2e-12
+    acceptable_error = 4e-12 if IS_32_BIT else 2e-12
+    assert relative_error < acceptable_error
 
 # Test that the CIRS coordinate of the TIO is consistent with the Earth 
Rotation Angle
 # This is mostly an internal consistency check
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/tests/test_stars.py 
new/skyfield-1.25/skyfield/tests/test_stars.py
--- old/skyfield-1.24/skyfield/tests/test_stars.py      2020-06-12 
20:16:38.000000000 +0200
+++ new/skyfield-1.25/skyfield/tests/test_stars.py      2020-07-24 
05:40:14.000000000 +0200
@@ -5,4 +5,4 @@
     with api.load.open('hip_main.dat.gz') as f:
         df = load_dataframe(f)
     star = api.Star.from_dataframe(df)
-    assert repr(star) == 'Star(ra shape=214, dec shape=214, ra_mas_per_year 
shape=214, dec_mas_per_year shape=214, parallax_mas shape=214, epoch shape=214)'
+    assert repr(star) == 'Star(ra shape=9933, dec shape=9933, ra_mas_per_year 
shape=9933, dec_mas_per_year shape=9933, parallax_mas shape=9933, epoch 
shape=9933)'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/tests/test_timelib.py 
new/skyfield-1.25/skyfield/tests/test_timelib.py
--- old/skyfield-1.24/skyfield/tests/test_timelib.py    2020-07-17 
15:39:21.000000000 +0200
+++ new/skyfield-1.25/skyfield/tests/test_timelib.py    2020-07-22 
14:45:02.000000000 +0200
@@ -1,3 +1,4 @@
+import datetime as dt_module
 import numpy as np
 from assay import assert_raises
 from pytz import timezone
@@ -102,6 +103,11 @@
         2442046.5, 2442047.5, 2442048.5, 2442049.5, 2442050.5, 2442051.5,
     ]
 
+def test_building_time_from_python_date(ts):
+    d = dt_module.date(2020, 7, 22)
+    t = ts.utc(d)
+    assert t.utc == (2020, 7, 22, 0, 0, 0.0)
+
 def test_converting_ut1_to_tt(ts):
     ten_thousand_years = 365 * 10000
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skyfield-1.24/skyfield/timelib.py 
new/skyfield-1.25/skyfield/timelib.py
--- old/skyfield-1.24/skyfield/timelib.py       2020-07-21 03:27:53.000000000 
+0200
+++ new/skyfield-1.25/skyfield/timelib.py       2020-07-22 14:43:58.000000000 
+0200
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-import datetime as dt
+import datetime as dt_module
 import re
 from collections import namedtuple
 from datetime import date, datetime
@@ -33,8 +33,8 @@
     @property
     def second(self): return self[5]
 
-if hasattr(dt, 'timezone'):
-    utc = dt.timezone.utc
+if hasattr(dt_module, 'timezone'):
+    utc = dt_module.timezone.utc
 else:
     try:
         from pytz import utc
@@ -42,9 +42,9 @@
         # Lacking a full suite of timezones from pytz, we at least need a
         # time zone object for UTC.
 
-        class UTC(dt.tzinfo):
+        class UTC(dt_module.tzinfo):
             'UTC'
-            zero = dt.timedelta(0)
+            zero = dt_module.timedelta(0)
             def utcoffset(self, dt):
                 return self.zero
             def tzname(self, dt):
@@ -56,7 +56,7 @@
 
 # Much of the following code is adapted from the USNO's "novas.c".
 
-_time_zero = dt.time()
+_time_zero = dt_module.time(tzinfo=utc)
 _half_minute = 30.0 / DAY_S
 _half_second = 0.5 / DAY_S
 _half_microsecond = 0.5e-6 / DAY_S
@@ -150,7 +150,7 @@
         if isinstance(year, datetime):
             return self.from_datetime(year)
         if isinstance(year, date):
-            return self.from_datetime(dt.combine(year, _time_zero))
+            return self.from_datetime(datetime.combine(year, _time_zero))
         if hasattr(year, '__len__') and isinstance(year[0], datetime):
             return self.from_datetimes(year)
 


Reply via email to