1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313
|
Changelog
=========
.. TODO After finding how to test TIRS reference frame, add it to changelog.
And double-check the constellation boundaries array.
-----------------
Released versions
-----------------
v1.53 — 2025 April 7
--------------------
* Fix: calling :meth:`~skyfield.positionlib.Barycentric.observe()` on a
position generated by an ephemeris with multiple segments per target,
like DE441, was raising an exception::
File ".../skyfield/relativity.py", line 46, in add_deflection
deflector = ephemeris[name]
TypeError: 'NoneType' object is not subscriptable
Users should no longer receive the exception.
`#1063 <https://github.com/skyfielders/python-skyfield/issues/1063>`_
v1.52 — 2025 March 18
---------------------
* Fix: on rare occasions the :func:`~skyfield.almanac.find_risings()`
and :func:`~skyfield.almanac.find_settings()` routines could return an
invalid result if no rising or setting was found, instead of returning
the moment of transit as their fallback result.
`#1057 <https://github.com/skyfielders/python-skyfield/issues/1057>`_
* Fix: if the :meth:`~skyfield.positionlib.ICRF.altaz()` method was
given a position with a NaN coordinate, and was passed
``temperature_C`` and ``pressure_mbar`` parameters with which to
compute refraction, then it would loop forever.
`#1046 <https://github.com/skyfielders/python-skyfield/issues/1046>`_
* Fix: the new :class:`~skyfield.framelib.mean_equator_and_equinox_of_date`
reference frame was off by nearly 0.02 arcseconds because it applied
precession but forgot to apply the frame tie between ICRS and J2000.
* To avoid deprecation warnings on recent Pythons, Skyfield now avoids
Python’s ``datetime.utcnow()`` method, and avoids applying the ``~``
unary operator.
v1.51 — 2025 February 23
------------------------
* Skyfield now supports ephemeris files like ``de441.bsp`` that have two
or more segments per target. In earlier versions of Skyfield, only
one segment per target would get used, which for ``de441.bsp`` was
cutting the range of supported dates in half.
`#691 <https://github.com/skyfielders/python-skyfield/issues/691>`_
* The documentation now uses the newer name ``.xyz``, which has been
quietly supported for around three years, for the
:class:`~skyfield.positionlib.ICRF` attribute that was originally
named ``.position`` and holds its position vector. The old name
(which will continue to be supported) could lead to code that looked a
little redundant, asking for the ``position`` of a ``position``::
position = mars.at(t)
x, y, z = position.position
So Skyfield now encourages code to ask for ``position.xyz`` instead.
An advantage is that the new name is self-documenting: the name
reminds the user that it is a 3-vector of Cartesian components.
* Skyfield’s internal table for the ∆T Earth orientation parameter has
been updated, so that its predictions now extend to 2026-02-28.
* Fix: the :meth:`~skyfield.sgp4lib.EarthSatellite.find_events()` Earth
satellite method was returning an empty list of events if the only
event in the time period was a lone rising or setting. It should now
detect and return them.
`#856 <https://github.com/skyfielders/python-skyfield/issues/856>`_
`#996 <https://github.com/skyfielders/python-skyfield/issues/996>`_
`#1017 <https://github.com/skyfielders/python-skyfield/issues/1017>`_
* Fix: the :meth:`~skyfield.sgp4lib.EarthSatellite.find_events()` Earth
satellite method, faced with a single pass that was very close to the
start time, was returning an inaccurate setting time. It should now
return an accurate setting time.
`#1000 <https://github.com/skyfielders/python-skyfield/issues/1000>`_
* Fix: the :meth:`~skyfield.sgp4lib.EarthSatellite.find_events()` Earth
satellite method would miss a rising that came a fraction of a second
before the corresponding culmination. It should now find both.
`#559 <https://github.com/skyfielders/python-skyfield/issues/559>`_
* Fix: bodies with Kepler orbits (like comets and asteroids) were
incorrectly returning positions with only a single dimension if given
a :class:`~skyfield.timelib.Time` that was an array but had only one
element. This could cause the rising and setting almanac routines to
raise a ``ValueError`` if they found only a single rising or setting.
`#959 <https://github.com/skyfielders/python-skyfield/issues/959>`_
* Fix: the position vectors for Kepler orbit bodies, like comets and
asteroids, now have a useful ``.target_name`` like ``'Ceres'`` or
``'1P/Halley'`` instead of the less informative value ``'str'``.
v1.50 — 2025 February 15
------------------------
* A new :class:`~skyfield.framelib.mean_equator_and_equinox_of_date`
coordinate frame lets users generate the same coordinates that an
almanac might give.
* Skyfield now offers a Solar System Barycenter object, so users don’t
have to construct the position themselves: ``SSB.at(t)`` returns a
position whose coordinates and velocity are both zero in the ICRS.
* The routines added last year, :func:`~skyfield.almanac.find_risings()`
and :func:`~skyfield.almanac.find_settings()`, could occasionally miss
a sunrise or moonrise at high latitudes like 70°N where the Sun or
Moon barely crests the horizon. This has been fixed at a moderate
cost to their runtime.
`#998 <https://github.com/skyfielders/python-skyfield/issues/998>`_
* Skyfield no longer tries to protect users by raising an exception if,
contrary to the usual custom in astronomy, they ask for ``ra.degrees``
or ``dec.hours``. So users no longer need to add an underscore prefix
(``_degrees`` or ``_hours``) to bypass the exception, though both
names will keep working to support legacy code.
* The time methods :meth:`~skyfield.timelib.Time.utc_datetime()` and
:meth:`~skyfield.timelib.Time.utc_datetime_and_leap_second()` now
intercept the ``ValueError`` that Python raises for a negative year or
a Julian-only leap day, and replace the generic error message with a
more specific one.
`#957 <https://github.com/skyfielders/python-skyfield/issues/957>`_
`#992 <https://github.com/skyfielders/python-skyfield/issues/992>`_
* If you call ``load.timescale(builtin=False)`` to download an updated
copy of the IERS ``finals2000A.all`` Earth orientation data file,
Skyfield now fetches the file with HTTPS, since their old FTP server
seems to have disappeared.
`#1019 <https://github.com/skyfielders/python-skyfield/issues/1019>`_
v1.49 — 2024 June 13
--------------------
* A new :meth:`~skyfield.sgp4lib.EarthSatellite.from_omm()` Earth
Satellite constructor has been added to load satellite elements from
modern OMM data instead of from old TLE data. The Earth satellite
documentation now :ref:`describes two OMM formats
<satellite-element-formats>` and :ref:`shows how to load satellites
from each one <loading-satellite-elements>`. `#763
<https://github.com/skyfielders/python-skyfield/issues/763>`_
* If you print an instance of the
:class:`~skyfield.planetarylib.PlanetaryConstants` class to the screen,
it will list all of the segments that it has loaded from binary kernels.
`#952 <https://github.com/skyfielders/python-skyfield/issues/952>`_
* The Skyfield documentation is no longer installed alongside the Python
code, reducing the size of Skyfield by around 25%. Users who need
offline access to the documentation will now need to download it
separately.
v1.48 — 2024 February 7
-----------------------
* Skyfield is now compatible with NumPy 2.0! (Previous versions of
Skyfield would raise an ``ImportError`` trying to import the symbol
``float_``, which is now named ``float64``.)
* Times now support the ``<`` operator, so Python can sort them.
* For convenience, geoids like :data:`~skyfield.toposlib.wgs84` have a
new attribute :data:`~skyfield.toposlib.Geoid.polar_radius`.
* You can no longer subtract two positions unless they have the same
``.center``. Otherwise, a ``ValueError`` is raised. This check has
always been performed when you subtract vector functions, but it was
missing from the position subtraction routine.
* On days that the Sun fails to rise and set in the Arctic and
Antarctic, the new rising and setting routines now correctly set the
value ``False`` not only for sunrise but also for sunset.
* Fix: Skyfield no longer raises the following exception
if you call :meth:`~skyfield.positionlib.Barycentric.observe()`
on a position whose coordinate and time arrays are empty. ::
ValueError: zero-size array to reduction operation maximum which has no identity
Instead, an empty apparent position is now returned.
The exception was sometimes triggered by almanac routines
if you searched for an event that didn’t occur
between your start and end times.
`#991 <https://github.com/skyfielders/python-skyfield/issues/991>`_
v1.47 — 2024 January 13
-----------------------
* Added faster and more accurate rising and setting routines!
See `risings-and-settings` for documentation and examples of the new
:func:`~skyfield.almanac.find_risings()` and
:func:`~skyfield.almanac.find_settings()` and
:func:`~skyfield.almanac.find_transits()` functions.
`#662 <https://github.com/skyfielders/python-skyfield/issues/662>`_
* Skyfield’s internal table for the ∆T Earth orientation parameter has
been updated, so that its predictions now extend to 2025-01-18.
* Constellation abbreviations are now consistent between the
:func:`~skyfield.api.load_constellation_map()` table and the
:func:`~skyfield.api.load_constellation_names()` list. Previously,
``CVn`` and ``TrA`` had been mis-capitalized in the list as ``Cvn``
and ``Tra``.
`#906 <https://github.com/skyfielders/python-skyfield/issues/906>`_
v1.46 — 2023 April 9
--------------------
* The :func:`~skyfield.almanac.oppositions_conjunctions()` routine now
measures ecliptic longitude using the ecliptic of each specific date,
rather than always using the J2000 ecliptic, which should improve its
accuracy by several seconds.
* Skyfield’s internal table for the ∆T Earth orientation parameter has
been updated, so that its predictions now extend to 2024-04-13.
* Bugfix: Skyfield was giving values several kilometers off when
computing the elevation above ground level of a target that was
positioned directly above the Earth’s north or south pole.
* Bugfix: the :func:`~skyfield.positionlib.ICRF.is_behind_earth()`
method was incorrectly returning ``True`` if the Earth was on the line
that joins the two satellites, but over on the far side of the other
satellite where it wasn’t really in the way.
* Internals: the :meth:`~skyfield.positionlib.ICRF.altaz()` method now
lives on the main position class instead of in two specific
subclasses. If the user mistakenly tries to call ``.altaz()`` on an
instance of the :class:`~skyfield.positionlib.Astrometric` position
subclass — which previously lacked the method — then a friendly
exception is raised explaining their error.
v1.45 — 2022 September 15
-------------------------
* Bugfix: minor planets and comets in Skyfield 1.44 would raise an
exception if asked for a position in the half of their orbit where
they are inbound towards their perihelion.
v1.44 — 2022 September 12
-------------------------
* Skyfield’s internal table for the ∆T Earth orientation parameter has
been updated, so that instead of including measurements only through
December 2021 it now knows Earth orientation through September 2022.
* Distance and velocity objects can now be created by calling their unit
names as constructors, like ``d = Distance.km(5.0)`` and
``v = Velocity.km_per_s(0.343)``.
* Updated the URL from which the Hipparcos database ``hip_main.dat`` is
downloaded, following a change in the domain for the University of
Strasbourg from ``u-strasbg.fr`` to ``unistra.fr``.
v1.43.1 — 2022 July 6
---------------------
* An attempt at overly clever scripting resulted in a Skyfield 1.43
release without a ``setup.py`` in its ``.tar.gz``; within an hour, a
Python 2.7 user had reported that Skyfield could no longer install.
This release is identical to 1.43 but (hopefully) installs correctly
for everyone!
v1.43 — 2022 July 6
-------------------
* Fixed :func:`~skyfield.magnitudelib.planetary_magnitude()` so it works
for Saturn even when the time is an array rather than a single time;
also, improved its calculation slightly with respect to Uranus.
`#739 <https://github.com/skyfielders/python-skyfield/issues/739>`_
* Improved :func:`~skyfield.data.mpc.load_comets_dataframe()` so that
parsing ``CometEls.txt`` with the most recent version of Pandas
doesn’t stumble over the commas in the final field of (for example)
Halley’s Comet and give the error ``ParserError: Error tokenizing
data. C error: Expected 12 fields…saw 13``.
`#707 <https://github.com/skyfielders/python-skyfield/issues/707>`_
v1.42 — 2022 February 6
-----------------------
* Added two new position methods
:meth:`~skyfield.positionlib.ICRF.phase_angle()`
and
:meth:`~skyfield.positionlib.ICRF.fraction_illuminated()`
that, given an illuminator (usually the Sun) as their argument,
compute whether the observer is looking at the bright side or the dark
side of the target body.
They replace a pair of old functions in the almanac module.
* The almanac routine :func:`~skyfield.almanac.moon_nodes()` would
sometimes skip nodes that were closer together than 14.0 days. It has
been tightened down and should now detect all lunar nodes.
`#662 <https://github.com/skyfielders/python-skyfield/issues/662>`_
* Time objects now feature a :meth:`~skyfield.timelib.Time.to_astropy`
method.
* The position method :meth:`~skyfield.positionlib.ICRF.to_skycoord` now
sets the ``frame`` attribute of the sky coordinate it returns, and for
now only supports barycentric and geocentric positions.
`#577 <https://github.com/skyfielders/python-skyfield/issues/577>`_
v1.41 — 2021 December 16
------------------------
* Times now support arithmetic: you can add or subtract from a time
either a number representing days of Terrestrial Time (TT) or a Python
``timedelta`` which Skyfield interprets as TT days and seconds.
`#568 <https://github.com/skyfielders/python-skyfield/issues/568>`_
* Fixed the ``.itrs_xyz`` vector of the geographic position returned
by the :meth:`~skyfield.toposlib.Geoid.subpoint_of()` method.
`#673 <https://github.com/skyfielders/python-skyfield/issues/673>`_
* Skyfield now uses HTTPS instead of FTP to download JPL ephemeris files
like ``de421.bsp``. This does risk raising an error for users whose
machines have out-of-date root certificates. But it protects the
connection from outside tampering, and will keep working if the
``ssd.jpl.nasa.gov`` FTP service is ever shut down — as happened
earlier this year to FTP on NASA’s ``cddis.nasa.gov`` server.
`#666 <https://github.com/skyfielders/python-skyfield/issues/666>`_
v1.40 — 2021 November 14
------------------------
* Extended the :func:`~skyfield.magnitudelib.planetary_magnitude()`
routine to work with all the major planets, which upgrades it from a
prototype feature to a production feature of Skyfield.
* The :meth:`~skyfield.toposlib.Geoid.subpoint()` method has been
deprecated, because users reported that its name was a poor match for
its behavior. Four new methods have replaced it:
:meth:`~skyfield.toposlib.Geoid.latlon_of()`,
:meth:`~skyfield.toposlib.Geoid.height_of()`,
:meth:`~skyfield.toposlib.Geoid.geographic_position_of()`, and
:meth:`~skyfield.toposlib.Geoid.subpoint_of()`.
`#644 <https://github.com/skyfielders/python-skyfield/issues/644>`_
* Added a timescale method :meth:`~skyfield.timelib.Timescale.linspace()`.
`#617 <https://github.com/skyfielders/python-skyfield/issues/617>`_
* The :func:`~skyfield.almanac.oppositions_conjunctions()` routine,
which was originally designed only for planets, can now also handle
the Moon (which moves from opposition to conjunction much faster).
v1.39 — 2021 April 14
---------------------
* The
:meth:`Angle.dstr() <skyfield.units.Angle.dstr>`
and
:meth:`Angle.hstr() <skyfield.units.Angle.hstr>`
methods now accept a ``format=`` argument
that lets callers override Skyfield’s default angle formatting
and supply their own; see `Formatting angles`.
`#513 <https://github.com/skyfielders/python-skyfield/issues/513>`_
* The prototype :func:`~skyfield.magnitudelib.planetary_magnitude()`
function now works not only when given a single position, but when
given a vector of several positions.
v1.38 — 2021 April 3
--------------------
* Replaced the old historic ∆T table from the United States Naval Observatory
with up-to-date splines from the 2020 release of the extensive research by
`Morrison, Stephenson, Hohenkerk, and Zawilski <Morrison, Stephenson, et al>`
and also adjusted the slope of Skyfield’s near-future ∆T estimates
to make the slope of ∆T much less abrupt over the coming century.
* Added a full reference frame object
for the :class:`~skyfield.sgp4lib.TEME` reference frame
used by SGP4 Earth satellite elements.
v1.37 — 2021 February 15
------------------------
* Added a :meth:`~skyfield.positionlib.ICRF.frame_latlon_and_rates()` method
that can compute the rates at which angles like altitude and azimuth,
or right ascension and declination,
are changing.
* Accepted a contributor’s helpful fix for a rounding error
that had slightly shifted a few constellation boundaries.
`#548 <https://github.com/skyfielders/python-skyfield/issues/548>`_
* The :class:`~skyfield.timelib.Time`
tuple :data:`~skyfield.timelib.Time.utc`
and method :meth:`~skyfield.timelib.Time.utc_strftime()`
are now backed by the same math,
so they always advance to the next calendar day at the same moment.
This makes it safe to mix values returned by one of them
with values returned by the other.
`#542 <https://github.com/skyfielders/python-skyfield/issues/542>`_
* Vector subtraction now returns the position subclass
specific to the resulting vector’s center.
`#549 <https://github.com/skyfielders/python-skyfield/issues/549>`_
v1.36 — 2021 January 26
-----------------------
* Tweaked several lines of code that build NumPy arrays
to avoid a new deprecation warning
``Creating an ndarray from ragged nested sequences
(which is a list-or-tuple of lists-or-tuples-or ndarrays
with different lengths or shapes) is deprecated``.
NumPy no longer wants to accept a simple constant like ``0.0``
where the resulting array needs a whole row of zeros.
`#536 <https://github.com/skyfielders/python-skyfield/issues/536>`_
* Added an :meth:`~skyfield.positionlib.ICRF.hadec()` position method that
returns hour angle and declination.
`#510 <https://github.com/skyfielders/python-skyfield/issues/510>`_
* The default ``str()`` and ``repr()`` strings
for geographic positions have been streamlined,
and no longer raise ``ValueError`` when elevation is an array.
They now show simple decimals
instead of splitting degrees of longitude and latitude
into minutes and seconds;
always show elevation, even if zero;
properly format NumPy arrays;
and abbreviate long arrays.
`#524 <https://github.com/skyfielders/python-skyfield/issues/524>`_
* Fixed
:meth:`Angle.dstr() <skyfield.units.Angle.dstr>`
and
:meth:`Angle.hstr() <skyfield.units.Angle.hstr>`
to return an array of strings when the angle itself is an array.
`#527 <https://github.com/skyfielders/python-skyfield/issues/527>`_
v1.35 — 2020 December 31
------------------------
* Deprecated the old ``Topos`` class,
which not only featured a clunky interface
but hid from users the fact that Skyfield was generating IERS2010 positions
from latitude and longitude
when in fact nearly all users want WGS84 positions.
Users are now encouraged to supply latitude and longitude
to the :meth:`~skyfield.toposlib.Geoid.latlon()` method
of either the :data:`~skyfield.toposlib.wgs84` object
or the :data:`~skyfield.toposlib.iers2010` object.
Related discussion:
`#372 <https://github.com/skyfielders/python-skyfield/issues/372>`_
* The two new geoid objects :data:`~skyfield.toposlib.wgs84`
and :data:`~skyfield.toposlib.iers2010`
have also provided a happy new home
for the :meth:`~skyfield.toposlib.Geoid.subpoint()` method —
which was previously stranded
over on the :class:`~skyfield.positionlib.Geocentric` class,
where it couldn’t be used with positions of other classes
that might be centered at the geocenter.
(The old method will remain in place to support legacy code,
but is discouraged in new applications.)
* The effects of :ref:`polar-motion` — if configured — are now included
both when computing the position in space of an Earth latitude and longitude,
and when determining the latitude and longitude beneath a celestial position.
* Added :func:`~skyfield.api.load_constellation_names()`.
* The :meth:`~skyfield.timelib.Time.utc_jpl()` method now correctly
designates its return value as ``UTC`` instead of the ambiguious ``UT``.
`#515 <https://github.com/skyfielders/python-skyfield/issues/515>`_
v1.34 — 2020 December 10
------------------------
* The position classes have gained methods
:func:`~skyfield.positionlib.ICRF.frame_xyz()`,
:func:`~skyfield.positionlib.ICRF.frame_xyz_and_velocity()`,
:func:`~skyfield.positionlib.ICRF.frame_latlon()`, and
:func:`~skyfield.positionlib.ICRF.from_time_and_frame_vectors()`
that work with a new library ``skyfield.framelib``
to offer a number of familiar reference frames.
These replace the existing ad-hoc position methods
for ecliptic and galactic coordinates,
which are now deprecated (but will continue to be supported).
See :ref:`reference_frames`.
`#476 <https://github.com/skyfielders/python-skyfield/issues/476>`_
* Added an official :class:`~skyfield.framelib.itrs` reference frame.
* Added support for IERS :ref:`polar-motion` 𝑥 and 𝑦.
* Added a method :meth:`~skyfield.toposlib.GeographicPosition.lst_hours_at()`
that computes Local Sidereal Time.
* A new almanac routine :func:`~skyfield.almanac.moon_phase()` returns
the Moon phase as an angle where 0° is New Moon, 90° is First Quarter,
180° is Full, and 270° is Last Quarter.
`#282 <https://github.com/skyfielders/python-skyfield/issues/282>`_
* Almanac search routines that previously returned a Boolean true/false
array now return an integer 0/1 array instead, to work around a new
deprecation warning in NumPy which, for example, would have outlawed
using the Boolean array from :func:`~skyfield.almanac.moon_nodes()` to
index into the ``MOON_NODES`` list that provides a name for each node.
`#486 <https://github.com/skyfielders/python-skyfield/issues/486>`_
* The undocumented columns ``magnitude_H`` and ``magnitude_G`` in the
Minor Planet Center comets dataframe have been renamed ``magnitude_g``
and ``magnitude_k`` following further research on the file format
(which does not itself document which magnitude model is intended).
`#416 <https://github.com/skyfielders/python-skyfield/issues/416>`_
v1.33 — 2020 November 18
------------------------
* Fix: running ``load.timescale(builtin=False)`` was raising an
exception ``FileNotFoundError`` if the ``finals2000A.all`` file was
not already on disk, instead of downloading the file automatically.
`#477 <https://github.com/skyfielders/python-skyfield/issues/477>`_
v1.32 — 2020 November 16
------------------------
* A new :func:`~skyfield.eclipselib.lunar_eclipses()` routine finds
lunar eclipses and determines their degree of totality.
`#445 <https://github.com/skyfielders/python-skyfield/issues/445>`_
* The almanac module’s new :func:`~skyfield.almanac.meridian_transits()`
routine can find the moments at which a body transits the meridian and
antimeridian.
`#460 <https://github.com/skyfielders/python-skyfield/issues/460>`_
* Fix: the :func:`~skyfield.searchlib.find_minima()` function was
ignoring its ``epsilon`` and ``num`` arguments and always using the
default values instead.
`#475 <https://github.com/skyfielders/python-skyfield/pull/475>`_
* Fix: the ``.epoch`` attribute of Earth satellite objects that were
built using :meth:`~skyfield.sgp4lib.EarthSatellite.from_satrec()`
was, alas, a half-day off.
`#466 <https://github.com/skyfielders/python-skyfield/issues/466>`_
* Fix: the ``Topos`` constructor arguments ``x`` and ``y``,
which never worked properly anyway,
have been deprecated and are now ignored.
1.31 — 2020 October 24
----------------------
* Skyfield now uses the International Earth Rotation Service (IERS) file
``finals2000A.all`` for updated ∆T and leap seconds. The USNO is no
longer updating the files ``deltat.data`` and ``deltat.preds`` that
previous versions of Skyfield used, and the ``cddis.nasa.gov`` server
from which they were fetched will discontinue anonymous FTP on 2020
October 31. See `downloading-timescale-files`.
`#452 <https://github.com/skyfielders/python-skyfield/issues/452>`_
`#464 <https://github.com/skyfielders/python-skyfield/issues/464>`_
* The comets dataframe built from the MPC file ``CometEls.txt`` now
includes the ``reference`` column, so users can tell which orbit is
most recent if there are several orbits for a single comet. (For
example, the file currently lists two C/2020 F3 (NEOWISE) orbits.)
The comet examples in the documentation now build a dataframe that
only includes the most recent orbit for each comet.
`#463 <https://github.com/skyfielders/python-skyfield/issues/463>`_
* Two new methods :meth:`~skyfield.iokit.Loader.days_old()` and
:meth:`~skyfield.iokit.Loader.download()` make it simple to download a
fresh copy of a file if the copy on disk is older than you would like.
1.30 — 2020 October 11
----------------------
* The various ``strftime()`` Skyfield methods now support the ``%j``
day-of-year format code.
* Fix: the new Julian calendar support broke support for out-of-range
month numbers, wrapping them into the current year instead of letting
them overflow into subsequent years.
`#461 <https://github.com/skyfielders/python-skyfield/issues/461>`_
* Fix: a stray debugging ``print()`` statement was stranded in ``t.dut1``.
`#455 <https://github.com/skyfielders/python-skyfield/issues/455>`_
* The :class:`~skyfield.timelib.Time` object, if manually instantiated
without a Julian date fraction, now provides a fraction array with
dimensions that match the Julian date argument.
`#458 <https://github.com/skyfielders/python-skyfield/issues/458>`_
1.29 — 2020 September 25
------------------------
* Fix: the new Julian calendar feature was raising an exception in the
calendar methods like :meth:`~skyfield.timelib.Time.tt_calendar()` if
the time object was in fact an array of times.
`#450 <https://github.com/skyfielders/python-skyfield/issues/450>`_
* Fix: trying to iterate over a time object would raise an exception if
the time was created through :meth:`~skyfield.timelib.Timescale.ut1()`.
1.28 — 2020 September 24
------------------------
* **Broken URL:** Because the VizieR archive apparently decided to
uncompress their copy of the ``hip_main.dat.gz`` Hipparcos catalog
file, the old URL now returns a 404 error. As an emergency fix, this
version of Skyfield switches to their uncompressed ``hip_main.dat``.
Hopefully they don’t compress it again and break the new URL! A more
permanent solution is discussed at:
`#454 <https://github.com/skyfielders/python-skyfield/issues/454>`_
* To unblock this release, removed a few deprecated pre-1.0 experiments
from April 2015 in ``skyfield.hipparcos`` and ``skyfield.named_stars``
that broke because the Hipparcos catalog is no longer compressed;
hopefully no one was using them.
* In a sweeping internal change, the :meth:`~skyfield.timelib.Timescale`
and :meth:`~skyfield.timelib.Time` objects now offer support for the
Julian calendar that’s used by historians for dates preceding the
adoption of the Gregorian calendar in 1582. See `choice of calendars`
if you want to turn on Julian dates in your application.
`#450 <https://github.com/skyfielders/python-skyfield/issues/450>`_
1.27 — 2020 September 15
------------------------
* The printed appearance of both vectors and of vector functions like
Earth locations and Earth satellites have been rewritten to be more
informative and consistent.
* Added :func:`~skyfield.timelib.compute_calendar_date()` which lets the
caller choose the Julian calendar for ancient dates instead of always
using the proleptic Gregorian calendar. This should be particularly
useful for historians.
* Added :meth:`~skyfield.timelib.Timescale.J()` that builds a time array
from an array of floating point years.
`#436 <https://github.com/skyfielders/python-skyfield/issues/436>`_
* Added four new ``strftime`` methods for the non-UTC timescales
`(#443). <https://github.com/skyfielders/python-skyfield/issues/443>`_
All four of them support ``%f`` for microseconds,
and provide a reasonable default format string
for callers who don’t wish to concoct their own:
* :meth:`~skyfield.timelib.Time.tai_strftime()`
* :meth:`~skyfield.timelib.Time.tt_strftime()`
* :meth:`~skyfield.timelib.Time.tdb_strftime()`
* :meth:`~skyfield.timelib.Time.ut1_strftime()`
* Thanks to several fixes, comets and asteroids with parabolic and
hyperbolic orbits should now raise fewer errors.
* The prototype :func:`~skyfield.magnitudelib.planetary_magnitude()` can
now return magnitudes for Uranus without raising an exception. The
routine does not yet take into account whether the observer is facing
the equator or poles of Uranus, so the magnitude predicted for the
planet will only be accurate to within about 0.1 magnitudes.
1.26 — 2020 August 1
--------------------
* The official ∆T files on NASA’s FTP server have stopped receiving
updates — they have no new data beyond February, the start of the
global pandemic. Unless they are updated by next February, older
versions of Skyfield will unfortunately download the files all over
again every time :meth:`~skyfield.iokit.Loader.timescale()` is called
(unless the ``builtin=True`` parameter is provided). To make Skyfield
less fragile going forward:
1. The loader’s :meth:`~skyfield.iokit.Loader.timescale()` method now
defaults to ``builtin=True``, telling it to use the ∆T and leap
second files that ship with Skyfield internally. To download new
∆T files from NASA and the leap second file from the International
Earth Rotation Service, specify ``builtin=False``.
2. The concept of an “expired” file has been removed from ``load()``.
Skyfield is now much simpler: if a file with the correct name
exists, Skyfield uses it. See :ref:`downloading-timescale-files`
if you still want your application to check the age of your
timescale files and automatically download new ones.
* The `ICRF.separation_from()` method now officially supports the
combination of an array of positions with a single reference position!
Its previous support for that combination was, alas, accidental, and
was broken with the 1.23 release.
`#414 <https://github.com/skyfielders/python-skyfield/issues/414>`_
`#424 <https://github.com/skyfielders/python-skyfield/issues/424>`_
* A prototype :func:`~skyfield.magnitudelib.planetary_magnitude()`
routine has been added with support for several planets.
`#210 <https://github.com/skyfielders/python-skyfield/issues/210>`_
* The ``utc`` timezone that Skyfield returns in Python datetimes is now
either the Python Standard Library’s own UTC object, if it supplies
one, or else is defined by Skyfield itself. Skyfield no longer
silently tries importing the whole ``pytz`` package merely to use its
UTC object — which also means that the timezone returned by Skyfield
longer offers the non-standard ``localize()`` method.
`#413 <https://github.com/skyfielders/python-skyfield/issues/413>`_
1.25 — 2020 July 24
-------------------
* Added :func:`~skyfield.data.stellarium.parse_constellations()`
and :func:`~skyfield.data.stellarium.parse_star_names()`
to load Stellarium star names and constellation lines.
Constellation lines are featured in a new example script
:ref:`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 :meth:`~skyfield.timelib.Timescale.utc()` to
accept a Python ``datetime.date`` object as its argument.
`#409 <https://github.com/skyfielders/python-skyfield/issues/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 <https://github.com/skyfielders/python-skyfield/issues/411>`_
1.24 — 2020 July 20
-------------------
* Added methods :meth:`~skyfield.timelib.Timescale.from_datetime()` and
:meth:`~skyfield.timelib.Timescale.from_datetimes()` to the
:class:`~skyfield.timelib.Timescale` class, to better advertise the
ability to build a Skyfield time from a Python ``datetime`` — an ability
that was previously overloaded into the ``year`` parameter of the
:meth:`~skyfield.timelib.Timescale.utc()` method (where it is still
supported for backwards compatibility, but no longer documented).
* Fix: improved the accuracy with which velocity is converted between
the Earth-fixed ITRF frame that rotates with the Earth and the
inertial GCRS frame that does not. In particular, this should make
Earth satellite velocities more accurate.
1.23 — 2020 July 9
------------------
* Added :doc:`kepler-orbits` support
for generating the positions of comets and asteroids
from Minor Planet Center data files.
* Added :func:`~skyfield.positionlib.ICRF.is_behind_earth()` to
determine whether a celestial object is blocked from an Earth
satellite’s view by the Earth itself.
* Replaced the awkward and hard-to-explain ``rough_period`` search
parameter with the conceptually simpler ``step_days`` parameter, and
updated the instructions in :doc:`searches` to match.
* Made the :meth:`~skyfield.iokit.Loader.tle_file()` import method less
strict about Earth satellite names: any text on the line before two
lines of TLE data is now saved as the satellite name. A parameter
``skip_names=True`` turns this off if, for particular TLE files, this
leads to unwanted text being saved.
1.22 — 2020 Jun 8
-----------------
* Skyfield’s improved time precision (stored internally as two floats)
is now used in computing ephemeris positions, Earth orientation, and
light-travel time, producing position angles which change much more
smoothly over time on a sub-milliarcsecond scale.
* :doc:`searches` is now documented for custom events that users define
themselves, instead of only being documented for the official
pre-written :doc:`almanac` functions. Not only discrete events but
also maxima and minima are now officially supported and documented,
thanks to a rewrite of the underlying code.
* Time objects no longer cache the nutation and precession matrices,
since they are never used again after being multiplied together to
create the equinox-of-date rotation matrix. This should save 144
bytes for each time in a :class:`~skyfield.timelib.Time` array.
* It is now possible to :ref:`from-satrec` thanks to a new Earth
satellite constructor method.
`#384 <https://github.com/skyfielders/python-skyfield/issues/384>`_
* Added :meth:`~skyfield.iokit.Loader.build_url()` that returns the URL
from which Skyfield will download a file.
`#382 <https://github.com/skyfielders/python-skyfield/issues/382>`_
* Added :meth:`~skyfield.jpllib.SpiceKernel.close()` to support
applications that need to do fine-grained resource management or whose
testing framework check for dangling open files.
`#374 <https://github.com/skyfielders/python-skyfield/issues/374>`_
* Skyfield’s dependency list now asks for “jplephem” version 2.13 or
later. Skyfield 1.21, alas, could incur a ``Module not found`` error
when importing ``jplephem.exceptions`` if a user had an old “jplephem”
version already installed.
`#386 <https://github.com/skyfielders/python-skyfield/issues/386>`_
1.21 — 2020 May 29
------------------
* Added :func:`~skyfield.positionlib.ICRF.is_sunlit()` to determine
whether Earth satellites in orbit are in Earth’s shadow or not, thanks
to a pull request from Jesse Coffey.
* Added :func:`~skyfield.positionlib.position_of_radec()`
to replace the poorly designed ``position_from_radec()``.
* Skyfield :class:`~skyfield.timelib.Time` objects now have microsecond
internal accuracy, so round trips to and from Python datetimes should
now preserve all the microsecond digits.
* The :meth:`~skyfield.timelib.Time.utc_strftime()` method now rounds to
the nearest minute or second if it sees that either minutes or seconds
are the smallest unit of time in the format string.
* The 6 numbers in the sequence ``t.utc`` can now be accessed by the
attribute names ``year``, ``month``, ``day``, ``hour``, ``minute``,
and ``second``.
* Nutation routines should now be faster and have a smaller memory
footprint, thanks to a rewrite that uses more optimized NumPy calls.
`#373 <https://github.com/skyfielders/python-skyfield/issues/373>`_
* Thanks to Jérôme Deuchnord, the exception raised when asking for a
position out-of-range of a JPL ephemeris now shows the calendar dates
for which the ephemeris is valid and carries several useful attributes.
`#356 <https://github.com/skyfielders/python-skyfield/pull/356>`_
1.20 — 2020 April 24
--------------------
* Erik Tollerud contributed a fix for a deprecation warning about SSL
from the most recent versions of Python (“cafile, cpath and cadefault
are deprecated, use a custom context instead”). The file download
routine now auto-detects which mechanism your Python supports.
`#363 <https://github.com/skyfielders/python-skyfield/pull/363>`_
* Added an ``elevation_m`` argument to
:meth:`~skyfield.planetarylib.PlanetaryConstants.build_latlon_degrees()`.
1.19 — 2020 April 23
--------------------
* To hopefully fix the ``SSL: CERTIFICATE_VERIFY_FAILED`` errors that
some users encounter when downloading timescale files, Skyfield has
taken the risk of switching away from your system’s SSL certificates
to the certificate bundle from the ``certifi`` package.
`#317 <https://github.com/skyfielders/python-skyfield/issues/317>`_
* Added a new almanac routine for finding :ref:`lunar-nodes`.
`#361 <https://github.com/skyfielders/python-skyfield/issues/361>`_
* Gave geographic location objects a new ``itrf_xyz()``
method that returns their raw ITRF coordinates.
`#354 <https://github.com/skyfielders/python-skyfield/issues/354>`_
* Fixed the sign of the velocity vector when two vectors are directly
geometrically subtracted.
`#355 <https://github.com/skyfielders/python-skyfield/issues/355>`_
1.18 — 2020 March 26
--------------------
* Deprecated the old hybrid-key satellite dictionary returned by
``load.tle()`` in favor of a simple list returned by the new
:meth:`~skyfield.iokit.Loader.tle_file()` routine.
`#345 <https://github.com/skyfielders/python-skyfield/issues/345>`_
* The almanac :func:`~skyfield.searchlib.find_discrete()` routine no
longer returns extraneous values in its second return value if no
changes of state were found.
`#339 <https://github.com/skyfielders/python-skyfield/issues/339>`_
`#351 <https://github.com/skyfielders/python-skyfield/issues/351>`_
* Added documentation and support for computing lunar libration.
`#80 <https://github.com/skyfielders/python-skyfield/issues/80>`_
1.17 — 2020 February 2
----------------------
* Upgraded to a new version of the ``sgp4`` Python library that, when
possible, uses the fast official C++ implementation of SGP4.
* Added a :meth:`~skyfield.sgp4lib.EarthSatellite.find_events()` Earth
satellite method that finds the times at which a satellite rises,
culminates, and sets.
* Improved the logic behind the :doc:`almanac` routines to avoid rare
situations in which a cluster of nearly identical times would be
produced for what should really be considered a single event.
`#333 <https://github.com/skyfielders/python-skyfield/issues/333>`_
* Fixed the :meth:`~skyfield.timelib.Time.utc_strftime()` method so it
does not report that every day in all of recorded history is a Monday.
`#335 <https://github.com/skyfielders/python-skyfield/issues/335>`_
1.16 — 2019 December 20
-----------------------
* Added basic :doc:`planetary` support, enough to compute the position
of a given latitude and longitude on the surface of the Moon.
`#79 <https://github.com/skyfielders/python-skyfield/issues/79>`_
`#124 <https://github.com/skyfielders/python-skyfield/issues/124>`_
`#258 <https://github.com/skyfielders/python-skyfield/issues/258>`_
* Added :func:`~skyfield.almanac.oppositions_conjunctions()` for finding
the dates when a planet is at opposition and conjunction with the sun.
* Added :func:`~skyfield.trigonometry.position_angle_of()` for computing
astronomical position angles.
1.15 — 2019 November 20
-----------------------
* Changed the URL for the Hipparcos catalog, because the VizieR archives
FTP server is no longer responding.
`#301 <https://github.com/skyfielders/python-skyfield/issues/301>`_
* Added a :func:`~skyfield.almanac.dark_twilight_day()` function that
not only handles sunrise and sunset but also all three kinds of
twilight.
`#225 <https://github.com/skyfielders/python-skyfield/issues/225>`_
1.14 — 2019 November 1
----------------------
* Changed the URL from which leap second files are downloaded; the
server that previously provided them is no longer responding.
Thanks to Richard Shaw for the pull request.
`#296 <https://github.com/skyfielders/python-skyfield/issues/296>`_
`#297 <https://github.com/skyfielders/python-skyfield/issues/297>`_
* Added a :func:`~skyfield.almanac.risings_and_settings()` function for
computing rising and setting times.
`#271 <https://github.com/skyfielders/python-skyfield/issues/271>`_
1.13 — 2019 October 10
----------------------
* Provided a constellation lookup routine through
:func:`~skyfield.api.load_constellation_map()`.
* Added a ``position_from_radec()`` function.
* Fixed the ``apparent()`` method in the case where a single observer
position is observing an entire vector of target positions.
`#229 <https://github.com/skyfielders/python-skyfield/issues/229>`_
1.12 — 2019 September 2
-----------------------
* Fix: an exception was being thrown when creating a ``Loader`` pointed
at a Windows directory for which Python’s ``os.makedirs()`` function
returned a spurious error.
`#283 <https://github.com/skyfielders/python-skyfield/issues/283>`_
* The internal ``reverse_terra()`` routine can now be given an
``iterations=0`` argument if the caller wants geocentric latitude and
longitude.
1.11 — 2019 July 22
-------------------
* You can now call ``load.timescale(builtin=True)`` to use time scale
files that Skyfield carries internally, instead of downloading them.
Note that the time scale files distributed with any given version of
Skyfield will gradually fall out of date.
* Fix: indexing a position now returns a position with an actual velocity.
`#241 <https://github.com/skyfielders/python-skyfield/issues/241>`_
* Fix: the ``Star`` method ``from_dataframe()`` now correctly pulls
stellar parallax data from the dataframe if available.
`#266 <https://github.com/skyfielders/python-skyfield/issues/266>`_
* Fix: :func:`~skyfield.searchlib.find_discrete()` was generating empty
arrays of search dates, upsetting the astronomy code, if the start and
end dates were very close together.
`#240 <https://github.com/skyfielders/python-skyfield/issues/240>`_
1.10 — 2019 February 2
----------------------
* Fix: teach Skyfield the new format of the Naval Observatory ∆T data
file ``deltat.preds``, whose change in format caused Skyfield to start
throwing an exception for new users.
`#236 <https://github.com/skyfielders/python-skyfield/issues/236>`_
1.9 — 2018 September 23
-----------------------
* Added :func:`~skyfield.almanac.seasons` to the :doc:`almanac` module
that can be used to predict solstices and equinoxes.
* Fix: the ecliptic coordinate routines no longer raise ``ValueError:
too many values to unpack`` if they are passed a time array.
`#207 <https://github.com/skyfielders/python-skyfield/issues/207>`_
`#208 <https://github.com/skyfielders/python-skyfield/issues/208>`_
1.8 — 2018 September 12
-----------------------
* There is now an :doc:`almanac` module that can compute the times of
sunrise, sunset, and the phases of the moon, based on the search
algorithms announced at my recent PyBay talk “An Import Loop and a
Fiery Reentry.”
* Two new methods :meth:`~skyfield.positionlib.ICRF.cirs_xyz()` and
:meth:`~skyfield.positionlib.ICRF.cirs_radec()` have been contributed
which provide support for rotating a position into the Celestial
Intermediate Reference System (CIRS).
`#192 <https://github.com/skyfielders/python-skyfield/issues/192>`_
1.7 — 2018 September 3
----------------------
* Skyfield now supports loading the Hipparcos star catalog as a Pandas
dataframe, providing the user with convenient mechanisms for looking
up a single star by HIP number or filtering the entire catalog by
magnitude. See :doc:`stars` for details.
* Ecliptic coordinates can now be produced for epochs other than J2000
thanks to a new optional parameter specifying the desired epoch for
the ``ecliptic_latlon()`` method.
* A position that gives a position, velocity, and time can now be
converted into full osculating orbital elements through the routine
:func:`~skyfield.elementslib.osculating_elements_of()`.
* A couple of bugs in the ``load()`` routine have been fixed.
`#193 <https://github.com/skyfielders/python-skyfield/issues/193>`_
`#194 <https://github.com/skyfielders/python-skyfield/issues/194>`_
1.6 — 2018 July 25
------------------
* Both of the loader methods :meth:`~skyfield.iokit.Loader.open()` and
``tle()`` now accept not just URLs but also plain local file paths;
they correctly re-download a remote file if “reload=True” is
specified; and they allow specifying a different local “filename=”
than the one at the end of the URL.
* Earth satellite objects no longer try to instantiate a timescale object
of their own, which often kicked off an unexpected download of the three
files needed to build a timescale.
* Satellite names are now correctly loaded from Space-Track TLE files.
* The ability to create times using Julian Dates is now better advertised,
thanks to dedicated timescale methods whose names end in ``…_jd()``.
1.5 — 2018 July 4
-----------------
* The :meth:`~skyfield.positionlib.Geocentric.subpoint()` method
now normalizes the longitude values it returns
into the range −180° to 180°
`#182 <https://github.com/skyfielders/python-skyfield/issues/182>`_
and returns an actual elevation instead of zero.
`#185 <https://github.com/skyfielders/python-skyfield/issues/185>`_
* Earth satellites now return a real velocity vector instead of zero.
`#187 <https://github.com/skyfielders/python-skyfield/issues/187>`_
* Earth satellites now offer an
:meth:`~skyfield.sgp4lib.EarthSatellite.ITRF_position_velocity_error()`
method that returns raw ITRF coordinates for users interested in them.
`#85 <https://github.com/skyfielders/python-skyfield/issues/85>`_
1.4 — 2018 May 20
-----------------
* You can now specify the distance to an object when generating a
position from altitude and azimuth coordinates.
`#158 <https://github.com/skyfielders/python-skyfield/issues/158>`_
* The dictionary of satellites returned when you read a TLE file
now supports lookup by integer satellite ID, not just by name,
and now knows how to parse TLE files from Space-Track.
`#163 <https://github.com/skyfielders/python-skyfield/issues/163>`_
`#167 <https://github.com/skyfielders/python-skyfield/issues/167>`_
* Star coordinates can now be offered for any epoch, not just J2000.
`#166 <https://github.com/skyfielders/python-skyfield/issues/166>`_
* You can now create a time object given the UT1 date.
`#91 <https://github.com/skyfielders/python-skyfield/issues/91>`_
* Fractional Julian years are now available on ``Time`` objects as ``.J``.
* The parameter DUT1 is now available on ``Time`` objects as ``.dut1``.
`#176 <https://github.com/skyfielders/python-skyfield/issues/176>`_
1.3 — 2018 April 15
-------------------
* Geocentric coordinates now have a
:meth:`~skyfield.positionlib.Geocentric.subpoint()`
method that computes the latitude and longitude
of the point beneath that body.
* All of the ``Timescale`` time constructor methods now accept arrays.
* Emergency fix to stop Skyfield
from endlessly downloading new copies of ``deltat.preds``,
since the file has gone out of date at the USNO site.
* Fixed ability of a :class:`~skyfield.starlib.Star`
to be initialized with a tuple that breaks units into minutes and seconds
(broke in version 1.2).
* Issues fixed:
`#170 <https://github.com/skyfielders/python-skyfield/issues/170>`_
`#172 <https://github.com/skyfielders/python-skyfield/issues/172>`_
1.2 — 2018 March 29
-------------------
* The documentation now describes
how to create an excerpt of a large JPL ephemeris
without downloading the entire file.
Several Skyfield tests now run much faster
because they use an ephemeris excerpt instead of waiting for a download.
* For ``load_file()`` a leading ``~`` now means “your home directory”.
* You can now initialize a velocity from kilometers per second
with ``Velocity(km_per_s=...)``.
* Empty time and angle objects no longer raise an exception when printed.
(Thanks, JoshPaterson!)
* Issues fixed:
`#160 <https://github.com/skyfielders/python-skyfield/issues/160>`_
`#161 <https://github.com/skyfielders/python-skyfield/issues/161>`_
`#162 <https://github.com/skyfielders/python-skyfield/issues/162>`_
1.1 — 2018 January 14
---------------------
* Positions can now be converted to AstroPy with
:meth:`~skyfield.positionlib.ICRF.to_skycoord()`.
* You can now provide a timescale of your own to an
:meth:`~skyfield.sgp4lib.EarthSatellite`
instead of having it trying to load one itself.
* Downloaded files are no longer marked as executable on Windows.
* A friendly error message, rather than an obscure traceback, is now
returned if you try converting a position to alt/az coordinates but
the position was not measured from a position on the Earth’s surface.
1.0 — 2017 March 15
-------------------
* Brought the core API to maturity: replaced the narrow concept of
building a “body” from several ephemeris segments with the general
concept of a vector function that is the sum of several simpler vector
functions.
* Added support for adding and subtracting vector functions.
* Deprecated the Earth ``topos()`` method in favor of vector addition.
* Deprecated the Earth ``satellite()`` method in favor of vector addition.
* Deprecated the body ``geometry_of()`` method in favor of vector subtraction.
* Celestrak satellite files can now be opened with ``load.tle(url_or_filename)``.
0.9.1 — 2016 December 10
------------------------
* Attempted to speed up Earth satellite calculations by caching a single
time scale object instead of creating a new one each time.
* Fixed a possible divide-by-zero error when applying deflection to an
apparent position.
0.9
---
* The ``observe()`` method of an observer on the Earth’s surface now
correctly accounts for the way that the Earth’s gravity will deflect
the apparent position of objects that are not exactly overhead,
bringing Skyfield’s agreement with the Naval Observatory’s NOVAS
library to within half a milliarcsecond.
* The time method ``tt_calendar()`` method no longer raises a
``TypeError`` when its value is an array.
* Running ``repr()`` on a ``Time`` array now produces a more compact
string that only mentions the start and end of the time period.
* The ``api.load()`` call no longer attempts to animate a progress bar
if the user is running it under IDLE, which would try to accumulate
the updates as a single long line that eventually hangs the window.
0.8
---
* Added an `api` document to the project, in reverent imitation of the
`Pandas API Reference`_ that I keep open in a browser tab every time I
am using the Pandas library.
* New method `ICRF.separation_from()` computes the angular separation
between two positions.
* Fixed ``==`` between `Time` objects and other unrelated objects so
that it no longer raises an exception.
0.7
---
* Introduced the ``Timescale`` object with methods ``utc()``, ``tai()``,
``tt()``, and ``tdb()`` for building time objects, along with a
``load.timescale()`` method for building a new ``Timescale``. The
load method downloads ∆T and leap second data from official data
sources and makes sure the files are kept up to date. This replaces
all former techniques for building and specifying dates and times.
* Renamed ``JulianDate`` to ``Time`` and switched from ``jd`` to ``t``
as the typical variable used for time in the documentation.
* Deprecated timescale keyword arguments like ``utc=(…)`` for both the
``Time`` constructor and also for all methods that take time as
an argument, including ``Body.at()`` and ``Topos.at()``.
* Users who want to specify a target directory when downloading a file
will now create their own loader object, instead of having to specify
a special keyword argument for every download::
load = api.Loader('~/ephemeris-files')
load('de421.bsp')
0.6.1
-----
* Users can now supply a target ``directory`` when downloading a file::
load('de421.bsp', directory='~/ephemerides')
* Fix: removed inadvertent dependency on the Pandas library.
* Fix: ``load()`` was raising a ``PermissionError`` on Windows after a
successful download when it tried to rename the new file.
0.6
---
* Skyfield now generates its own estimate for ``delta_t`` if the user
does not supply their own ``delta_t=`` keyword when specifying a date.
This should make altitude and azimuth angles much more precise.
* The leap-second table has been updated to include 2015 July 1.
* Both ecliptic and galactic coordinates are now supported.
0.5
---
* Skyfield has dropped the 16-megabyte JPL ephemeris DE421 as an install
dependency, since users might choose another ephemeris, or might not
need one at all. You now ask for a SPICE ephemeris to be downloaded
at runtime with a call like ``planets = load('de421.bsp')``.
* Planets are no longer offered as magic attributes, but are looked up
through the square bracket operator. So instead of typing
``planets.mars`` you should now type ``planets['mars']``. You can run
``print(planets)`` to learn which bodies an ephemeris supports.
* | Ask for planet positions with ``body.at(t)`` instead of ``body(t)``.
* Per IAU 2012 Resolution B2, Skyfield now uses lowercase *au* for the
astronomical unit, and defines it as exactly 149 597 870 700 meters.
While this API change is awkward for existing users, I wanted to make
the change while Skyfield is still pre-1.0. If this breaks a program
that you already have running, please remember that a quick ``pip``
``install`` ``skyfield==0.4`` will get you up and running again until
you have time to edit your code and turn ``AU`` into ``au``.
0.4
---
* To prevent confusion, the :meth:`~skyfield.timelib.Time.astimezone()`
and :meth:`~skyfield.timelib.Time.utc_datetime()` methods
have been changed to return only a ``datetime`` object.
If you also need a leap second flag returned,
call the new methods
:meth:`~skyfield.timelib.Time.astimezone_and_leap_second()`
and :meth:`~skyfield.timelib.Time.utc_datetime_and_leap_second()`.
0.3
---
* The floating-point values of an angle
``a.radians``, ``a.degrees``, and ``a.hours``
are now attributes instead of method calls.
.. _Pandas API Reference: http://pandas.pydata.org/pandas-docs/stable/api.html
|