gmat-czml 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gmat_czml-0.1.0/.gitattributes +5 -0
- gmat_czml-0.1.0/.github/CODEOWNERS +2 -0
- gmat_czml-0.1.0/.github/ISSUE_TEMPLATE/bug.yml +59 -0
- gmat_czml-0.1.0/.github/ISSUE_TEMPLATE/chore.yml +25 -0
- gmat_czml-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- gmat_czml-0.1.0/.github/ISSUE_TEMPLATE/convert-failure.yml +51 -0
- gmat_czml-0.1.0/.github/ISSUE_TEMPLATE/feature.yml +41 -0
- gmat_czml-0.1.0/.github/pull_request_template.md +35 -0
- gmat_czml-0.1.0/.github/workflows/ci.yml +138 -0
- gmat_czml-0.1.0/.github/workflows/docs.yml +57 -0
- gmat_czml-0.1.0/.github/workflows/release.yml +74 -0
- gmat_czml-0.1.0/.gitignore +47 -0
- gmat_czml-0.1.0/.python-version +1 -0
- gmat_czml-0.1.0/CHANGELOG.md +53 -0
- gmat_czml-0.1.0/CITATION.cff +24 -0
- gmat_czml-0.1.0/CONTRIBUTING.md +63 -0
- gmat_czml-0.1.0/LICENSE +21 -0
- gmat_czml-0.1.0/PKG-INFO +132 -0
- gmat_czml-0.1.0/README.md +98 -0
- gmat_czml-0.1.0/docs/api.md +36 -0
- gmat_czml-0.1.0/docs/assets/gallery/geo.png +0 -0
- gmat_czml-0.1.0/docs/assets/gallery/leo-ground-track.gif +0 -0
- gmat_czml-0.1.0/docs/assets/gallery/leo-ground-track.png +0 -0
- gmat_czml-0.1.0/docs/assets/gallery/skyfield-iss.png +0 -0
- gmat_czml-0.1.0/docs/cli.md +40 -0
- gmat_czml-0.1.0/docs/conversion/ground-track.md +52 -0
- gmat_czml-0.1.0/docs/conversion/orbit-path.md +53 -0
- gmat_czml-0.1.0/docs/design/decisions.md +252 -0
- gmat_czml-0.1.0/docs/gallery.md +58 -0
- gmat_czml-0.1.0/docs/getting-started.md +108 -0
- gmat_czml-0.1.0/docs/index.md +49 -0
- gmat_czml-0.1.0/docs/schema.md +100 -0
- gmat_czml-0.1.0/docs/styling.md +31 -0
- gmat_czml-0.1.0/examples/README.md +51 -0
- gmat_czml-0.1.0/examples/data/gmat-leo.oem +116 -0
- gmat_czml-0.1.0/examples/data/iss.tle +3 -0
- gmat_czml-0.1.0/examples/geo.py +77 -0
- gmat_czml-0.1.0/examples/leo_ground_track.py +37 -0
- gmat_czml-0.1.0/examples/serve.py +42 -0
- gmat_czml-0.1.0/examples/skyfield_tle.py +81 -0
- gmat_czml-0.1.0/examples/viewer.html +273 -0
- gmat_czml-0.1.0/mkdocs.yml +90 -0
- gmat_czml-0.1.0/pyproject.toml +123 -0
- gmat_czml-0.1.0/scripts/griffe_sphinx_roles.py +42 -0
- gmat_czml-0.1.0/scripts/render_gallery.py +182 -0
- gmat_czml-0.1.0/src/gmat_czml/__init__.py +56 -0
- gmat_czml-0.1.0/src/gmat_czml/assembly.py +164 -0
- gmat_czml-0.1.0/src/gmat_czml/cli.py +136 -0
- gmat_czml-0.1.0/src/gmat_czml/convert/__init__.py +10 -0
- gmat_czml-0.1.0/src/gmat_czml/convert/ephemeris.py +238 -0
- gmat_czml-0.1.0/src/gmat_czml/convert/frames.py +104 -0
- gmat_czml-0.1.0/src/gmat_czml/convert/groundtrack.py +207 -0
- gmat_czml-0.1.0/src/gmat_czml/convert/sampling.py +185 -0
- gmat_czml-0.1.0/src/gmat_czml/convert/time.py +105 -0
- gmat_czml-0.1.0/src/gmat_czml/document.py +64 -0
- gmat_czml-0.1.0/src/gmat_czml/errors.py +211 -0
- gmat_czml-0.1.0/src/gmat_czml/py.typed +0 -0
- gmat_czml-0.1.0/src/gmat_czml/schema.py +314 -0
- gmat_czml-0.1.0/src/gmat_czml/styles.py +24 -0
- gmat_czml-0.1.0/tests/_harness.py +152 -0
- gmat_czml-0.1.0/tests/browser/test_cesium_parse.py +91 -0
- gmat_czml-0.1.0/tests/conftest.py +24 -0
- gmat_czml-0.1.0/tests/data/czml-schema/AlignedAxis.json +39 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ArcType.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Articulation.json +30 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Articulations.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/BackgroundPadding.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Billboard.json +105 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Boolean.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/BoundingRectangle.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Box.json +58 -0
- gmat_czml-0.1.0/tests/data/czml-schema/BoxDimensions.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/CheckerboardMaterial.json +30 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ClassificationType.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Clock.json +31 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Color.json +34 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ColorBlendMode.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/CornerType.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Corridor.json +97 -0
- gmat_czml-0.1.0/tests/data/czml-schema/CustomProperties.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/CustomProperty.json +149 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Cylinder.json +78 -0
- gmat_czml-0.1.0/tests/data/czml-schema/DeletableProperty.json +12 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Direction.json +44 -0
- gmat_czml-0.1.0/tests/data/czml-schema/DirectionList.json +38 -0
- gmat_czml-0.1.0/tests/data/czml-schema/DistanceDisplayCondition.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Document.json +10 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Double.json +30 -0
- gmat_czml-0.1.0/tests/data/czml-schema/DoubleList.json +28 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Ellipse.json +107 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Ellipsoid.json +97 -0
- gmat_czml-0.1.0/tests/data/czml-schema/EllipsoidRadii.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Extensions/AGI/ConicSensor.json +155 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Extensions/AGI/CustomPatternSensor.json +140 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Extensions/AGI/Fan.json +59 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Extensions/AGI/RectangularSensor.json +145 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Extensions/AGI/SensorVolumePortionToDisplay.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Extensions/AGI/SensorVolumePortionToDisplayValue.json +22 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Extensions/AGI/SensorVolumePortionToDisplayValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Extensions/AGI/Vector.json +35 -0
- gmat_czml-0.1.0/tests/data/czml-schema/EyeOffset.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Font.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/GridMaterial.json +40 -0
- gmat_czml-0.1.0/tests/data/czml-schema/HeightReference.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/HorizontalOrigin.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ImageMaterial.json +34 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Integer.json +30 -0
- gmat_czml-0.1.0/tests/data/czml-schema/InterpolatableProperty.json +43 -0
- gmat_czml-0.1.0/tests/data/czml-schema/LICENSE.md +205 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Label.json +109 -0
- gmat_czml-0.1.0/tests/data/czml-schema/LabelStyle.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/LineCount.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/LineOffset.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/LineThickness.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Material.json +35 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Model.json +94 -0
- gmat_czml-0.1.0/tests/data/czml-schema/NearFarScalar.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/NodeTransformation.json +30 -0
- gmat_czml-0.1.0/tests/data/czml-schema/NodeTransformations.json +14 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Orientation.json +38 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Packet.json +151 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Path.json +45 -0
- gmat_czml-0.1.0/tests/data/czml-schema/PixelOffset.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Point.json +56 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Polygon.json +116 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Polyline.json +72 -0
- gmat_czml-0.1.0/tests/data/czml-schema/PolylineArrowMaterial.json +20 -0
- gmat_czml-0.1.0/tests/data/czml-schema/PolylineDashMaterial.json +35 -0
- gmat_czml-0.1.0/tests/data/czml-schema/PolylineGlowMaterial.json +30 -0
- gmat_czml-0.1.0/tests/data/czml-schema/PolylineMaterial.json +51 -0
- gmat_czml-0.1.0/tests/data/czml-schema/PolylineOutlineMaterial.json +30 -0
- gmat_czml-0.1.0/tests/data/czml-schema/PolylineVolume.json +68 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Position.json +55 -0
- gmat_czml-0.1.0/tests/data/czml-schema/PositionList.json +43 -0
- gmat_czml-0.1.0/tests/data/czml-schema/PositionListOfLists.json +38 -0
- gmat_czml-0.1.0/tests/data/czml-schema/README.md +34 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Rectangle.json +97 -0
- gmat_czml-0.1.0/tests/data/czml-schema/RectangleCoordinates.json +34 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Repeat.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Rotation.json +33 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Scale.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ShadowMode.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Shape.json +23 -0
- gmat_czml-0.1.0/tests/data/czml-schema/SolidColorMaterial.json +20 -0
- gmat_czml-0.1.0/tests/data/czml-schema/String.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/StripeMaterial.json +40 -0
- gmat_czml-0.1.0/tests/data/czml-schema/StripeOrientation.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Tileset.json +23 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Translation.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Uri.json +32 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/ArcTypeValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/BooleanValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/BoundingRectangleValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/Cartesian2ListValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/Cartesian2ValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/Cartesian3ListOfListsValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/Cartesian3ListValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/Cartesian3ValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/Cartesian3VelocityValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/CartographicDegreesListOfListsValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/CartographicDegreesListValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/CartographicDegreesValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/CartographicRadiansListOfListsValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/CartographicRadiansListValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/CartographicRadiansValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/CartographicRectangleDegreesValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/CartographicRectangleRadiansValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/ClassificationTypeValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/ColorBlendModeValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/CornerTypeValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/DistanceDisplayConditionValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/DoubleListValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/DoubleValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/FontValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/HeightReferenceValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/HorizontalOriginValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/IntegerValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/LabelStyleValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/NearFarScalarValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/ReferenceListOfListsValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/ReferenceListValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/ReferenceValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/RgbaValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/RgbafValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/ShadowModeValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/SphericalListValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/SphericalValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/StringValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/StripeOrientationValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/UnitCartesian3ListValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/UnitCartesian3ValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/UnitQuaternionValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/UnitSphericalListValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/UnitSphericalValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/UriValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/VelocityReferenceValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ValueProperties/VerticalOriginValueProperty.json +6 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/ArcTypeValue.json +22 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/BooleanValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/BoundingRectangleValue.json +12 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/Cartesian2ListValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/Cartesian2Value.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/Cartesian3ListOfListsValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/Cartesian3ListValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/Cartesian3Value.json +12 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/Cartesian3VelocityValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/CartographicDegreesListOfListsValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/CartographicDegreesListValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/CartographicDegreesValue.json +12 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/CartographicRadiansListOfListsValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/CartographicRadiansListValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/CartographicRadiansValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/CartographicRectangleDegreesValue.json +12 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/CartographicRectangleRadiansValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/ClassificationTypeValue.json +22 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/ClockRangeValue.json +21 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/ClockStepValue.json +21 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/ColorBlendModeValue.json +22 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/CornerTypeValue.json +22 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/DistanceDisplayConditionValue.json +12 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/DoubleListValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/DoubleValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/FontValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/HeightReferenceValue.json +22 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/HorizontalOriginValue.json +22 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/IntegerValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/LabelStyleValue.json +22 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/NearFarScalarValue.json +12 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/ReferenceListOfListsValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/ReferenceListValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/ReferenceValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/RgbaValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/RgbafValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/ShadowModeValue.json +26 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/SphericalListValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/SphericalValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/StringValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/StripeOrientationValue.json +18 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/TimeIntervalCollectionValue.json +10 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/TimeValue.json +7 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/UnitCartesian3ListValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/UnitCartesian3Value.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/UnitQuaternionValue.json +12 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/UnitSphericalListValue.json +11 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/UnitSphericalValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/UriValue.json +12 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/VelocityReferenceValue.json +8 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Values/VerticalOriginValue.json +26 -0
- gmat_czml-0.1.0/tests/data/czml-schema/VerticalOrigin.json +29 -0
- gmat_czml-0.1.0/tests/data/czml-schema/ViewFrom.json +32 -0
- gmat_czml-0.1.0/tests/data/czml-schema/Wall.json +66 -0
- gmat_czml-0.1.0/tests/data/gmat-leo.oem +116 -0
- gmat_czml-0.1.0/tests/data/gmat-leo.script +78 -0
- gmat_czml-0.1.0/tests/data/golden/gmat-leo-groundtrack.czml +1 -0
- gmat_czml-0.1.0/tests/data/golden/gmat-leo.czml +1 -0
- gmat_czml-0.1.0/tests/data/golden/multi-object.czml +1 -0
- gmat_czml-0.1.0/tests/data/golden/skyfield-iss-groundtrack.czml +1 -0
- gmat_czml-0.1.0/tests/data/golden/skyfield-iss.czml +1 -0
- gmat_czml-0.1.0/tests/data/iss.tle +3 -0
- gmat_czml-0.1.0/tests/data/leo.oem +21 -0
- gmat_czml-0.1.0/tests/test_assembly.py +273 -0
- gmat_czml-0.1.0/tests/test_cli.py +160 -0
- gmat_czml-0.1.0/tests/test_convert_ephemeris.py +370 -0
- gmat_czml-0.1.0/tests/test_convert_frames.py +209 -0
- gmat_czml-0.1.0/tests/test_convert_groundtrack.py +237 -0
- gmat_czml-0.1.0/tests/test_convert_sampling.py +211 -0
- gmat_czml-0.1.0/tests/test_convert_time.py +187 -0
- gmat_czml-0.1.0/tests/test_document.py +51 -0
- gmat_czml-0.1.0/tests/test_golden.py +86 -0
- gmat_czml-0.1.0/tests/test_package.py +26 -0
- gmat_czml-0.1.0/tests/test_schema.py +377 -0
- gmat_czml-0.1.0/tests/test_schema_validation.py +42 -0
- gmat_czml-0.1.0/uv.lock +2409 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Golden / reference fixtures under tests/data are compared byte-for-byte by the conversion
|
|
2
|
+
# tests. Git's line-ending normalisation (autocrlf on Windows checks out LF as CRLF) would
|
|
3
|
+
# otherwise rewrite them and break those byte-exact assertions, so treat the fixtures as binary
|
|
4
|
+
# — checked out verbatim, identical on every platform.
|
|
5
|
+
tests/data/** -text
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Bug
|
|
2
|
+
description: Report a defect in gmat-czml.
|
|
3
|
+
title: "<short summary>"
|
|
4
|
+
labels: ["type:bug"]
|
|
5
|
+
body:
|
|
6
|
+
- type: textarea
|
|
7
|
+
id: what_happened
|
|
8
|
+
attributes:
|
|
9
|
+
label: What happened
|
|
10
|
+
description: Observed behavior. Include error messages and tracebacks verbatim.
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: what_expected
|
|
15
|
+
attributes:
|
|
16
|
+
label: What you expected
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
- type: textarea
|
|
20
|
+
id: repro
|
|
21
|
+
attributes:
|
|
22
|
+
label: Minimal reproduction
|
|
23
|
+
description: >-
|
|
24
|
+
Smallest snippet that triggers the bug — the Python (or CLI) call and, if a
|
|
25
|
+
trajectory fails to convert, the smallest input that reproduces it.
|
|
26
|
+
render: python
|
|
27
|
+
validations:
|
|
28
|
+
required: true
|
|
29
|
+
- type: input
|
|
30
|
+
id: gmat_czml_version
|
|
31
|
+
attributes:
|
|
32
|
+
label: gmat-czml version
|
|
33
|
+
placeholder: "e.g. 0.1.0, or git sha"
|
|
34
|
+
validations:
|
|
35
|
+
required: true
|
|
36
|
+
- type: input
|
|
37
|
+
id: python_version
|
|
38
|
+
attributes:
|
|
39
|
+
label: Python version
|
|
40
|
+
placeholder: "e.g. 3.12.3"
|
|
41
|
+
validations:
|
|
42
|
+
required: true
|
|
43
|
+
- type: dropdown
|
|
44
|
+
id: os
|
|
45
|
+
attributes:
|
|
46
|
+
label: Operating system
|
|
47
|
+
options:
|
|
48
|
+
- Linux
|
|
49
|
+
- Windows
|
|
50
|
+
- macOS
|
|
51
|
+
- Other
|
|
52
|
+
validations:
|
|
53
|
+
required: true
|
|
54
|
+
- type: textarea
|
|
55
|
+
id: logs
|
|
56
|
+
attributes:
|
|
57
|
+
label: Logs
|
|
58
|
+
description: Relevant output — tracebacks, warnings, pytest output.
|
|
59
|
+
render: shell
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: Chore
|
|
2
|
+
description: Tooling, infra, hygiene, or other non-feature work.
|
|
3
|
+
title: "<short summary>"
|
|
4
|
+
labels: ["type:chore"]
|
|
5
|
+
body:
|
|
6
|
+
- type: textarea
|
|
7
|
+
id: what
|
|
8
|
+
attributes:
|
|
9
|
+
label: What
|
|
10
|
+
description: What needs to happen.
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: why
|
|
15
|
+
attributes:
|
|
16
|
+
label: Why
|
|
17
|
+
description: Why now. What's blocked or painful without it.
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: done
|
|
22
|
+
attributes:
|
|
23
|
+
label: Definition of done
|
|
24
|
+
value: |
|
|
25
|
+
- [ ]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: My trajectory does not convert
|
|
2
|
+
description: A trajectory that should convert to CZML fails or renders wrong.
|
|
3
|
+
title: "<short summary>"
|
|
4
|
+
labels: ["type:bug"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: >-
|
|
9
|
+
gmat-czml consumes the canonical state-series schema. Most conversion failures come down to
|
|
10
|
+
the input DataFrame's columns or `attrs`, so please share its shape below.
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: what_happened
|
|
13
|
+
attributes:
|
|
14
|
+
label: What happened
|
|
15
|
+
description: The error, the wrong rendering, or the missing entity. Include tracebacks verbatim.
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: textarea
|
|
19
|
+
id: dataframe_schema
|
|
20
|
+
attributes:
|
|
21
|
+
label: Input DataFrame schema
|
|
22
|
+
description: >-
|
|
23
|
+
The columns and the `attrs` of the DataFrame you passed — ideally the output of
|
|
24
|
+
`print(df.columns.tolist()); print(df.attrs); print(df.head())`.
|
|
25
|
+
render: text
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
- type: textarea
|
|
29
|
+
id: producer
|
|
30
|
+
attributes:
|
|
31
|
+
label: Where the trajectory came from
|
|
32
|
+
description: >-
|
|
33
|
+
How the trajectory was produced or read (a GMAT run, a TLE propagation, a read ephemeris
|
|
34
|
+
file, …) and which file format if any.
|
|
35
|
+
validations:
|
|
36
|
+
required: true
|
|
37
|
+
- type: textarea
|
|
38
|
+
id: call
|
|
39
|
+
attributes:
|
|
40
|
+
label: The call you made
|
|
41
|
+
description: The `to_czml(...)` or `gmat-czml convert` invocation.
|
|
42
|
+
render: python
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
45
|
+
- type: input
|
|
46
|
+
id: gmat_czml_version
|
|
47
|
+
attributes:
|
|
48
|
+
label: gmat-czml version
|
|
49
|
+
placeholder: "e.g. 0.1.0, or git sha"
|
|
50
|
+
validations:
|
|
51
|
+
required: true
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: Feature
|
|
2
|
+
description: Propose a new capability or a non-trivial change.
|
|
3
|
+
title: "<short summary>"
|
|
4
|
+
labels: ["type:feature"]
|
|
5
|
+
body:
|
|
6
|
+
- type: textarea
|
|
7
|
+
id: summary
|
|
8
|
+
attributes:
|
|
9
|
+
label: Summary
|
|
10
|
+
description: One or two sentences describing what this feature is.
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: motivation
|
|
15
|
+
attributes:
|
|
16
|
+
label: Motivation
|
|
17
|
+
description: Why this matters. What can't users do today that they should be able to do?
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: acceptance
|
|
22
|
+
attributes:
|
|
23
|
+
label: Acceptance criteria
|
|
24
|
+
description: >-
|
|
25
|
+
Concrete, testable checkboxes. An outside reviewer should be able to read these
|
|
26
|
+
and tell whether the feature is done.
|
|
27
|
+
value: |
|
|
28
|
+
- [ ]
|
|
29
|
+
- [ ]
|
|
30
|
+
validations:
|
|
31
|
+
required: true
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: out_of_scope
|
|
34
|
+
attributes:
|
|
35
|
+
label: Out of scope / non-goals
|
|
36
|
+
description: What this issue deliberately does not cover. Helps keep scope honest.
|
|
37
|
+
- type: textarea
|
|
38
|
+
id: notes
|
|
39
|
+
attributes:
|
|
40
|
+
label: Notes
|
|
41
|
+
description: Design notes, links to the design decisions, references to prior art, open questions.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Thanks for contributing to gmat-czml. Keep PRs small and scoped to one issue.
|
|
3
|
+
-->
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
<!-- One or two sentences: what this PR changes and why. -->
|
|
8
|
+
|
|
9
|
+
Closes #
|
|
10
|
+
|
|
11
|
+
## Changes
|
|
12
|
+
|
|
13
|
+
<!-- Short bullet list of the substantive changes. Omit trivia (formatting, imports). -->
|
|
14
|
+
|
|
15
|
+
-
|
|
16
|
+
|
|
17
|
+
## Tested with
|
|
18
|
+
|
|
19
|
+
<!-- Tick what you ran locally. CI will re-run on Ubuntu, Windows, and macOS. -->
|
|
20
|
+
|
|
21
|
+
- [ ] `pytest -m "not browser"`
|
|
22
|
+
- [ ] `pytest -m browser` (headless CesiumJS)
|
|
23
|
+
- [ ] `ruff check`
|
|
24
|
+
- [ ] `ruff format --check`
|
|
25
|
+
- [ ] `mypy`
|
|
26
|
+
|
|
27
|
+
## Breaking changes
|
|
28
|
+
|
|
29
|
+
<!-- "None" if none. Otherwise: what breaks, who is affected, migration notes. -->
|
|
30
|
+
|
|
31
|
+
None.
|
|
32
|
+
|
|
33
|
+
## Notes for reviewers
|
|
34
|
+
|
|
35
|
+
<!-- Optional. Things to look at first, known rough edges, questions for the reviewer. -->
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
concurrency:
|
|
9
|
+
group: ci-${{ github.workflow }}-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
name: test (${{ matrix.os }}, py${{ matrix.python-version }})
|
|
15
|
+
runs-on: ${{ matrix.os }}
|
|
16
|
+
timeout-minutes: 20
|
|
17
|
+
strategy:
|
|
18
|
+
fail-fast: false
|
|
19
|
+
# 3 OSes × 3 Python minors. gmat-czml is pure Python, so the matrix is the
|
|
20
|
+
# platform / interpreter spread. The browser and czml-validation jobs run once
|
|
21
|
+
# on Ubuntu (their output is platform-independent), so they are excluded here.
|
|
22
|
+
matrix:
|
|
23
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
24
|
+
python-version: ['3.10', '3.11', '3.12']
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
28
|
+
uses: actions/setup-python@v5
|
|
29
|
+
with:
|
|
30
|
+
python-version: ${{ matrix.python-version }}
|
|
31
|
+
- name: Install uv
|
|
32
|
+
uses: astral-sh/setup-uv@v4
|
|
33
|
+
with:
|
|
34
|
+
enable-cache: true
|
|
35
|
+
cache-dependency-glob: uv.lock
|
|
36
|
+
- name: Install project
|
|
37
|
+
run: uv sync --all-groups
|
|
38
|
+
- name: Run pytest
|
|
39
|
+
run: uv run pytest -m "not browser and not czml" --cov --cov-report=term-missing
|
|
40
|
+
|
|
41
|
+
lint:
|
|
42
|
+
name: lint
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
timeout-minutes: 5
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v4
|
|
47
|
+
- uses: actions/setup-python@v5
|
|
48
|
+
with:
|
|
49
|
+
python-version: '3.12'
|
|
50
|
+
- uses: astral-sh/setup-uv@v4
|
|
51
|
+
with:
|
|
52
|
+
enable-cache: true
|
|
53
|
+
cache-dependency-glob: uv.lock
|
|
54
|
+
- run: uv sync --all-groups
|
|
55
|
+
- run: uv run ruff check
|
|
56
|
+
- run: uv run ruff format --check
|
|
57
|
+
|
|
58
|
+
typecheck:
|
|
59
|
+
name: typecheck
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
timeout-minutes: 10
|
|
62
|
+
steps:
|
|
63
|
+
- uses: actions/checkout@v4
|
|
64
|
+
- uses: actions/setup-python@v5
|
|
65
|
+
with:
|
|
66
|
+
python-version: '3.12'
|
|
67
|
+
- uses: astral-sh/setup-uv@v4
|
|
68
|
+
with:
|
|
69
|
+
enable-cache: true
|
|
70
|
+
cache-dependency-glob: uv.lock
|
|
71
|
+
- run: uv sync --all-groups
|
|
72
|
+
- run: uv run mypy
|
|
73
|
+
|
|
74
|
+
# Smoke-check that `pip install gmat-czml` (no dev group) imports cleanly. Catches a
|
|
75
|
+
# dev-only dependency leaking into the default install path.
|
|
76
|
+
minimal-install:
|
|
77
|
+
name: minimal install smoke
|
|
78
|
+
runs-on: ubuntu-latest
|
|
79
|
+
timeout-minutes: 5
|
|
80
|
+
steps:
|
|
81
|
+
- uses: actions/checkout@v4
|
|
82
|
+
- uses: actions/setup-python@v5
|
|
83
|
+
with:
|
|
84
|
+
python-version: '3.12'
|
|
85
|
+
- run: pip install .
|
|
86
|
+
- run: python -c "import gmat_czml; print(gmat_czml.__version__)"
|
|
87
|
+
|
|
88
|
+
# Validate the emitted CZML against the official CZML JSON schema (vendored under
|
|
89
|
+
# tests/data/czml-schema/) and byte-diff it against the committed golden corpus, on the real
|
|
90
|
+
# GMAT and TLE producer fixtures.
|
|
91
|
+
czml-validate:
|
|
92
|
+
name: CZML validation
|
|
93
|
+
runs-on: ubuntu-latest
|
|
94
|
+
timeout-minutes: 10
|
|
95
|
+
steps:
|
|
96
|
+
- uses: actions/checkout@v4
|
|
97
|
+
- uses: actions/setup-python@v5
|
|
98
|
+
with:
|
|
99
|
+
python-version: '3.12'
|
|
100
|
+
- uses: astral-sh/setup-uv@v4
|
|
101
|
+
with:
|
|
102
|
+
enable-cache: true
|
|
103
|
+
cache-dependency-glob: uv.lock
|
|
104
|
+
- run: uv sync --all-groups
|
|
105
|
+
- run: uv run pytest -m czml -v
|
|
106
|
+
|
|
107
|
+
# Load the emitted CZML in a real headless CesiumJS client (Playwright + chromium) to catch
|
|
108
|
+
# valid-but-unrenderable output the schema check alone misses, and assert a correct, animated
|
|
109
|
+
# orbit path on the real GMAT and TLE producer fixtures.
|
|
110
|
+
cesium-parse:
|
|
111
|
+
name: headless CesiumJS parse
|
|
112
|
+
runs-on: ubuntu-latest
|
|
113
|
+
timeout-minutes: 15
|
|
114
|
+
steps:
|
|
115
|
+
- uses: actions/checkout@v4
|
|
116
|
+
- uses: actions/setup-python@v5
|
|
117
|
+
with:
|
|
118
|
+
python-version: '3.12'
|
|
119
|
+
- uses: astral-sh/setup-uv@v4
|
|
120
|
+
with:
|
|
121
|
+
enable-cache: true
|
|
122
|
+
cache-dependency-glob: uv.lock
|
|
123
|
+
- run: uv sync --all-groups
|
|
124
|
+
- run: uv run playwright install --with-deps chromium
|
|
125
|
+
- run: uv run pytest -m browser -v
|
|
126
|
+
|
|
127
|
+
# Validate CITATION.cff against the Citation File Format v1.2.0 schema.
|
|
128
|
+
citation:
|
|
129
|
+
name: citation file (cffconvert)
|
|
130
|
+
runs-on: ubuntu-latest
|
|
131
|
+
timeout-minutes: 5
|
|
132
|
+
steps:
|
|
133
|
+
- uses: actions/checkout@v4
|
|
134
|
+
- uses: actions/setup-python@v5
|
|
135
|
+
with:
|
|
136
|
+
python-version: '3.12'
|
|
137
|
+
- run: pip install cffconvert==2.0.0
|
|
138
|
+
- run: cffconvert --validate -i CITATION.cff
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
tags: ['v*']
|
|
7
|
+
pull_request:
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: docs-${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
build:
|
|
16
|
+
name: build
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
timeout-minutes: 5
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
- uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: '3.12'
|
|
24
|
+
- uses: astral-sh/setup-uv@v4
|
|
25
|
+
with:
|
|
26
|
+
enable-cache: true
|
|
27
|
+
cache-dependency-glob: uv.lock
|
|
28
|
+
- run: uv sync --all-groups
|
|
29
|
+
- run: uv run mkdocs build --strict
|
|
30
|
+
|
|
31
|
+
deploy:
|
|
32
|
+
name: deploy
|
|
33
|
+
needs: build
|
|
34
|
+
if: |
|
|
35
|
+
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')) ||
|
|
36
|
+
github.event_name == 'workflow_dispatch'
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
timeout-minutes: 5
|
|
39
|
+
permissions:
|
|
40
|
+
contents: write
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
with:
|
|
44
|
+
fetch-depth: 0
|
|
45
|
+
- uses: actions/setup-python@v5
|
|
46
|
+
with:
|
|
47
|
+
python-version: '3.12'
|
|
48
|
+
- uses: astral-sh/setup-uv@v4
|
|
49
|
+
with:
|
|
50
|
+
enable-cache: true
|
|
51
|
+
cache-dependency-glob: uv.lock
|
|
52
|
+
- run: uv sync --all-groups
|
|
53
|
+
- name: Configure git identity
|
|
54
|
+
run: |
|
|
55
|
+
git config user.name "github-actions[bot]"
|
|
56
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
57
|
+
- run: uv run mkdocs gh-deploy --force --no-history
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ['v*']
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: release-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: false
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
build:
|
|
16
|
+
name: build sdist + wheel
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
timeout-minutes: 5
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
- uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: '3.12'
|
|
24
|
+
- uses: astral-sh/setup-uv@v4
|
|
25
|
+
with:
|
|
26
|
+
enable-cache: true
|
|
27
|
+
cache-dependency-glob: uv.lock
|
|
28
|
+
- run: uv build
|
|
29
|
+
- uses: actions/upload-artifact@v4
|
|
30
|
+
with:
|
|
31
|
+
name: dist
|
|
32
|
+
path: dist/
|
|
33
|
+
if-no-files-found: error
|
|
34
|
+
|
|
35
|
+
publish-pypi:
|
|
36
|
+
name: publish to PyPI
|
|
37
|
+
needs: build
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
timeout-minutes: 10
|
|
40
|
+
environment:
|
|
41
|
+
name: pypi
|
|
42
|
+
url: https://pypi.org/p/gmat-czml
|
|
43
|
+
permissions:
|
|
44
|
+
id-token: write
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/download-artifact@v4
|
|
47
|
+
with:
|
|
48
|
+
name: dist
|
|
49
|
+
path: dist/
|
|
50
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
51
|
+
with:
|
|
52
|
+
skip-existing: true
|
|
53
|
+
|
|
54
|
+
github-release:
|
|
55
|
+
name: github release
|
|
56
|
+
needs: publish-pypi
|
|
57
|
+
runs-on: ubuntu-latest
|
|
58
|
+
timeout-minutes: 5
|
|
59
|
+
permissions:
|
|
60
|
+
contents: write
|
|
61
|
+
steps:
|
|
62
|
+
- uses: actions/download-artifact@v4
|
|
63
|
+
with:
|
|
64
|
+
name: dist
|
|
65
|
+
path: dist/
|
|
66
|
+
- name: Create GitHub Release
|
|
67
|
+
env:
|
|
68
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
69
|
+
run: |
|
|
70
|
+
gh release create "${GITHUB_REF_NAME}" \
|
|
71
|
+
--repo "${GITHUB_REPOSITORY}" \
|
|
72
|
+
--title "${GITHUB_REF_NAME}" \
|
|
73
|
+
--generate-notes \
|
|
74
|
+
dist/*
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
*.egg
|
|
7
|
+
*.egg-info/
|
|
8
|
+
.eggs/
|
|
9
|
+
build/
|
|
10
|
+
dist/
|
|
11
|
+
wheels/
|
|
12
|
+
*.whl
|
|
13
|
+
|
|
14
|
+
# Environments
|
|
15
|
+
.venv/
|
|
16
|
+
venv/
|
|
17
|
+
env/
|
|
18
|
+
.env
|
|
19
|
+
|
|
20
|
+
# uv
|
|
21
|
+
.uv-cache/
|
|
22
|
+
|
|
23
|
+
# Tooling caches
|
|
24
|
+
.pytest_cache/
|
|
25
|
+
.mypy_cache/
|
|
26
|
+
.ruff_cache/
|
|
27
|
+
.coverage
|
|
28
|
+
.coverage.*
|
|
29
|
+
coverage.xml
|
|
30
|
+
htmlcov/
|
|
31
|
+
|
|
32
|
+
# Playwright
|
|
33
|
+
test-results/
|
|
34
|
+
playwright-report/
|
|
35
|
+
|
|
36
|
+
# Docs build
|
|
37
|
+
site/
|
|
38
|
+
.cache/
|
|
39
|
+
|
|
40
|
+
# Example gallery output (regenerate with the scripts under examples/)
|
|
41
|
+
examples/output/
|
|
42
|
+
|
|
43
|
+
# IDE / editor
|
|
44
|
+
.vscode/
|
|
45
|
+
.idea/
|
|
46
|
+
*.swp
|
|
47
|
+
.DS_Store
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to gmat-czml are documented here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project adheres to
|
|
5
|
+
[Semantic Versioning](https://semver.org/spec/v2.0.0.html). Entries are aggregated at release-cut
|
|
6
|
+
time, not per pull request.
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.0] - 2026-06-04
|
|
11
|
+
|
|
12
|
+
First release. gmat-czml takes an already-computed trajectory — a state history in the canonical
|
|
13
|
+
state-series form produced by a headless GMAT run or read by the org's format-I/O library — and
|
|
14
|
+
turns it into a CZML document a Cesium client can animate. It does not propagate, integrate, or
|
|
15
|
+
render: the producer is the source of geometric truth, and Cesium is the renderer.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **`to_czml`, the single entry point**, and the `CzmlDocument` it returns. The call accepts a
|
|
20
|
+
canonical state-series `DataFrame`, an orbit-formats `Ephemeris`, a file orbit-formats can read
|
|
21
|
+
(OEM, GMAT report, SP3, STK ephemeris, …), or an iterable of any of these for a multi-object
|
|
22
|
+
scene. The document saves to a `.czml` file (`save`) or comes back in memory (`to_json` /
|
|
23
|
+
`to_dict`) — no file needed.
|
|
24
|
+
- **The canonical input boundary.** One row per sample (`Epoch`, `X` `Y` `Z` required;
|
|
25
|
+
`VX` `VY` `VZ` optional) plus `DataFrame.attrs` metadata, with the reference frame and time
|
|
26
|
+
scale required and never guessed. A malformed input raises a typed `GmatCzmlError` subclass that
|
|
27
|
+
names exactly what is wrong, rather than failing deep in assembly.
|
|
28
|
+
- **Orbit path.** Each object becomes a Cesium entity carrying four properties — a sampled
|
|
29
|
+
`position` in metres, a `path`, a `point`, and a `label`. The source's interpolation method and
|
|
30
|
+
degree pass through to the CZML `interpolationAlgorithm` / `interpolationDegree`
|
|
31
|
+
(`LAGRANGE` / `HERMITE` / `LINEAR`, defaulting to Lagrange degree 5), and the recognised frame
|
|
32
|
+
maps to CZML `INERTIAL` or `FIXED`.
|
|
33
|
+
- **Tolerance-bounded decimation.** A cross-track Douglas–Peucker pass drops samples that stay
|
|
34
|
+
within tolerance of the kept polyline — a `degree + 1` support floor preserves the interpolation
|
|
35
|
+
curve — so a dense, high-rate ephemeris ships a compact document without visible path error.
|
|
36
|
+
Epochs travel as one reference epoch plus per-sample second offsets.
|
|
37
|
+
- **Ground track** (opt-in via `ground_track=True`). The sub-satellite point becomes a geodetic
|
|
38
|
+
polyline that floats at the satellite's own height over the correct ground position, with
|
|
39
|
+
antimeridian crossings split at an interpolated seam on the dateline. The inertial → Earth-fixed
|
|
40
|
+
rotation and the WGS84 geodetic projection are delegated to orbit-formats — Earth-only, and a
|
|
41
|
+
trajectory declared about another central body is rejected rather than mis-projected.
|
|
42
|
+
- **Clock synthesis.** A document clock is synthesized from the trajectory's own epoch span, with
|
|
43
|
+
the declared time scale converted to the UTC Cesium expects.
|
|
44
|
+
- **Multi-object / multi-segment scenes.** An iterable of trajectories becomes one document, one
|
|
45
|
+
entity per object, on a single shared clock.
|
|
46
|
+
- **Styling.** A single baked-in `sat-default` style covers every object's point, label, path, and
|
|
47
|
+
ground track; the `Style` handle is the stable seam later customization plugs into.
|
|
48
|
+
- **`gmat-czml convert` CLI.** A thin driver over `to_czml` — `convert INPUT -o OUTPUT` with
|
|
49
|
+
`--ground-track`, `--playback-seconds`, and `--style` — whose output is byte-for-byte the
|
|
50
|
+
document the API produces.
|
|
51
|
+
- **Documentation.** A published docs site — getting started, the schema reference, per-entity
|
|
52
|
+
conversion, styling, the CLI, an example gallery with rendered output, and the API reference —
|
|
53
|
+
with the design rationale recorded under `docs/design/`.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use gmat-czml in academic work, please cite it using the metadata below."
|
|
3
|
+
title: gmat-czml
|
|
4
|
+
abstract: >-
|
|
5
|
+
gmat-czml is a permissively-licensed Python library that converts an already-computed
|
|
6
|
+
trajectory — in the canonical state-series form produced by a headless GMAT run or read by the
|
|
7
|
+
org's format-I/O library — into CZML for browser-based 3D visualization in Cesium. It maps state
|
|
8
|
+
ephemerides to an orbit path, renders a ground track, synthesizes a clock,
|
|
9
|
+
and emits an in-memory or on-disk document; it does not propagate or render.
|
|
10
|
+
type: software
|
|
11
|
+
authors:
|
|
12
|
+
- given-names: Dimitrije
|
|
13
|
+
family-names: Jankovic
|
|
14
|
+
version: 0.1.0
|
|
15
|
+
license: MIT
|
|
16
|
+
repository-code: "https://github.com/astro-tools/gmat-czml"
|
|
17
|
+
url: "https://github.com/astro-tools/gmat-czml"
|
|
18
|
+
keywords:
|
|
19
|
+
- astrodynamics
|
|
20
|
+
- orbital-mechanics
|
|
21
|
+
- cesium
|
|
22
|
+
- czml
|
|
23
|
+
- visualization
|
|
24
|
+
- space
|