From aed52531f0fb52a4fe8bc22ae1cd3a9893eb2e20 Mon Sep 17 00:00:00 2001 From: Don Cross Date: Tue, 3 Oct 2023 17:22:17 -0400 Subject: [PATCH] Created a spreadsheet of function dependencies for planning Go implementation. --- dependencies/dependencies.txt | 627 ++++++++++++++++++++++++++++++++++ dependencies/goplan.py | 105 ++++++ dependencies/plan | 4 + dependencies/plan.csv | 185 ++++++++++ 4 files changed, 921 insertions(+) create mode 100644 dependencies/dependencies.txt create mode 100755 dependencies/goplan.py create mode 100755 dependencies/plan create mode 100644 dependencies/plan.csv diff --git a/dependencies/dependencies.txt b/dependencies/dependencies.txt new file mode 100644 index 00000000..b832ce17 --- /dev/null +++ b/dependencies/dependencies.txt @@ -0,0 +1,627 @@ +AstroTime + TerrestrialTime + UniversalTime + UniversalTimeFromCalendar + AddDays + CalendarDateTime + +DefineStar +MassProduct +LongitudeOffset +NormalizeLongitude + +DeltaT + DeltaT_EspenakMeeus + +TerrestrialTime + DeltaT + +UniversalTime + TerrestrialTime + +CalcVsop + VsopFormulaCalc + VsopSphereToRect + VsopRotate + +MajorBodiesAcceleration + MajorBodiesAccelerationIncrement + +CalcVsopPosVel + VsopFormulaCalc + VsopSphereToRect + VsopDerivCalc + VsopRotate + +AdjustBarycenterPosVel + CalcVsopPosVel + +MajorBodyBary + AdjustBarycenterPosVel + +GravSim + MajorBodyBary + UpdatePosition + MajorBodiesAcceleration + +GravFromState + MajorBodyBary + +GetSegment + ClampIndex + GravFromState + GravSim + +CalcPlutoOneWay + GravFromState + GravSim + +CalcPluto + GetSegment + CalcPlutoOneWay + ClampIndex + UpdatePosition + UpdateVelocity + MajorBodyBary + +CalcJupiterMoon + JupiterMoon_elem2pv + +JupiterMoons + CalcJupiterMoon + +precession + precession_rot + +precession_posvel + precession_rot + RotateState + +e_tilt + iau2000b + mean_obliq + +inverse_terra + SiderealTime + +terra + SiderealTime + +nutation_rot + e_tilt + +nutation + nutation_rot + RotateVector + +nutation_posvel + nutation_rot + RotateState + +gyration + precession + nutation + +gyration_posvel + precession_posvel + nutation_posvel + +geo_pos + terra + gyration + +ecl2equ_vec + mean_obliq + +GeoMoon + CalcMoon + ecl2equ_vec + precession + +EclipticGeoMoon + CalcMoon + e_tilt + ecl2equ_vec + nutation + RotateEquatorialToEcliptic + +GeoMoonState + AddDays + GeoMoon + +GeoEmbState + GeoMoonState + +Libration + CalcMoon + NormalizeLongitude + LongitudeOffset + +BarycenterContrib + CalcVsop + +CalcSolarSystemBarycenter + BarycenterContrib + +HelioVector + CalcVsop + CalcPluto + GeoMoon + CalcEarth + CalcSolarSystemBarycenter + UserDefinedStar + VectorFromSphere + +HelioDistance + VsopFormulaCalc + UserDefinedStar + HelioVector + +CalcEarth + CalcVsop + +CorrectLightTravel + AddDays + +BackdatePosition + UserDefinedStar + HelioVector + HelioState + CorrectLightTravel + +GeoVector + GeoMoon + BackdatePosition + +BaryState + CalcPluto + MajorBodyBary + ExportState + CalcVsopPosVel + GeoMoonState + GeoEmbState + CalcVsopPosVel + +HelioState + MajorBodyBary + CalcVsopPosVel + ExportState + CalcPluto + GeoMoonState + GeoEmbState + HelioVector + +Equator + geo_pos + GeoVector + gyration + EquatorFromVector + +ObserverVector + ObserverState + +ObserverState + terra + gyration_posvel + +VectorObserver + gyration + inverse_terra + +ObserverGravity + +Horizon + SiderealTime + spin + RefractionAngle + +SunPosition + AddDays + CalcEarth + gyration + e_tilt + RotateEquatorialToEcliptic + +EquatorialToEcliptic + e_tilt + precession + nutation + RotateEquatorialToEcliptic + +Seasons + FindSeasonChange + +FindSeasonChange + SearchSunLongitude + +SearchSunLongitude + AddDays + Search + +Search + AddDays + QuadInterp + +PairLongitude + GeoVector + EquatorialToEcliptic + NormalizeLongitude + +MoonPhase + PairLongitude + +SearchMoonQuarter + MoonPhase + SearchMoonPhase + +NextMoonQuarter + AddDays + SearchMoonQuarter + +SearchMoonPhase + AddDays + Search + +InternalSearchAltitude + MaxAltitudeSlope + AddDays + FindAscent + +SearchRiseSet + Atmosphere + HorizonDipAngle + InternalSearchAltitude + +SearchAltitude + InternalSearchAltitude + +HourAngle + SiderealTime + Equator + +SearchHourAngle + SiderealTime + Equator + Horizon + AddDays + +SearchRelativeLongitude + SynodicPeriod + IsSuperiorPlanet + RelativeLongitudeOffset + AddDays + +RelativeLongitudeOffset + EclipticLongitude + LongitudeOffset + +SynodicPeriod + PlanetOrbitalPeriod + +EclipticLongitude + HelioVector + EquatorialToEcliptic + +Elongation + PairLongitude + AngleFromSun + +SearchMaxElongation + SynodicPeriod + EclipticLongitude + LongitudeOffset + AddDays + SearchRelativeLongitude + Search + Elongation + +AngleFromSun + GeoVector + AngleBetween + +SearchLunarApsis + AddDays + Search + +NextLunarApsis + SearchLunarApsis + AddDays + +PlanetExtreme + AddDays + HelioDistance + +BruteSearchPlanetApsis + PlanetOrbitalPeriod + AddDays + PlanetExtreme + +SearchPlanetApsis + BruteSearchPlanetApsis + PlanetOrbitalPeriod + AddDays + Search + HelioDistance + +NextPlanetApsis + PlanetOrbitalPeriod + AddDays + SearchPlanetApsis + +PeakEarthShadow + AddDays + Search + EarthShadow + +SolarEclipseObscuration + AngleBetween + Obscuration + +SearchLunarEclipse + SearchMoonPhase + CalcMoon + PeakEarthShadow + ShadowSemiDurationMinutes + Obscuration + AddDays + +NextLunarEclipse + AddDays + SearchLunarEclipse + +ShadowSemiDurationMinutes + AddDays + Search + +SearchGlobalSolarEclipse + SearchMoonPhase + MoonEclipticLatitudeDegrees + PeakMoonShadow + GeoidIntersect + AddDays + +NextGlobalSolarEclipse + AddDays + SearchGlobalSolarEclipse + +GeoidIntersect + Rotation_EQJ_EQD + RotateVector + SiderealTime + InverseRotation + RotateVector + CalcShadow + EclipseKindFromUmbra + SolarEclipseObscuration + +PeakMoonShadow + AddDays + Search + MoonShadow + +PeakLocalMoonShadow + AddDays + Search + LocalMoonShadow + +PeakPlanetShadow + AddDays + Search + PlanetShadow + +EarthShadow + GeoVector + GeoMoon + CalcShadow + +MoonShadow + GeoVector + GeoMoon + CalcShadow + +LocalMoonShadow + geo_pos + GeoVector + GeoMoon + CalcShadow + +PlanetShadow + GeoVector + CalcShadow + +MoonEclipticLatitudeDegrees + CalcMoon + +SearchLocalSolarEclipse + SearchMoonPhase + MoonEclipticLatitudeDegrees + PeakLocalMoonShadow + LocalEclipse + AddDays + +NextLocalSolarEclipse + AddDays + SearchLocalSolarEclipse + +LocalEclipse + CalcEvent + LocalEclipseTransition + EclipseKindFromUmbra + SolarEclipseObscuration + +LocalEclipseTransition + Search + CalcEvent + +SunAltitude + Equator + Horizon + +PlanetTransitBoundary + Search + +SearchTransit + SearchRelativeLongitude + AngleFromSun + PeakPlanetShadow + AddDays + PlanetTransitBoundary + +NextTransit + AddDays + SearchTransit + +SearchMoonNode + EclipticGeoMoon + AddDays + Search + +NextMoonNode + AddDays + SearchMoonNode + +Illumination + CalcEarth + GeoMoon + HelioVector + AngleBetween + MoonMagnitude + SaturnMagnitude + VisualMagnitude + +SaturnMagnitude + EquatorialToEcliptic + +SearchPeakMagnitude + EclipticLongitude + LongitudeOffset + SynodicPeriod + AddDays + SearchRelativeLongitude + Search + Illumination + +LagrangePoint + MassProduct + GeoMoonState + HelioState + LagrangePointFast + +LagrangePointFast + CubeRoot + +InverseRotation + +CombineRotation + +IdentityMatrix + +Pivot + +RotateVector + +RotateState + +VectorFromSphere + +SphereFromVector + +EquatorFromVector + +HorizonFromVector + SphereFromVector + RefractionAngle + ToggleAzimuthDirection + +VectorFromHorizon + VectorFromSphere + InverseRefractionAngle + ToggleAzimuthDirection + +RefractionAngle + +InverseRefractionAngle + RefractionAngle + +EarthRotationAxis + nutation + precession + EquatorFromVector + +RotationAxis + EarthRotationAxis + +Rotation_EQJ_ECL + +Rotation_ECL_EQJ + +Rotation_EQJ_EQD + precession_rot + nutation_rot + CombineRotation + +Rotation_EQJ_ECT + Rotation_EQJ_EQD + Rotation_EQD_ECT + CombineRotation + +Rotation_ECT_EQJ + Rotation_ECT_EQD + Rotation_EQD_EQJ + CombineRotation + +Rotation_EQD_EQJ + nutation_rot + precession_rot + CombineRotation + +Rotation_EQD_HOR + SiderealTime + spin + +Rotation_HOR_EQD + Rotation_EQD_HOR + InverseRotation + +Rotation_HOR_EQJ + Rotation_HOR_EQD + Rotation_EQD_EQJ + CombineRotation + +Rotation_EQJ_HOR + Rotation_HOR_EQJ + InverseRotation + +Rotation_EQD_ECL + Rotation_EQD_EQJ + Rotation_EQJ_ECL + CombineRotation + +Rotation_ECL_EQD + Rotation_EQD_ECL + InverseRotation + +Rotation_ECL_HOR + Rotation_ECL_EQD + Rotation_EQD_HOR + CombineRotation + +Rotation_HOR_ECL + Rotation_ECL_HOR + InverseRotation + +Rotation_EQJ_GAL + +Rotation_GAL_EQJ + +Rotation_ECT_EQD + e_tilt + +Rotation_EQD_ECT + e_tilt + +Constellation + Rotation_EQJ_EQD + VectorFromSphere + RotateVector + EquatorFromVector diff --git a/dependencies/goplan.py b/dependencies/goplan.py new file mode 100755 index 00000000..5b435c82 --- /dev/null +++ b/dependencies/goplan.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +# +# goplan.py - Don Cross - 2023-10-03 +# +# Using the dependencies of function calls in the C# version of Astronomy Engine, +# make a plan for the order we should complete functions in the Go version. +# +import sys +from typing import Set, Dict, List, Optional + + +class Symbol: + def __init__(self, name: str) -> None: + self.name = name + self.children: Set[str] = set() + self.visited = False + + def insert(self, child: str) -> None: + self.children.add(child) + + def __str__(self) -> str: + text = self.name + for child in sorted(self.children): + text += ',' + child + return text + + +def LoadDependencies(inFileName: str) -> Dict[str, Symbol]: + with open(inFileName, 'rt') as infile: + all: Dict[str, Symbol] = {} + parent: Optional[Symbol] = None + lnum = 0 + for line in infile: + lnum += 1 + line = line.rstrip() + name = line.lstrip() + if name == '': + continue # ignore blank lines + if name == line: + # There is no whitespace to the left of the name. + # This name is a parent (caller). + parent = Symbol(name) + if name in all: + print('FATAL({} line {}): parent {} was already defined.'.format(inFileName, lnum, name)) + sys.exit(1) + all[name] = parent + else: + # Whitespace exists to the left of the name, so this is a child (called function). + if parent is None: + print('FATAL({} line {}): child {} has no parent.'.format(inFileName, lnum, name)) + sys.exit(1) + parent.insert(name) + # Reduce verbosity in the input file by allowing implicit creation + # of a symbol that has no children. + undef: Set[str] = set() + for parent in all.values(): + for child in parent.children: + if child not in all: + undef.add(child) + for name in undef: + all[name] = Symbol(name) + return all + + +def MakePlan(inFileName: str) -> int: + all = LoadDependencies(inFileName) + + # Sweep through all symbols repeatedly. + level = 0 + while True: + # On each pass, print all unvisited parents that contain no unvisited children. + # Mark each parent visited each time we print a parent. + # Keep going until we fail to print something. + + namelist: List[str] = [] + + for parent in all.values(): + if not parent.visited: + blockers = 0 + for child in parent.children: + if not all[child].visited: + blockers += 1 + if blockers == 0: + namelist.append(parent.name) + if len(namelist) == 0: + break + for name in sorted(namelist): + parent = all[name] + parent.visited = True + print('{},{}'.format(level, parent)) + level += 1 + + # Report an error if any unvisited symbols remain. + undefCount = 0 + for symbol in all.values(): + if not symbol.visited: + print('UNVISITED: {}'.format(symbol.name)) + undefCount += 1 + if undefCount > 0: + return 1 + return 0 + + +if __name__ == '__main__': + sys.exit(MakePlan('dependencies.txt')) diff --git a/dependencies/plan b/dependencies/plan new file mode 100755 index 00000000..bc252ddb --- /dev/null +++ b/dependencies/plan @@ -0,0 +1,4 @@ +#!/bin/bash +mypy --strict goplan.py || exit 1 +python3 goplan.py > plan.csv || exit 1 +exit 0 diff --git a/dependencies/plan.csv b/dependencies/plan.csv new file mode 100644 index 00000000..db0bc6ac --- /dev/null +++ b/dependencies/plan.csv @@ -0,0 +1,185 @@ +0,AddDays +0,AngleBetween +0,Atmosphere +0,CalcEvent +0,CalcMoon +0,CalcShadow +0,CalendarDateTime +0,ClampIndex +0,CombineRotation +0,CubeRoot +0,DefineStar +0,DeltaT_EspenakMeeus +0,EclipseKindFromUmbra +0,EquatorFromVector +0,ExportState +0,FindAscent +0,HorizonDipAngle +0,IdentityMatrix +0,InverseRotation +0,IsSuperiorPlanet +0,JupiterMoon_elem2pv +0,LongitudeOffset +0,MajorBodiesAccelerationIncrement +0,MassProduct +0,MaxAltitudeSlope +0,MoonMagnitude +0,NormalizeLongitude +0,Obscuration +0,ObserverGravity +0,Pivot +0,PlanetOrbitalPeriod +0,QuadInterp +0,RefractionAngle +0,RotateEquatorialToEcliptic +0,RotateState +0,RotateVector +0,Rotation_ECL_EQJ +0,Rotation_EQJ_ECL +0,Rotation_EQJ_GAL +0,Rotation_GAL_EQJ +0,SiderealTime +0,SphereFromVector +0,ToggleAzimuthDirection +0,UniversalTimeFromCalendar +0,UpdatePosition +0,UpdateVelocity +0,UserDefinedStar +0,VectorFromSphere +0,VisualMagnitude +0,VsopDerivCalc +0,VsopFormulaCalc +0,VsopRotate +0,VsopSphereToRect +0,iau2000b +0,mean_obliq +0,precession_rot +0,spin +1,CalcJupiterMoon,JupiterMoon_elem2pv +1,CalcVsop,VsopFormulaCalc,VsopRotate,VsopSphereToRect +1,CalcVsopPosVel,VsopDerivCalc,VsopFormulaCalc,VsopRotate,VsopSphereToRect +1,CorrectLightTravel,AddDays +1,DeltaT,DeltaT_EspenakMeeus +1,Horizon,RefractionAngle,SiderealTime,spin +1,HorizonFromVector,RefractionAngle,SphereFromVector,ToggleAzimuthDirection +1,InternalSearchAltitude,AddDays,FindAscent,MaxAltitudeSlope +1,InverseRefractionAngle,RefractionAngle +1,LagrangePointFast,CubeRoot +1,Libration,CalcMoon,LongitudeOffset,NormalizeLongitude +1,MajorBodiesAcceleration,MajorBodiesAccelerationIncrement +1,MoonEclipticLatitudeDegrees,CalcMoon +1,Rotation_EQD_HOR,SiderealTime,spin +1,Search,AddDays,QuadInterp +1,SolarEclipseObscuration,AngleBetween,Obscuration +1,SynodicPeriod,PlanetOrbitalPeriod +1,e_tilt,iau2000b,mean_obliq +1,ecl2equ_vec,mean_obliq +1,inverse_terra,SiderealTime +1,precession,precession_rot +1,precession_posvel,RotateState,precession_rot +1,terra,SiderealTime +2,AdjustBarycenterPosVel,CalcVsopPosVel +2,BarycenterContrib,CalcVsop +2,CalcEarth,CalcVsop +2,GeoMoon,CalcMoon,ecl2equ_vec,precession +2,JupiterMoons,CalcJupiterMoon +2,LocalEclipseTransition,CalcEvent,Search +2,PlanetTransitBoundary,Search +2,Rotation_ECT_EQD,e_tilt +2,Rotation_EQD_ECT,e_tilt +2,Rotation_HOR_EQD,InverseRotation,Rotation_EQD_HOR +2,SearchAltitude,InternalSearchAltitude +2,SearchLunarApsis,AddDays,Search +2,SearchMoonPhase,AddDays,Search +2,SearchRiseSet,Atmosphere,HorizonDipAngle,InternalSearchAltitude +2,SearchSunLongitude,AddDays,Search +2,ShadowSemiDurationMinutes,AddDays,Search +2,TerrestrialTime,DeltaT +2,VectorFromHorizon,InverseRefractionAngle,ToggleAzimuthDirection,VectorFromSphere +2,nutation_rot,e_tilt +3,CalcSolarSystemBarycenter,BarycenterContrib +3,FindSeasonChange,SearchSunLongitude +3,GeoMoonState,AddDays,GeoMoon +3,LocalEclipse,CalcEvent,EclipseKindFromUmbra,LocalEclipseTransition,SolarEclipseObscuration +3,MajorBodyBary,AdjustBarycenterPosVel +3,NextLunarApsis,AddDays,SearchLunarApsis +3,Rotation_EQD_EQJ,CombineRotation,nutation_rot,precession_rot +3,Rotation_EQJ_EQD,CombineRotation,nutation_rot,precession_rot +3,UniversalTime,TerrestrialTime +3,nutation,RotateVector,nutation_rot +3,nutation_posvel,RotateState,nutation_rot +4,AstroTime,AddDays,CalendarDateTime,TerrestrialTime,UniversalTime,UniversalTimeFromCalendar +4,Constellation,EquatorFromVector,RotateVector,Rotation_EQJ_EQD,VectorFromSphere +4,EarthRotationAxis,EquatorFromVector,nutation,precession +4,EclipticGeoMoon,CalcMoon,RotateEquatorialToEcliptic,e_tilt,ecl2equ_vec,nutation +4,EquatorialToEcliptic,RotateEquatorialToEcliptic,e_tilt,nutation,precession +4,GeoEmbState,GeoMoonState +4,GeoidIntersect,CalcShadow,EclipseKindFromUmbra,InverseRotation,RotateVector,Rotation_EQJ_EQD,SiderealTime,SolarEclipseObscuration +4,GravFromState,MajorBodyBary +4,GravSim,MajorBodiesAcceleration,MajorBodyBary,UpdatePosition +4,Rotation_ECT_EQJ,CombineRotation,Rotation_ECT_EQD,Rotation_EQD_EQJ +4,Rotation_EQD_ECL,CombineRotation,Rotation_EQD_EQJ,Rotation_EQJ_ECL +4,Rotation_EQJ_ECT,CombineRotation,Rotation_EQD_ECT,Rotation_EQJ_EQD +4,Rotation_HOR_EQJ,CombineRotation,Rotation_EQD_EQJ,Rotation_HOR_EQD +4,Seasons,FindSeasonChange +4,gyration,nutation,precession +4,gyration_posvel,nutation_posvel,precession_posvel +5,CalcPlutoOneWay,GravFromState,GravSim +5,GetSegment,ClampIndex,GravFromState,GravSim +5,ObserverState,gyration_posvel,terra +5,RotationAxis,EarthRotationAxis +5,Rotation_ECL_EQD,InverseRotation,Rotation_EQD_ECL +5,Rotation_EQJ_HOR,InverseRotation,Rotation_HOR_EQJ +5,SaturnMagnitude,EquatorialToEcliptic +5,SearchMoonNode,AddDays,EclipticGeoMoon,Search +5,SunPosition,AddDays,CalcEarth,RotateEquatorialToEcliptic,e_tilt,gyration +5,VectorObserver,gyration,inverse_terra +5,geo_pos,gyration,terra +6,CalcPluto,CalcPlutoOneWay,ClampIndex,GetSegment,MajorBodyBary,UpdatePosition,UpdateVelocity +6,NextMoonNode,AddDays,SearchMoonNode +6,ObserverVector,ObserverState +6,Rotation_ECL_HOR,CombineRotation,Rotation_ECL_EQD,Rotation_EQD_HOR +7,BaryState,CalcPluto,CalcVsopPosVel,ExportState,GeoEmbState,GeoMoonState,MajorBodyBary +7,HelioVector,CalcEarth,CalcPluto,CalcSolarSystemBarycenter,CalcVsop,GeoMoon,UserDefinedStar,VectorFromSphere +7,Rotation_HOR_ECL,InverseRotation,Rotation_ECL_HOR +8,EclipticLongitude,EquatorialToEcliptic,HelioVector +8,HelioDistance,HelioVector,UserDefinedStar,VsopFormulaCalc +8,HelioState,CalcPluto,CalcVsopPosVel,ExportState,GeoEmbState,GeoMoonState,HelioVector,MajorBodyBary +8,Illumination,AngleBetween,CalcEarth,GeoMoon,HelioVector,MoonMagnitude,SaturnMagnitude,VisualMagnitude +9,BackdatePosition,CorrectLightTravel,HelioState,HelioVector,UserDefinedStar +9,LagrangePoint,GeoMoonState,HelioState,LagrangePointFast,MassProduct +9,PlanetExtreme,AddDays,HelioDistance +9,RelativeLongitudeOffset,EclipticLongitude,LongitudeOffset +10,BruteSearchPlanetApsis,AddDays,PlanetExtreme,PlanetOrbitalPeriod +10,GeoVector,BackdatePosition,GeoMoon +10,SearchRelativeLongitude,AddDays,IsSuperiorPlanet,RelativeLongitudeOffset,SynodicPeriod +11,AngleFromSun,AngleBetween,GeoVector +11,EarthShadow,CalcShadow,GeoMoon,GeoVector +11,Equator,EquatorFromVector,GeoVector,geo_pos,gyration +11,LocalMoonShadow,CalcShadow,GeoMoon,GeoVector,geo_pos +11,MoonShadow,CalcShadow,GeoMoon,GeoVector +11,PairLongitude,EquatorialToEcliptic,GeoVector,NormalizeLongitude +11,PlanetShadow,CalcShadow,GeoVector +11,SearchPeakMagnitude,AddDays,EclipticLongitude,Illumination,LongitudeOffset,Search,SearchRelativeLongitude,SynodicPeriod +11,SearchPlanetApsis,AddDays,BruteSearchPlanetApsis,HelioDistance,PlanetOrbitalPeriod,Search +12,Elongation,AngleFromSun,PairLongitude +12,HourAngle,Equator,SiderealTime +12,MoonPhase,PairLongitude +12,NextPlanetApsis,AddDays,PlanetOrbitalPeriod,SearchPlanetApsis +12,PeakEarthShadow,AddDays,EarthShadow,Search +12,PeakLocalMoonShadow,AddDays,LocalMoonShadow,Search +12,PeakMoonShadow,AddDays,MoonShadow,Search +12,PeakPlanetShadow,AddDays,PlanetShadow,Search +12,SearchHourAngle,AddDays,Equator,Horizon,SiderealTime +12,SunAltitude,Equator,Horizon +13,SearchGlobalSolarEclipse,AddDays,GeoidIntersect,MoonEclipticLatitudeDegrees,PeakMoonShadow,SearchMoonPhase +13,SearchLocalSolarEclipse,AddDays,LocalEclipse,MoonEclipticLatitudeDegrees,PeakLocalMoonShadow,SearchMoonPhase +13,SearchLunarEclipse,AddDays,CalcMoon,Obscuration,PeakEarthShadow,SearchMoonPhase,ShadowSemiDurationMinutes +13,SearchMaxElongation,AddDays,EclipticLongitude,Elongation,LongitudeOffset,Search,SearchRelativeLongitude,SynodicPeriod +13,SearchMoonQuarter,MoonPhase,SearchMoonPhase +13,SearchTransit,AddDays,AngleFromSun,PeakPlanetShadow,PlanetTransitBoundary,SearchRelativeLongitude +14,NextGlobalSolarEclipse,AddDays,SearchGlobalSolarEclipse +14,NextLocalSolarEclipse,AddDays,SearchLocalSolarEclipse +14,NextLunarEclipse,AddDays,SearchLunarEclipse +14,NextMoonQuarter,AddDays,SearchMoonQuarter +14,NextTransit,AddDays,SearchTransit