From b2b9aa5ea2f2af6f5276cf33180049b9371a97c5 Mon Sep 17 00:00:00 2001 From: Hari Nair Date: Tue, 26 Sep 2023 08:06:19 -0400 Subject: [PATCH] initial commit --- .gitignore | 15 + LICENSE.md | 8 + README.md | 65 + pom.xml | 160 + .../collections/AbstractIndexedIterator.java | 53 + .../collections/AbstractReadOnlyList.java | 26 + .../AbstractSequentialReadOnlyList.java | 270 + .../picante/collections/ArrayUtilities.java | 462 + .../collections/CollectionUtilities.java | 534 + .../java/picante/collections/IndexRange.java | 109 + .../picante/collections/package-info.java | 19 + ...LengthGaugedRetrievableWithExceptions.java | 83 + ...tFixedLengthRetrievableWithExceptions.java | 57 + .../data/list/AbstractGaugedRetrievable.java | 28 + ...stractGaugedRetrievableWithExceptions.java | 57 + .../AbstractRetrievableWithExceptions.java | 38 + .../java/picante/data/list/Gaugeable.java | 25 + .../java/picante/data/list/Gaugeables.java | 48 + src/main/java/picante/data/list/Gauged.java | 26 + .../picante/data/list/GaugedRetrievable.java | 13 + .../data/list/GaugedRetrievableLLE.java | 30 + .../data/list/GaugedRetrievableLLET.java | 11 + .../data/list/GaugedRetrievableLLT.java | 31 + .../java/picante/data/list/Retrievable.java | 32 + .../java/picante/data/list/Retrievables.java | 42 + src/main/java/picante/data/list/Searcher.java | 119 + .../java/picante/data/list/package-info.java | 33 + src/main/java/picante/demo/Geometry.java | 172 + src/main/java/picante/demo/MultiThreaded.java | 196 + .../picante/designpatterns/Blueprint.java | 20 + .../picante/designpatterns/Blueprints.java | 109 + .../designpatterns/BuildFailedException.java | 34 + .../java/picante/designpatterns/Builder.java | 41 + .../java/picante/designpatterns/Writable.java | 60 + .../picante/designpatterns/package-info.java | 10 + .../java/picante/exceptions/BugException.java | 33 + .../picante/exceptions/ExceptionFactory.java | 17 + .../FunctionEvaluationException.java | 76 + .../picante/exceptions/PicanteException.java | 27 + .../exceptions/PicanteRuntimeException.java | 27 + .../RuntimeInterruptedException.java | 28 + .../java/picante/exceptions/package-info.java | 16 + src/main/java/picante/junit/AssertTools.java | 359 + .../java/picante/junit/CaptureAndAnswer.java | 154 + .../java/picante/math/CoordUtilities.java | 31 + src/main/java/picante/math/PicanteMath.java | 570 + src/main/java/picante/math/Statistics.java | 729 + .../math/cones/AbstractProjection.java | 26 + .../picante/math/cones/ClosedPathPlotter.java | 58 + src/main/java/picante/math/cones/Cone.java | 52 + .../java/picante/math/cones/ConeFunction.java | 24 + src/main/java/picante/math/cones/Cones.java | 810 + .../math/cones/DerivativeProjection.java | 26 + .../picante/math/cones/EllipticalCone.java | 68 + .../picante/math/cones/GeometrySanitizer.java | 243 + .../java/picante/math/cones/JtsUtilities.java | 139 + .../ModifiedPackedCoordinateSequence.java | 210 + ...difiedPackedCoordinateSequenceFactory.java | 125 + .../java/picante/math/cones/PathPlotter.java | 35 + .../java/picante/math/cones/PathPlotters.java | 129 + .../java/picante/math/cones/PathSplitter.java | 140 + .../picante/math/cones/PolygonalCone.java | 75 + .../java/picante/math/cones/Projection.java | 173 + .../math/cones/ProjectionBuilders.java | 94 + .../picante/math/cones/RotatedProjection.java | 102 + .../math/cones/SequencesConverter.java | 89 + .../picante/math/cones/SimpleCylindrical.java | 490 + .../math/cones/SimpleCylindricalPathType.java | 350 + .../math/coords/AbstractCoordConverter.java | 69 + .../math/coords/AbstractCoordConverterIJ.java | 69 + .../picante/math/coords/AbstractState.java | 108 + .../picante/math/coords/AbstractVector.java | 111 + .../math/coords/AbstractVectorFieldValue.java | 92 + .../picante/math/coords/AbstractVectorIJ.java | 104 + .../java/picante/math/coords/AssertTools.java | 593 + .../picante/math/coords/CartesianState.java | 39 + .../picante/math/coords/CartesianStateIJ.java | 38 + .../coords/CartesianVectorFieldValue.java | 23 + .../picante/math/coords/CoordConverter.java | 53 + .../picante/math/coords/CoordConverterIJ.java | 53 + .../picante/math/coords/CoordConverters.java | 253 + .../picante/math/coords/CoordUtilities.java | 31 + .../coords/CylindricalCoordConverter.java | 91 + .../picante/math/coords/CylindricalState.java | 29 + ...ndricalToCartesianBasisTransformation.java | 66 + .../CylindricalToCartesianJacobian.java | 102 + .../math/coords/CylindricalVector.java | 51 + .../coords/CylindricalVectorFieldValue.java | 21 + .../coords/LatitudinalCoordConverter.java | 116 + .../picante/math/coords/LatitudinalState.java | 22 + .../LatitudinalToCartesianJacobian.java | 82 + .../math/coords/LatitudinalVector.java | 51 + .../math/coords/PointOnAxisException.java | 24 + .../math/coords/PolarCoordConverter.java | 86 + .../java/picante/math/coords/PolarState.java | 19 + .../math/coords/PolarToCartesianJacobian.java | 43 + .../java/picante/math/coords/PolarVector.java | 42 + .../math/coords/RaDecCoordConverter.java | 47 + .../java/picante/math/coords/RaDecVector.java | 51 + .../math/coords/SphericalCoordConverter.java | 121 + .../picante/math/coords/SphericalState.java | 29 + ...hericalToCartesianBasisTransformation.java | 60 + .../coords/SphericalToCartesianJacobian.java | 89 + .../picante/math/coords/SphericalVector.java | 51 + .../coords/SphericalVectorFieldValue.java | 21 + src/main/java/picante/math/coords/State.java | 28 + .../picante/math/coords/Transformation.java | 57 + .../picante/math/coords/TransformationIJ.java | 57 + .../picante/math/coords/VectorFieldValue.java | 19 + .../coords/VectorFieldValueConversions.java | 226 + .../picante/math/coords/package-info.java | 63 + ...tableDifferentiableUnivariateFunction.java | 39 + ...utableDifferentiableVectorIJKFunction.java | 40 + .../math/functions/ChebyshevPolynomial.java | 179 + .../picante/math/functions/Computable.java | 32 + ...tableDifferentiableUnivariateFunction.java | 53 + ...utableDifferentiableVectorIJKFunction.java | 57 + .../DifferentiableMatrixIJKFunction.java | 31 + .../DifferentiableMatrixIJKFunctions.java | 9 + ...fferentiableRotationMatrixIJKFunction.java | 31 + ...ferentiableRotationMatrixIJKFunctions.java | 10 + .../DifferentiableUnivariateFunction.java | 17 + ...UnivariateFunctionAdaptorToComputable.java | 47 + .../DifferentiableUnivariateFunctions.java | 442 + .../DifferentiableVectorIJKFunction.java | 31 + .../DifferentiableVectorIJKFunctions.java | 533 + .../java/picante/math/functions/FastMath.java | 93 + .../math/functions/GenericFunction.java | 39 + .../math/functions/HermitePolynomial.java | 280 + .../math/functions/LagrangePolynomial.java | 107 + .../math/functions/MatrixIJKFunction.java | 36 + .../picante/math/functions/Polynomial.java | 7 + .../picante/math/functions/Polynomials.java | 174 + .../functions/RotationMatrixIJKFunction.java | 34 + .../functions/RotationMatrixIJKFunctions.java | 125 + .../functions/RuntimeInterruptionChecker.java | 88 + .../math/functions/UnivariateFunction.java | 22 + .../math/functions/UnivariateFunctions.java | 448 + .../math/functions/UnivariatePolynomial.java | 46 + .../functions/UnivariateVectorFunction.java | 18 + .../math/functions/VectorIJKFunction.java | 31 + .../math/functions/VectorIJKFunctions.java | 753 + .../picante/math/functions/package-info.java | 18 + .../java/picante/math/intervals/Interval.java | 178 + .../picante/math/intervals/IntervalSet.java | 2097 + .../math/intervals/IntervalWithValue.java | 82 + .../math/intervals/UnwritableInterval.java | 495 + .../picante/math/intervals/package-info.java | 9 + src/main/java/picante/math/package-info.java | 5 + .../math/vectorspace/InternalOperations.java | 242 + .../MalformedRotationException.java | 27 + .../picante/math/vectorspace/MatrixIJ.java | 1386 + .../picante/math/vectorspace/MatrixIJK.java | 1642 + .../math/vectorspace/RotationMatrixIJK.java | 752 + .../math/vectorspace/UnwritableMatrixIJ.java | 693 + .../math/vectorspace/UnwritableMatrixIJK.java | 1166 + .../UnwritableRotationMatrixIJK.java | 332 + .../math/vectorspace/UnwritableVectorIJ.java | 292 + .../math/vectorspace/UnwritableVectorIJK.java | 375 + .../picante/math/vectorspace/VectorIJ.java | 801 + .../picante/math/vectorspace/VectorIJK.java | 1304 + .../math/vectorspace/package-info.java | 19 + .../picante/mechanics/AbstractCoverage.java | 29 + ...AbstractPositionVectorFunctionWrapper.java | 40 + ...ReversedFrameTransformFunctionWrapper.java | 28 + ...ReversedPositionVectorFunctionWrapper.java | 41 + ...ReversedStateTransformFunctionWrapper.java | 10 + ...actReversedStateVectorFunctionWrapper.java | 19 + .../AbstractStateVectorFunctionWrapper.java | 19 + .../picante/mechanics/CelestialBodies.java | 21 + .../picante/mechanics/CelestialFrames.java | 76 + src/main/java/picante/mechanics/Coverage.java | 184 + .../java/picante/mechanics/Coverages.java | 861 + .../mechanics/EphemerisAndFrameProvider.java | 5 + .../EphemerisEvaluationException.java | 34 + .../java/picante/mechanics/EphemerisID.java | 20 + .../picante/mechanics/EphemerisProvider.java | 112 + .../mechanics/EphemerisSourceIOException.java | 27 + .../EphemerisSourceLinkException.java | 28 + .../mechanics/EvaluationRuntimeException.java | 30 + .../ForwardingStateVectorFunction.java | 46 + .../mechanics/FrameEvaluationException.java | 34 + src/main/java/picante/mechanics/FrameID.java | 30 + .../java/picante/mechanics/FrameProvider.java | 98 + .../mechanics/FrameSourceIOException.java | 27 + .../mechanics/FrameSourceLinkException.java | 28 + .../mechanics/FrameTransformFunction.java | 70 + .../mechanics/FrameTransformFunctions.java | 321 + .../java/picante/mechanics/HourAngle.java | 44 + .../picante/mechanics/IntervalCoverage.java | 82 + .../mechanics/IntervalSetCoverage.java | 100 + .../java/picante/mechanics/Mechanics.java | 313 + .../mechanics/PositionVectorFunction.java | 86 + .../mechanics/PositionVectorFunctions.java | 218 + .../picante/mechanics/SourceException.java | 28 + .../picante/mechanics/SourceMetaData.java | 16 + .../picante/mechanics/SourceMetaDatas.java | 15 + .../picante/mechanics/StateTransform.java | 322 + .../mechanics/StateTransformFunction.java | 47 + .../mechanics/StateTransformFunctions.java | 482 + .../java/picante/mechanics/StateVector.java | 393 + .../mechanics/StateVectorFunction.java | 48 + .../mechanics/StateVectorFunctions.java | 374 + .../mechanics/TimeOutOfBoundsException.java | 34 + .../mechanics/UnwritableStateTransform.java | 229 + .../mechanics/UnwritableStateVector.java | 359 + .../java/picante/mechanics/package-info.java | 43 + .../providers/aberrated/Aberrated.java | 17 + .../aberrated/AberratedEphemerisProvider.java | 183 + .../AberratedPositionVectorFunction.java | 30 + .../AberratedStateVectorFunction.java | 29 + .../aberrated/AberrationCorrection.java | 123 + ...verTargetAberratedStateVectorFunction.java | 53 + .../GeometricPositionVectorFunction.java | 59 + .../GeometricStateVectorFunction.java | 33 + ...ertialLightTimePositionVectorFunction.java | 133 + .../InertialLightTimeStateVectorFunction.java | 224 + ...tellarAberratedPositionVectorFunction.java | 132 + ...alStellarAberratedStateVectorFunction.java | 475 + .../NewtonianAberratedEphemerisProvider.java | 429 + ...ertialAberratedPositionVectorFunction.java | 102 + ...nInertialAberratedStateVectorFunction.java | 157 + .../providers/aberrated/package-info.java | 10 + .../providers/lockable/LockSupplier.java | 21 + .../providers/lockable/LockType.java | 32 + .../providers/lockable/Lockable.java | 14 + ...kableEphemerisLinkEvaluationException.java | 35 + .../lockable/LockableEphemerisProvider.java | 417 + .../LockableFrameLinkEvaluationException.java | 40 + .../lockable/LockableFrameProvider.java | 350 + .../LockableFrameTransformFunction.java | 144 + .../LockablePositionVectorFunction.java | 307 + .../LockableStateTransformFunction.java | 93 + .../lockable/LockableStateVectorFunction.java | 236 + ...LockingDelegateFrameTransformFunction.java | 115 + ...LockingDelegatePositionVectorFunction.java | 123 + ...LockingDelegateStateTransformFunction.java | 33 + .../LockingDelegateStateVectorFunction.java | 33 + .../providers/lockable/package-info.java | 9 + .../mechanics/providers/package-info.java | 4 + .../providers/reference/ChainLinkEngine.java | 364 + ...renceEphemerisLinkEvaluationException.java | 35 + .../reference/ReferenceEphemerisProvider.java | 407 + ...ReferenceFrameLinkEvaluationException.java | 40 + .../reference/ReferenceFrameProvider.java | 346 + .../ReferenceFrameTransformFunction.java | 151 + .../ReferencePositionVectorFunction.java | 417 + .../ReferenceStateTransformFunction.java | 89 + .../ReferenceStateVectorFunction.java | 277 + .../providers/reference/package-info.java | 8 + .../mechanics/rotations/AxisAndAngle.java | 308 + .../rotations/DifferentiatedEulerAngles.java | 1611 + .../rotations/DifferentiatedRotation.java | 27 + .../rotations/DifferentiatedRotations.java | 76 + .../mechanics/rotations/EulerAngles.java | 1405 + .../mechanics/rotations/MatrixWrapper.java | 102 + .../PrivilegedRotationMatrixIJK.java | 91 + .../mechanics/rotations/Quaternion.java | 1043 + .../picante/mechanics/rotations/Rotation.java | 19 + .../mechanics/rotations/Rotations.java | 281 + .../UnwritableDifferentiatedRotation.java | 28 + .../rotations/UnwritableRotation.java | 29 + .../mechanics/rotations/WrapperWithRate.java | 318 + .../mechanics/rotations/package-info.java | 42 + .../AbstractFrameTransformFunction.java | 52 + .../AbstractPositionVectorFunction.java | 56 + .../mechanics/utilities/ChainLinkEngine.java | 372 + .../utilities/FixedOffsetFrameFunction.java | 109 + .../FixedOffsetPositionFunction.java | 127 + .../InverseFrameTransformFunction.java | 32 + .../ScaledPositionVectorFunction.java | 50 + .../utilities/ScaledStateVectorFunction.java | 32 + .../utilities/SimpleEphemerisID.java | 63 + .../mechanics/utilities/SimpleFrameID.java | 95 + .../mechanics/utilities/package-info.java | 4 + .../picante/roots/BooleanStateFinder.java | 236 + .../picante/roots/BooleanStateSolver.java | 78 + .../picante/roots/BrentSolverSupplier.java | 40 + src/main/java/picante/roots/RootFinder.java | 1067 + src/main/java/picante/roots/Stepper.java | 21 + src/main/java/picante/roots/Steppers.java | 31 + .../roots/UnivariateBooleanFunction.java | 7 + .../roots/UnivariateBooleanFunctions.java | 207 + src/main/java/picante/roots/package-info.java | 18 + .../spice/BindingConflictException.java | 114 + .../spice/EphemerisIDBindingManager.java | 227 + .../picante/spice/FrameIDBindingManager.java | 299 + .../GeneralAberratedEphemerisProvider.java | 26 + .../java/picante/spice/KernelManager.java | 152 + .../java/picante/spice/MetakernelReader.java | 254 + .../java/picante/spice/NameIDBindingList.java | 155 + .../java/picante/spice/SpiceEnvironment.java | 247 + .../spice/SpiceEnvironmentBuilder.java | 543 + .../java/picante/spice/SpiceMetaData.java | 10 + src/main/java/picante/spice/Utilities.java | 116 + .../AdapterInstantiationException.java | 32 + .../spice/adapters/BinaryPCKAdapter.java | 32 + .../adapters/BinaryPCKSegmentAdapter.java | 63 + .../picante/spice/adapters/CKAdapter.java | 45 + .../picante/spice/adapters/CKMetaData.java | 29 + .../spice/adapters/CKSegmentAdapter.java | 89 + .../adapters/CKSegmentWithAVAdapter.java | 75 + .../adapters/EphemerisSourceFactory.java | 135 + .../picante/spice/adapters/FKAdapter.java | 24 + .../picante/spice/adapters/FinalKeyMap.java | 194 + .../spice/adapters/FrameSourceFactory.java | 441 + .../spice/adapters/InertialFrameAdapter.java | 55 + .../spice/adapters/KernelPoolMetaData.java | 19 + .../picante/spice/adapters/PCKAdapter.java | 65 + .../picante/spice/adapters/PCKMetaData.java | 12 + .../picante/spice/adapters/SPKAdapter.java | 44 + .../picante/spice/adapters/SPKMetaData.java | 28 + .../spice/adapters/SPKSegmentAdapter.java | 85 + .../picante/spice/adapters/SclkRegistry.java | 157 + .../spice/adapters/SpiceClassedFrameID.java | 88 + .../spice/adapters/SpiceEphemerisID.java | 87 + .../picante/spice/adapters/SpiceFrameID.java | 104 + .../adapters/TKFrameFunctionAdapter.java | 59 + .../picante/spice/adapters/TdbCoverage.java | 160 + .../spice/adapters/TextPCKAdapter.java | 26 + .../picante/spice/adapters/package-info.java | 5 + src/main/java/picante/spice/daf/DAF.java | 97 + .../picante/spice/daf/DAFAccessException.java | 31 + .../java/picante/spice/daf/DAFFactory.java | 240 + .../java/picante/spice/daf/DAFSegment.java | 110 + .../java/picante/spice/daf/DAFSupport.java | 331 + .../spice/daf/DAFValidationFailure.java | 30 + .../spice/daf/bytebuffer/ByteBufferDAF.java | 313 + .../daf/bytebuffer/ByteBufferDAFSegment.java | 96 + .../spice/daf/bytebuffer/package-info.java | 8 + .../spice/daf/content/CKSegmentFactory.java | 209 + .../spice/daf/content/DAFBackedCKContent.java | 56 + .../daf/content/DAFBackedPCKContent.java | 57 + .../daf/content/DAFBackedSPKContent.java | 56 + .../daf/content/DAFBasedKernelContent.java | 175 + .../spice/daf/content/DAFContentFactory.java | 35 + .../spice/daf/content/DAFContentServices.java | 435 + .../spice/daf/content/DAFMetaData.java | 64 + .../spice/daf/content/PCKSegmentFactory.java | 74 + .../spice/daf/content/SPKSegmentFactory.java | 302 + .../spice/daf/content/package-info.java | 8 + .../recordtables/DAFCKType2RecordTable.java | 43 + .../DAFChebyshevTripletRecordList.java | 56 + .../DAFQuaternionAVRecordTable.java | 59 + .../DAFQuaternionRecordTable.java | 55 + .../recordtables/DAFRecordRetriever.java | 77 + .../DAFStateVectorRecordList.java | 44 + .../DAFStateVectorRecordTable.java | 43 + .../recordtables/DAFTimeListTable.java | 46 + .../recordtables/DAFType1SPKRecordTable.java | 51 + .../recordtables/DAFType3SPKRecordList.java | 59 + .../content/recordtables/package-info.java | 10 + .../java/picante/spice/daf/package-info.java | 12 + src/main/java/picante/spice/fov/FOV.java | 93 + .../java/picante/spice/fov/FOVFactory.java | 324 + src/main/java/picante/spice/fov/FOVSpice.java | 101 + .../java/picante/spice/fov/package-info.java | 4 + .../java/picante/spice/jspice/Parameter.java | 200 + .../java/picante/spice/jspice/Spicelib.java | 6129 ++ .../spice/kernel/ByteBufferReader.java | 43 + .../spice/kernel/ForgivingKernelLoader.java | 41 + .../java/picante/spice/kernel/Kernel.java | 74 + .../kernel/KernelInstantiationException.java | 33 + .../picante/spice/kernel/KernelLoader.java | 301 + .../java/picante/spice/kernel/KernelType.java | 13 + .../spice/kernel/SegmentedKernelContent.java | 55 + .../spice/kernel/ck/AbstractCKSegment.java | 76 + src/main/java/picante/spice/kernel/ck/CK.java | 53 + .../picante/spice/kernel/ck/CKCoverage.java | 15 + .../kernel/ck/CKEvaluationException.java | 35 + .../kernel/ck/CKInstantiationException.java | 31 + .../picante/spice/kernel/ck/CKSegment.java | 79 + .../spice/kernel/ck/CKSegmentWithAV.java | 22 + .../java/picante/spice/kernel/ck/CKType2.java | 286 + .../spice/kernel/ck/CKType2Record.java | 33 + .../java/picante/spice/kernel/ck/CKType3.java | 262 + .../spice/kernel/ck/CKType3WithAV.java | 269 + .../kernel/ck/IntervalStartsCKCoverage.java | 262 + .../spice/kernel/ck/Type2Interpolator.java | 55 + .../spice/kernel/ck/Type3Interpolator.java | 95 + .../picante/spice/kernel/ck/package-info.java | 9 + .../picante/spice/kernel/package-info.java | 4 + .../spice/kernel/pck/AbstractPCKSegment.java | 59 + .../pck/BinaryPCKInstantiationException.java | 31 + .../java/picante/spice/kernel/pck/PCK.java | 54 + .../picante/spice/kernel/pck/PCKSegment.java | 71 + .../picante/spice/kernel/pck/PCKType2.java | 110 + .../spice/kernel/pck/PCKType2Record.java | 79 + .../spice/kernel/pck/package-info.java | 8 + .../spice/kernel/spk/AbstractSPKSegment.java | 65 + .../spice/kernel/spk/AbstractSPKType.java | 131 + .../spice/kernel/spk/EquinoctialElements.java | 319 + .../spice/kernel/spk/FirstIndexRetriever.java | 5 + .../kernel/spk/FirstIndexRetrieverList.java | 65 + .../kernel/spk/FirstIndexRetrieverTable.java | 81 + .../java/picante/spice/kernel/spk/SPK.java | 53 + .../kernel/spk/SPKEvaluationException.java | 29 + .../kernel/spk/SPKInstantiationException.java | 29 + .../picante/spice/kernel/spk/SPKSegment.java | 79 + .../picante/spice/kernel/spk/SPKType1.java | 64 + .../picante/spice/kernel/spk/SPKType12.java | 99 + .../picante/spice/kernel/spk/SPKType13.java | 96 + .../picante/spice/kernel/spk/SPKType17.java | 38 + .../spice/kernel/spk/SPKType1Record.java | 223 + .../picante/spice/kernel/spk/SPKType2.java | 86 + .../spice/kernel/spk/SPKType2Record.java | 131 + .../picante/spice/kernel/spk/SPKType3.java | 84 + .../spice/kernel/spk/SPKType3Record.java | 178 + .../picante/spice/kernel/spk/SPKType5.java | 86 + .../spice/kernel/spk/SPKType5Evaluator.java | 51 + .../picante/spice/kernel/spk/SPKType8.java | 85 + .../picante/spice/kernel/spk/SPKType9.java | 80 + .../StateVectorDirectLookupRecordTable.java | 68 + .../spice/kernel/spk/StumpffFunctions.java | 107 + .../spice/kernel/spk/TwoBodyPropagator.java | 252 + .../spice/kernel/spk/package-info.java | 8 + .../picante/spice/kernel/tk/TextKernel.java | 65 + .../tk/fk/FKInstantiationException.java | 26 + .../picante/spice/kernel/tk/fk/FrameInfo.java | 90 + .../spice/kernel/tk/fk/FrameKernel.java | 64 + .../picante/spice/kernel/tk/fk/FrameType.java | 32 + .../spice/kernel/tk/fk/TKFrameFunction.java | 32 + .../spice/kernel/tk/fk/dynamic/Axis.java | 72 + .../dynamic/DefinableStateVectorFunction.java | 12 + .../kernel/tk/fk/dynamic/Defineable.java | 13 + ...ynamicAberratedConstantVectorFunction.java | 80 + .../DynamicConstantVectorFunction.java | 64 + .../fk/dynamic/DynamicEulerFrameFunction.java | 129 + .../DynamicFrameDefinitionException.java | 27 + .../tk/fk/dynamic/DynamicFrameFunction.java | 17 + .../dynamic/DynamicFrozenFrameFunction.java | 59 + .../dynamic/DynamicInertialFrameFunction.java | 46 + .../DynamicMeanEclipticFrameFunction.java | 83 + .../DynamicMeanEquatorFrameFunction.java | 69 + .../DynamicPositionVectorFunction.java | 67 + .../DynamicStateTransformFunction.java | 70 + .../DynamicTrueEquatorFrameFunction.java | 73 + .../DynamicTwoVectorFrameFunction.java | 87 + .../DynamicVelocityVectorFunction.java | 95 + .../kernel/tk/fk/dynamic/IDUtilities.java | 26 + .../kernel/tk/fk/dynamic/TwoVectorMatrix.java | 214 + .../spice/kernel/tk/fk/package-info.java | 5 + .../java/picante/spice/kernel/tk/lsk/LSK.java | 90 + .../tk/lsk/LSKInstantiationException.java | 32 + .../spice/kernel/tk/lsk/TDTProvider.java | 214 + .../kernel/tk/lsk/UniformTimeProvider.java | 31 + .../spice/kernel/tk/lsk/package-info.java | 5 + .../picante/spice/kernel/tk/package-info.java | 5 + .../kernel/tk/pck/JEDOffsetConverter.java | 23 + .../spice/kernel/tk/pck/PCKFrameFunction.java | 274 + .../tk/pck/PCKWithNutationFrameFunction.java | 138 + .../picante/spice/kernel/tk/pck/TextPCK.java | 26 + .../tk/pck/TextPCKInstantiationException.java | 26 + .../spice/kernel/tk/pck/TimeConverter.java | 25 + .../kernel/tk/sclk/EncodedSCLKConverter.java | 55 + .../picante/spice/kernel/tk/sclk/SCLK.java | 263 + .../tk/sclk/SCLKEvaluationException.java | 34 + .../tk/sclk/SCLKInstantiationException.java | 35 + .../spice/kernel/tk/sclk/SCLKKernel.java | 284 + .../spice/kernel/tk/sclk/SCLKType1.java | 230 + .../spice/kernel/tk/sclk/SCLKType1Record.java | 125 + .../tk/sclk/SCLKType1TickConverter.java | 235 + .../spice/kernel/tk/sclk/TickConverter.java | 45 + .../spice/kernel/tk/sclk/package-info.java | 15 + .../kernel/utilities/ChebyshevTriplet.java | 36 + .../utilities/DirectRecordIndexComputer.java | 64 + .../spice/kernel/utilities/package-info.java | 6 + .../spice/kernelpool/BasicKernelPool.java | 431 + .../picante/spice/kernelpool/KernelPool.java | 243 + .../kernelpool/KernelPoolChangeEvent.java | 121 + .../KernelPoolChangeEventHandler.java | 174 + .../kernelpool/KernelPoolChangeListener.java | 23 + .../spice/kernelpool/KernelPoolEventType.java | 34 + .../kernelpool/KernelPoolFormatException.java | 17 + .../spice/kernelpool/KernelPoolValues.java | 63 + .../kernelpool/UnwritableKernelPool.java | 294 + .../spice/kernelpool/content/AngleUnits.java | 79 + .../DynamicConstantVectorProvider.java | 110 + .../content/DynamicFrameProvider.java | 229 + .../kernelpool/content/DynamicUnits.java | 49 + .../content/DynamicVectorProvider.java | 144 + .../content/EulerAnglesFactory.java | 170 + .../spice/kernelpool/content/FKFactory.java | 483 + .../content/KernelPoolContentFactory.java | 107 + .../KernelPoolValidatingRetriever.java | 214 + .../KernelPoolValidationException.java | 33 + .../kernelpool/content/KeywordFormatter.java | 21 + .../spice/kernelpool/content/LSKFactory.java | 77 + .../spice/kernelpool/content/PCKFactory.java | 357 + .../kernelpool/content/ParsingUtilities.java | 103 + .../spice/kernelpool/content/SCLKFactory.java | 130 + .../content/SCLKPartitionTable.java | 89 + .../kernelpool/content/SCLKType1Creator.java | 159 + .../SCLKType1ListBasedRecordTable.java | 67 + .../content/SpiceAberrationCorrection.java | 65 + .../kernelpool/content/SpiceInfoHolder.java | 40 + .../kernelpool/content/TKFrameProviders.java | 381 + ...xtKernelContentInstantiationException.java | 32 + .../kernelpool/content/package-info.java | 15 + .../spice/kernelpool/package-info.java | 60 + .../kernelpool/parser/ParseException.java | 195 + .../spice/kernelpool/parser/Parser.java | 494 + .../kernelpool/parser/ParserConstants.java | 96 + .../kernelpool/parser/ParserTokenManager.java | 1536 + .../kernelpool/parser/SimpleCharStream.java | 472 + .../kernelpool/parser/TextKernelParser.java | 253 + .../spice/kernelpool/parser/Token.java | 132 + .../kernelpool/parser/TokenMgrError.java | 148 + .../spice/kernelpool/parser/package-info.java | 47 + .../parser/time/ParseException.java | 195 + .../spice/kernelpool/parser/time/Parser.java | 4797 ++ .../parser/time/ParserConstants.java | 142 + .../parser/time/ParserTokenManager.java | 3486 + .../parser/time/SimpleCharStream.java | 472 + .../spice/kernelpool/parser/time/TParser.java | 5550 ++ .../parser/time/TParserConstants.java | 151 + .../parser/time/TParserTokenManager.java | 3633 + .../kernelpool/parser/time/TimeParser.java | 196 + .../spice/kernelpool/parser/time/Token.java | 132 + .../kernelpool/parser/time/TokenMgrError.java | 148 + .../kernelpool/parser/time/package-info.java | 33 + src/main/java/picante/spice/package-info.java | 66 + .../provided/CanonicalizedStringKeyMap.java | 46 + .../provided/CanonicalizedStringValueMap.java | 46 + .../spice/provided/EphemerisNames.java | 1310 + .../picante/spice/provided/FrameNames.java | 353 + .../spice/provided/InertialFrames.java | 284 + .../picante/spice/provided/package-info.java | 4 + .../surfaces/CachedSurfaceNormalComputer.java | 49 + src/main/java/picante/surfaces/Circle.java | 218 + src/main/java/picante/surfaces/Cylinder.java | 46 + src/main/java/picante/surfaces/Ellipse.java | 545 + src/main/java/picante/surfaces/Ellipsoid.java | 806 + .../EllipsoidalIntersectionComputer.java | 152 + .../surfaces/EllipsoidalLimbComputer.java | 79 + .../EllipsoidalPlaneIntersectionComputer.java | 129 + .../EllipsoidalSurfaceNormalComputer.java | 31 + .../surfaces/NoIntersectionException.java | 35 + .../java/picante/surfaces/OffsetSurface.java | 43 + src/main/java/picante/surfaces/Plane.java | 188 + .../surfaces/PlaneIntersectionComputer.java | 226 + .../java/picante/surfaces/RotatedSurface.java | 36 + src/main/java/picante/surfaces/Sphere.java | 26 + .../SphericalSurfaceNormalComputer.java | 21 + src/main/java/picante/surfaces/Surface.java | 6 + .../surfaces/SurfaceIntersectionComputer.java | 21 + .../surfaces/SurfaceNormalComputer.java | 40 + .../picante/surfaces/SurfaceUtilities.java | 221 + src/main/java/picante/surfaces/Surfaces.java | 44 + .../picante/surfaces/UnwritableEllipse.java | 471 + .../picante/surfaces/UnwritablePlane.java | 598 + .../java/picante/surfaces/package-info.java | 5 + src/main/java/picante/time/Calendarizer.java | 115 + src/main/java/picante/time/DaySecond.java | 23 + .../picante/time/DelimitedYDHMSFormatter.java | 41 + .../time/DelimitedYMDHMSFormatter.java | 44 + .../java/picante/time/FunctionOfTime.java | 18 + .../picante/time/FunctionOfTimeFactory.java | 23 + src/main/java/picante/time/GPSTimeSystem.java | 56 + .../picante/time/IDelimitedTimeFormatter.java | 18 + .../java/picante/time/ISOStringParser.java | 129 + .../java/picante/time/ITSRangeSource.java | 5 + .../java/picante/time/ITimeFormatter.java | 15 + .../java/picante/time/ITimeStringParser.java | 7 + .../time/InvalidUTCStringException.java | 11 + src/main/java/picante/time/JulianDate.java | 82 + .../java/picante/time/LeapsecondEntry.java | 31 + .../java/picante/time/SCLKTimeSystem.java | 68 + src/main/java/picante/time/TAITimeSystem.java | 50 + src/main/java/picante/time/TDBQuadTime.java | 81 + .../java/picante/time/TDBQuadTimeSystem.java | 42 + src/main/java/picante/time/TDBTimeSystem.java | 100 + src/main/java/picante/time/TDTTimeSystem.java | 60 + src/main/java/picante/time/TSEpoch.java | 151 + src/main/java/picante/time/TSId.java | 82 + src/main/java/picante/time/TSManager.java | 137 + src/main/java/picante/time/TSRange.java | 375 + .../picante/time/TSRangeSerializable.java | 44 + src/main/java/picante/time/TimeAdapter.java | 316 + .../java/picante/time/TimeConversion.java | 577 + src/main/java/picante/time/TimeSystem.java | 524 + .../picante/time/TimeSystemConverter.java | 529 + .../picante/time/TimeSystemTransform.java | 489 + src/main/java/picante/time/TimeSystems.java | 309 + .../java/picante/time/TimeValueParser.java | 45 + src/main/java/picante/time/UTCEpoch.java | 641 + src/main/java/picante/time/UTCFactory.java | 565 + src/main/java/picante/time/UTCOutputType.java | 112 + .../java/picante/time/UTCStringParser.java | 94 + src/main/java/picante/time/UTCTimeSystem.java | 55 + .../picante/time/UTCYearFracFormatter.java | 48 + .../time/UnknownTimeSystemException.java | 19 + src/main/java/picante/time/package-info.java | 1 + .../timeline/AbstractStateTimeline.java | 309 + src/main/java/picante/timeline/Direction.java | 18 + .../java/picante/timeline/StateTimeline.java | 1534 + .../timeline/StateTimelineCollection.java | 182 + .../timeline/StateTimelineIterator.java | 70 + .../java/picante/timeline/package-info.java | 5 + .../units/FundamentalPhysicalConstants.java | 225 + .../units/LocalTimeToRadiansConversions.java | 63 + src/main/java/picante/units/package-info.java | 23 + .../java/picante/utilities/InitSpice.java | 87 + .../java/picante/utilities/SPICEUtils.java | 116 + .../projections/doc-files/dsmap_polar.cat | 89 + .../doc-files/usgs_snyder_brownbook.pdf | 67201 ++++++++++++++++ .../math/coords/doc-files/cartCoord.png | Bin 0 -> 5428 bytes .../math/coords/doc-files/cartToCylCoord.png | Bin 0 -> 12666 bytes .../math/coords/doc-files/cartToCylVect.png | Bin 0 -> 17246 bytes .../math/coords/doc-files/cartToSphCoord.png | Bin 0 -> 17678 bytes .../math/coords/doc-files/cartToSphVect.png | Bin 0 -> 25784 bytes .../math/coords/doc-files/cartVect.png | Bin 0 -> 6824 bytes .../math/coords/doc-files/cylCoord.png | Bin 0 -> 5457 bytes .../math/coords/doc-files/cylToCartCoord.png | Bin 0 -> 10993 bytes .../math/coords/doc-files/cylToCartVect.png | Bin 0 -> 17124 bytes .../picante/math/coords/doc-files/cylVect.png | Bin 0 -> 7180 bytes .../math/coords/doc-files/sphCoord.png | Bin 0 -> 5508 bytes .../math/coords/doc-files/sphToCartCoord.png | Bin 0 -> 12834 bytes .../math/coords/doc-files/sphToCartVect.png | Bin 0 -> 26629 bytes .../picante/math/coords/doc-files/sphVect.png | Bin 0 -> 7156 bytes .../picante/math/doc-files/statistics.pdf | Bin 0 -> 2868749 bytes .../doc-files/generalLegendreEquation.svg | 117 + .../legendrepoly/doc-files/plm_ident_1.svg | 58 + .../legendrepoly/doc-files/plm_ident_2.svg | 43 + .../legendrepoly/doc-files/plm_ident_3.svg | 72 + .../legendrepoly/doc-files/sphereHarm.svg | 103 + .../legendrepoly/doc-files/sphereHarm_2.svg | 53 + .../doc-files/on_averaging_rotations.pdf | Bin 0 -> 168698 bytes .../javadoc/picante/progress/package.html | 442 + .../picante/spice/kernelpool/parser/Parser.jj | 1 + .../spice/kernelpool/parser/time/Parser.jj | 2559 + .../spice/kernelpool/parser/time/TParser.jj | 2934 + .../picante/time/parameters.properties | 7 + .../AbstractIndexedIteratorTest.java | 50 + .../collections/ArrayUtilitiesTest.java | 473 + .../collections/CollectionUtilitiesTest.java | 376 + ...thGaugedRetrievableWithExceptionsTest.java | 129 + ...edLengthRetrievableWithExceptionsTest.java | 62 + ...ctGaugedRetrievableWithExceptionsTest.java | 106 + ...AbstractRetrievableWithExceptionsTest.java | 74 + .../picante/data/list/GaugeablesTest.java | 32 + .../java/picante/data/list/SearcherTest.java | 96 + src/test/java/picante/demo/TestBODVCD.java | 53 + src/test/java/picante/demo/TestCKCOV.java | 91 + src/test/java/picante/demo/TestCKGPAV.java | 158 + src/test/java/picante/demo/TestFOVRAY.java | 102 + src/test/java/picante/demo/TestGETFOV.java | 50 + src/test/java/picante/demo/TestGFDIST.java | 120 + src/test/java/picante/demo/TestGFTFOV.java | 183 + src/test/java/picante/demo/TestILUMIN.java | 128 + src/test/java/picante/demo/TestLATREC.java | 96 + src/test/java/picante/demo/TestOCCULT.java | 136 + src/test/java/picante/demo/TestPXFORM.java | 78 + src/test/java/picante/demo/TestSCE2C.java | 52 + src/test/java/picante/demo/TestSCE2S.java | 47 + src/test/java/picante/demo/TestSCE2T.java | 48 + src/test/java/picante/demo/TestSCENCD.java | 64 + src/test/java/picante/demo/TestSCS2E.java | 54 + src/test/java/picante/demo/TestSCT2E.java | 46 + src/test/java/picante/demo/TestSINCPT.java | 166 + src/test/java/picante/demo/TestSPKCOV.java | 89 + src/test/java/picante/demo/TestSPKEZR.java | 143 + src/test/java/picante/demo/TestSTR2ET.java | 339 + src/test/java/picante/demo/TestSXFORM.java | 200 + src/test/java/picante/demo/TestTPARSE.java | 174 + .../designpatterns/BlueprintsTest.java | 68 + src/test/java/picante/math/EstimatorTest.java | 61 + .../math/PicanteMathPerformanceTest.java | 1442 + .../java/picante/math/PicanteMathTest.java | 717 + .../picante/math/StatisticsBuilderTest.java | 192 + .../java/picante/math/StatisticsTest.java | 72 + src/test/java/picante/math/TrackerTest.java | 199 + .../picante/math/cones/BasicPathIterator.java | 70 + .../math/cones/GeometrySanitizerTest.java | 246 + .../picante/math/cones/PathSplitterTest.java | 221 + .../math/cones/SequencesConverterTest.java | 116 + .../java/picante/math/cones/TestCones.java | 122 + .../math/coords/CartesianStateIJTest.java | 80 + .../math/coords/CartesianStateTest.java | 161 + .../coords/CartesianVectorFieldValueTest.java | 165 + .../CoordConvertersRandomStatesTest.java | 554 + .../math/coords/CoordConvertersTest.java | 538 + .../math/coords/CoordUtilitiesTest.java | 63 + .../coords/CylindricalCoordConverterTest.java | 269 + .../math/coords/CylindricalStateTest.java | 73 + .../CylindricalToCartesianJacobianTest.java | 125 + .../math/coords/CylindricalVectorTest.java | 137 + .../coords/LatitudinalCoordConverterTest.java | 268 + .../math/coords/LatitudinalStateTest.java | 75 + .../math/coords/LatitudinalVectorTest.java | 102 + .../math/coords/PolarCoordConverterTest.java | 126 + .../picante/math/coords/PolarStateTest.java | 74 + .../picante/math/coords/PolarVectorTest.java | 114 + .../math/coords/RaDecCoordConverterTest.java | 163 + .../picante/math/coords/RaDecVectorTest.java | 107 + .../coords/SphericalCoordConverterTest.java | 266 + .../math/coords/SphericalStateTest.java | 75 + .../SphericalToCartesianJacobianTest.java | 127 + .../math/coords/SphericalVectorTest.java | 104 + .../VectorFieldValueConversionsTest.java | 154 + .../functions/ChebyshevPolynomialTest.java | 296 + ...DifferentiableUnivariateFunctionsTest.java | 262 + .../math/functions/HermitePolynomialTest.java | 302 + .../functions/LagrangePolynomialTest.java | 194 + .../math/functions/PolynomialsTest.java | 63 + .../functions/UnivariateFunctionsTest.java | 206 + .../functions/UnivariatePolynomialTest.java | 33 + .../intervals/IntervalSetBuilderTest.java | 1017 + .../math/intervals/IntervalSetTest.java | 1237 + .../picante/math/intervals/IntervalTest.java | 152 + .../math/intervals/IntervalWithValueTest.java | 30 + .../intervals/UnwritableIntervalTest.java | 1351 + .../vectorspace/InternalOperationsTest.java | 146 + .../math/vectorspace/MatrixIJKTest.java | 1258 + .../math/vectorspace/MatrixIJTest.java | 1172 + .../vectorspace/RotationMatrixIJKTest.java | 777 + .../vectorspace/UnwritableMatrixIJKTest.java | 635 + .../vectorspace/UnwritableMatrixIJTest.java | 549 + .../UnwritableRotationMatrixIJKTest.java | 288 + .../vectorspace/UnwritableVectorIJKTest.java | 372 + .../vectorspace/UnwritableVectorIJTest.java | 259 + .../math/vectorspace/VectorIJKTest.java | 1255 + .../math/vectorspace/VectorIJTest.java | 746 + ...ractPositionVectorFunctionWrapperTest.java | 73 + ...rsedFrameTransformFunctionWrapperTest.java | 63 + ...rsedPositionVectorFunctionWrapperTest.java | 47 + ...rsedStateTransformFunctionWrapperTest.java | 38 + ...eversedStateVectorFunctionWrapperTest.java | 38 + ...bstractStateVectorFunctionWrapperTest.java | 38 + .../mechanics/CelestialFramesTest.java | 34 + .../ConstantFrameTransformFunction.java | 55 + .../ConstantPositionVectorFunction.java | 60 + .../ConstantStateTransformFunction.java | 28 + .../ConstantStateVectorFunction.java | 27 + .../java/picante/mechanics/CoveragesTest.java | 944 + .../picante/mechanics/EphemerisCodePair.java | 55 + .../mechanics/EphemerisProviderTest.java | 1685 + .../picante/mechanics/EphemerisTestCodes.java | 15 + .../java/picante/mechanics/FrameCodePair.java | 54 + .../picante/mechanics/FrameProviderTest.java | 1607 + .../picante/mechanics/FrameTestCodes.java | 19 + .../FrameTransformFunctionsTest.java | 496 + .../java/picante/mechanics/HourAngleTest.java | 40 + .../mechanics/IntervalCoverageTest.java | 158 + .../mechanics/IntervalSetCoverageTest.java | 133 + .../java/picante/mechanics/MechanicsTest.java | 62 + .../PositionVectorFunctionsTest.java | 255 + .../StateTransformFunctionsTest.java | 816 + .../picante/mechanics/StateTransformTest.java | 429 + .../mechanics/StateVectorFunctionsTest.java | 549 + .../picante/mechanics/StateVectorTest.java | 457 + .../UnwritableStateTransformTest.java | 252 + .../mechanics/UnwritableStateVectorTest.java | 218 + ...ellarAberratedStateVectorFunctionTest.java | 77 + ...wtonianAberratedEphemerisProviderTest.java | 1520 + .../LockableEphemerisProviderFrameTest.java | 20 + .../LockableEphemerisProviderTest.java | 20 + .../lockable/LockableFrameProviderTest.java | 59 + .../reference/ChainLinkEngineTest.java | 453 + .../providers/reference/EngineTestCodes.java | 142 + .../ReferenceEphemerisProviderFrameTest.java | 19 + .../ReferenceEphemerisProviderTest.java | 20 + .../reference/ReferenceFrameProviderTest.java | 59 + .../mechanics/rotations/AxisAndAngleTest.java | 364 + .../DifferentiatedEulerAnglesABATest.java | 162 + .../DifferentiatedEulerAnglesABCLeftTest.java | 134 + ...DifferentiatedEulerAnglesABCRightTest.java | 133 + .../DifferentiatedEulerAnglesTest.java | 826 + .../rotations/DifferentiatedRotationTest.java | 90 + .../DifferentiatedRotationsTest.java | 75 + .../rotations/EulerAnglesABATest.java | 116 + .../rotations/EulerAnglesABCLeftTest.java | 94 + .../rotations/EulerAnglesABCRightTest.java | 94 + .../rotations/EulerAnglesAxisTest.java | 141 + .../mechanics/rotations/EulerAnglesTest.java | 733 + .../rotations/MatrixWrapperTest.java | 102 + .../mechanics/rotations/QuaternionTest.java | 367 + .../mechanics/rotations/RotationTest.java | 59 + .../mechanics/rotations/RotationsTest.java | 145 + .../mechanics/rotations/WrapperRateTest.java | 198 + .../AbstractFrameTransformFunctionTest.java | 46 + .../AbstractPositionVectorFunctionTest.java | 53 + .../utilities/ChainLinkEngineTest.java | 453 + .../mechanics/utilities/EngineTestCodes.java | 142 + .../FixedOffsetFrameFunctionTest.java | 93 + .../FixedOffsetPositionFunctionTest.java | 103 + .../ScaledPositionVectorFunctionTest.java | 134 + .../ScaledStateVectorFunctionTest.java | 102 + .../utilities/SimpleEphemerisIDTest.java | 55 + .../utilities/SimpleFrameIDTest.java | 77 + .../spice/EphemerisIDBindingManagerTest.java | 297 + .../spice/FrameIDBindingManagerTest.java | 584 + .../java/picante/spice/KernelManagerTest.java | 167 + .../picante/spice/NameIDBindingListTest.java | 183 + .../spice/SpiceEnvironmentBuilderTest.java | 109 + .../picante/spice/SpiceEnvironmentTest.java | 35 + .../java/picante/spice/UtilitiesTest.java | 38 + .../spice/adapters/BinaryPCKAdapterTest.java | 73 + .../adapters/BinaryPCKSegmentAdapterTest.java | 110 + .../picante/spice/adapters/CKAdapterTest.java | 71 + .../spice/adapters/CKMetaDataTest.java | 36 + .../spice/adapters/CKSegmentAdapterTest.java | 204 + .../adapters/CKSegmentWithAVAdapterTest.java | 196 + .../adapters/EphemerisSourceFactoryTest.java | 204 + .../picante/spice/adapters/FKAdapterTest.java | 30 + .../spice/adapters/FinalKeyMapTest.java | 309 + .../adapters/FrameSourceFactoryTest.java | 157 + .../adapters/InertialFrameAdapterTest.java | 74 + .../adapters/KernelPoolMetaDataTest.java | 27 + .../spice/adapters/PCKAdapterTest.java | 90 + .../spice/adapters/PCKMetaDataTest.java | 29 + .../spice/adapters/SPKAdapterTest.java | 72 + .../spice/adapters/SPKMetaDataTest.java | 35 + .../spice/adapters/SPKSegmentAdapterTest.java | 137 + .../spice/adapters/SclkRegistryTest.java | 185 + .../adapters/SpiceClassedFrameIDTest.java | 100 + .../spice/adapters/SpiceEphemerisIDTest.java | 34 + .../spice/adapters/SpiceFrameIDTest.java | 118 + .../adapters/TKFrameFunctionAdapterTest.java | 45 + .../spice/adapters/TdbCoverageTest.java | 226 + .../spice/adapters/TextPCKAdapterTest.java | 71 + .../picante/spice/daf/DAFFactoryTest.java | 53 + .../picante/spice/daf/DAFSupportTest.java | 221 + .../bytebuffer/ByteBufferDAFSegmentTest.java | 135 + .../daf/bytebuffer/ByteBufferDAFTest.java | 569 + .../daf/content/CKSegmentFactoryTest.java | 25 + .../daf/content/DAFBackedCKContentTest.java | 115 + .../daf/content/DAFBackedSPKContentTest.java | 115 + .../content/DAFBasedKernelContentTest.java | 216 + .../daf/content/DAFContentServicesTest.java | 209 + .../spice/daf/content/DAFMetaDataTest.java | 44 + .../daf/content/PCKSegmentFactoryTest.java | 18 + .../daf/content/SPKSegmentFactoryTest.java | 107 + .../content/recordtables/ArrayDAFSegment.java | 72 + .../DAFChebyshevTripletRecordListTest.java | 112 + .../DAFQuaternionAVRecordTableTest.java | 162 + .../DAFQuaternionRecordTableTest.java | 134 + .../recordtables/DAFRecordRetrieverTest.java | 56 + .../DAFStateVectorRecordListTest.java | 118 + .../DAFStateVectorRecordTableTest.java | 109 + .../recordtables/DAFTimeListTableTest.java | 67 + .../DAFType1SPKRecordTableTest.java | 182 + .../DAFType3SPKRecordListTest.java | 158 + .../picante/spice/fov/FOVFactoryTest.java | 159 + .../spice/kernel/ByteBufferReaderTest.java | 38 + .../kernel/ForgivingKernelLoaderTest.java | 47 + .../spice/kernel/KernelLoaderTest.java | 330 + .../java/picante/spice/kernel/KernelTest.java | 41 + .../kernel/ck/AbstractCKSegmentTest.java | 73 + .../java/picante/spice/kernel/ck/CKTest.java | 167 + .../picante/spice/kernel/ck/CKType3Test.java | 291 + .../spice/kernel/ck/CKType3WithAVTest.java | 417 + .../ck/IntervalStartsCKCoverageTest.java | 811 + .../spice/kernel/ck/TimeListArrayWrapper.java | 34 + .../kernel/ck/Type2InterpolatorTest.java | 31 + .../kernel/ck/Type3InterpolatorTest.java | 115 + .../kernel/pck/AbstractPCKSegmentTest.java | 74 + .../picante/spice/kernel/pck/PCKTest.java | 124 + .../spice/kernel/pck/PCKType2RecordTest.java | 147 + .../spice/kernel/pck/PCKType2Test.java | 82 + .../kernel/spk/AbstractSPKSegmentTest.java | 97 + .../spice/kernel/spk/AbstractSPKTypeTest.java | 270 + .../kernel/spk/EquinoctialElementsTest.java | 85 + .../spk/FirstIndexRetrieverListTest.java | 185 + .../spk/FirstIndexRetrieverTableTest.java | 382 + .../picante/spice/kernel/spk/SPKTest.java | 112 + .../spice/kernel/spk/SPKType12Test.java | 135 + .../spice/kernel/spk/SPKType13Test.java | 137 + .../spice/kernel/spk/SPKType17Test.java | 66 + .../spice/kernel/spk/SPKType1RecordTest.java | 231 + .../spice/kernel/spk/SPKType1Test.java | 115 + .../spice/kernel/spk/SPKType2RecordTest.java | 198 + .../spice/kernel/spk/SPKType2Test.java | 96 + .../spice/kernel/spk/SPKType3RecordTest.java | 286 + .../spice/kernel/spk/SPKType3Test.java | 96 + .../kernel/spk/SPKType5EvaluatorTest.java | 69 + .../spice/kernel/spk/SPKType5Test.java | 104 + .../spice/kernel/spk/SPKType8Test.java | 175 + .../spice/kernel/spk/SPKType9Test.java | 174 + ...tateVectorDirectLookupRecordTableTest.java | 132 + .../kernel/spk/StumpffFunctionsTest.java | 430 + .../kernel/spk/TwoBodyPropagatorTest.java | 102 + .../spice/kernel/tk/TextKernelTest.java | 67 + .../spice/kernel/tk/fk/FrameInfoTest.java | 89 + .../spice/kernel/tk/fk/FrameKernelTest.java | 66 + .../spice/kernel/tk/fk/FrameTypeTest.java | 31 + .../kernel/tk/fk/TKFrameFunctionTest.java | 41 + .../DefinableStateVectorFunctionTest.java | 36 + .../DynamicEulerFrameFunctionTest.java | 122 + .../fk/dynamic/DynamicFrameFunctionTest.java | 46 + .../DynamicFrozenFrameFunctionTest.java | 66 + .../DynamicInertialFrameFunctionTest.java | 64 + .../DynamicMeanEclipticFrameFunctionTest.java | 100 + .../DynamicMeanEquatorFrameFunctionTest.java | 92 + .../DynamicTrueEquatorFrameFunctionTest.java | 105 + .../DynamicTwoVectorFrameFunctionTest.java | 314 + .../tk/fk/dynamic/SpiceEnvironmentSetup.java | 131 + .../picante/spice/kernel/tk/lsk/LSKTest.java | 72 + .../spice/kernel/tk/lsk/TDTProviderTest.java | 120 + .../spice/kernel/tk/lsk/TestUtilities.java | 71 + .../kernel/tk/pck/JEDOffsetConverterTest.java | 32 + .../kernel/tk/pck/PCKFrameFunctionTest.java | 214 + .../pck/PCKWithNutationFrameFunctionTest.java | 104 + .../spice/kernel/tk/pck/TextPCKTest.java | 58 + .../kernel/tk/sclk/AssertionUtilities.java | 13 + .../spice/kernel/tk/sclk/SCLKKernelTest.java | 263 + .../spice/kernel/tk/sclk/SCLKTest.java | 230 + .../kernel/tk/sclk/SCLKType1RecordTest.java | 79 + .../spice/kernel/tk/sclk/SCLKType1Test.java | 521 + .../tk/sclk/SCLKType1TickConverterTest.java | 259 + .../DirectRecordIndexComputerTest.java | 81 + .../spice/kernelpool/AssertionUtilities.java | 92 + .../spice/kernelpool/BasicKernelPoolTest.java | 1685 + .../kernelpool/ImmutableKernelPoolTest.java | 392 + .../KernelPoolChangeEventHandlerTest.java | 323 + .../kernelpool/KernelPoolChangeEventTest.java | 168 + .../spice/kernelpool/KernelPoolTest.java | 846 + .../kernelpool/KernelPoolValuesTest.java | 92 + .../kernelpool/content/AngleUnitsTest.java | 81 + .../spice/kernelpool/content/AxisTest.java | 54 + .../DynamicConstantVectorProviderTest.java | 132 + .../content/DynamicFrameProviderTest.java | 201 + .../content/DynamicVectorProviderTest.java | 95 + .../content/EulerAnglesFactoryTest.java | 112 + .../kernelpool/content/FKFactoryTest.java | 416 + .../kernelpool/content/KernelPoolBuilder.java | 43 + .../content/KernelPoolContentFactoryTest.java | 145 + .../KernelPoolValidatingRetrieverTest.java | 334 + .../content/KeywordFormatterTest.java | 25 + .../kernelpool/content/LSKFactoryTest.java | 73 + .../spice/kernelpool/content/LargeAngles.java | 150 + .../spice/kernelpool/content/MockSpice.java | 65 + .../kernelpool/content/PCKFactoryTest.java | 381 + .../kernelpool/content/SCLKFactoryTest.java | 108 + .../content/SCLKPartitionTableTest.java | 80 + .../content/SCLKType1CreatorTest.java | 255 + .../SCLKType1ListBasedRecordTableTest.java | 131 + .../SpiceAberrationCorrectionTest.java | 29 + .../content/TKFrameProvidersTest.java | 340 + .../content/TwoVectorMatrixTest.java | 70 + .../parser/TextKernelParserTest.java | 477 + .../parser/time/TimeParserTest.java | 531 + .../CanonicalizedStringKeyMapTest.java | 59 + .../CanonicalizedStringValueMapTest.java | 60 + .../spice/provided/EphemerisNamesTest.java | 53 + .../spice/provided/FrameNamesTest.java | 105 + .../spice/provided/InertialFramesTest.java | 253 + .../picante/time/ISOStringParserTest.java | 50 + .../java/picante/time/JulianDateTest.java | 30 + .../java/picante/time/TimeAdapterTest.java | 72 + src/test/java/picante/time/UTCEpochTest.java | 420 + .../java/picante/time/UTCFactoryTest.java | 280 + .../picante/time/UTCStringParserTest.java | 91 + .../timeline/AbstractStateTimelineTest.java | 379 + .../timeline/StateTimelineBuilderTest.java | 791 + .../picante/timeline/StateTimelineTest.java | 344 + .../picante/units/AngleConversionsTest.java | 26 + .../LocalTimeToRadiansConversionsTest.java | 123 + .../utilities/TestChainLinkEngine.java | 157 + .../java/picante/utilities/TestInitSpice.java | 70 + .../picante/utilities/TestSPICEUtils.java | 134 + .../picante/utilities/TestTimeConversion.java | 76 + src/test/resources/kernels/ck/getCK.bash | 10 + src/test/resources/kernels/fk/cas_v37.tf | 4241 + src/test/resources/kernels/fk/cas_v40.tf | 4513 ++ .../resources/kernels/fk/earth_topo_050714.tf | 903 + .../resources/kernels/fk/earth_topo_201023.tf | 1931 + src/test/resources/kernels/ik/cas_iss_v09.ti | 779 + src/test/resources/kernels/ik/cas_iss_v10.ti | 790 + src/test/resources/kernels/ik/cas_uvis_v06.ti | 1416 + src/test/resources/kernels/ik/example.ti | 61 + src/test/resources/kernels/ik/mgs_moc_v20.ti | 925 + src/test/resources/kernels/lsk/naif0008.tls | 136 + src/test/resources/kernels/lsk/naif0009.tls | 140 + src/test/resources/kernels/lsk/naif0010.tls | 144 + src/test/resources/kernels/lsk/naif0011.tls | 148 + src/test/resources/kernels/lsk/naif0012.tls | 152 + src/test/resources/kernels/mk/geometry.tm | 25 + .../resources/kernels/mk/multiThreaded.tm | 18 + .../resources/kernels/pck/cpck05Mar2004.tpc | 986 + .../resources/kernels/pck/cpck26Jan2007.tpc | 2342 + .../kernels/pck/earth_latest_high_prec.bpc | Bin 0 -> 4147200 bytes src/test/resources/kernels/pck/pck00008.tpc | 3381 + src/test/resources/kernels/pck/pck00009.tpc | 3639 + src/test/resources/kernels/pck/pck00010.tpc | 4061 + src/test/resources/kernels/sclk/cas00071.tsc | 139 + src/test/resources/kernels/sclk/cas00082.tsc | 161 + src/test/resources/kernels/sclk/cas00084.tsc | 165 + src/test/resources/kernels/sclk/cas00085.tsc | 166 + src/test/resources/kernels/sclk/cas00145.tsc | 271 + .../kernels/sclk/mgs_sclkscet_00061.tsc | 205 + .../kernels/sclk/sdu_sclkscet_00074.tsc | 258 + src/test/resources/kernels/sclk/vg200006.tsc | 1148 + src/test/resources/kernels/spk/getSPK.bash | 18 + .../events/lookuptables/trackdef/st1.txt | 48 + .../events/lookuptables/trackdef/st2.txt | 40 + .../events/lookuptables/trackdef/st3.txt | 40 + .../CrucibleMathPerformanceTest_output.txt | 121 + .../math/coords/testFromCartToCoord.for | 186 + .../math/coords/testFromCoordToCart.for | 148 + .../math/coords/testFromCylToCartOutput.txt | 50 + .../math/coords/testFromLatToCartOutput.txt | 50 + .../math/coords/testFromSphToCartOutput.txt | 50 + .../math/coords/testRandomCartesianInput.txt | 50 + .../picante/math/coords/testSpiceCyl.txt | 50 + .../picante/math/coords/testSpiceLat.txt | 50 + .../picante/math/coords/testSpiceSph.txt | 50 + .../math/vectorfields/SampleScalar.docx | Bin 0 -> 63998 bytes .../mechanics/providers/aberrated/lsk.tls | 144 + .../mechanics/providers/aberrated/pck.tpc | 4061 + .../modeling/drivers/tests/NIST_Misra1a.dat | 74 + .../dst/dst_realtime/201207/index.html | 116 + .../realtimeace/20120725_ace_mag_1m.txt | 1460 + .../realtimeace/201208_ace_loc_1h.txt | 761 + .../realtimeace/ace_mag_1m.txt | 139 + .../realtimeace/ace_swepam_1m.txt | 137 + .../testdir/20141120_ace_epam_5m.txt | 306 + .../testdir/20141120_ace_mag_1m.txt | 1460 + .../testdir/20141120_ace_sis_5m.txt | 304 + .../testdir/20141120_ace_swepam_1m.txt | 1458 + .../testdir/20141121_ace_epam_5m.txt | 306 + .../testdir/20141121_ace_mag_1m.txt | 1460 + .../testdir/20141121_ace_sis_5m.txt | 304 + .../testdir/20141121_ace_swepam_1m.txt | 1458 + .../testdir/20141122_ace_epam_5m.txt | 306 + .../testdir/20141122_ace_mag_1m.txt | 1460 + .../testdir/20141122_ace_sis_5m.txt | 304 + .../testdir/20141122_ace_swepam_1m.txt | 1458 + .../testdir/20141123_ace_epam_5m.txt | 306 + .../testdir/20141123_ace_mag_1m.txt | 1460 + .../testdir/20141123_ace_sis_5m.txt | 304 + .../testdir/20141123_ace_swepam_1m.txt | 1458 + .../testdir/20141124_ace_epam_5m.txt | 306 + .../testdir/20141124_ace_mag_1m.txt | 1460 + .../testdir/20141124_ace_sis_5m.txt | 304 + .../testdir/20141124_ace_swepam_1m.txt | 1458 + .../testdir/20141125_ace_epam_5m.txt | 246 + .../testdir/20141125_ace_mag_1m.txt | 1160 + .../testdir/20141125_ace_sis_5m.txt | 244 + .../testdir/20141125_ace_swepam_1m.txt | 1158 + .../realtimeace/testdir/README.txt | 584 + .../realtimeace/testdir/ace_epam_5m.txt | 42 + .../realtimeace/testdir/ace_mag_1m.txt | 139 + .../realtimeace/testdir/ace_sis_5m.txt | 40 + .../realtimeace/testdir/ace_swepam_1m.txt | 137 + .../picante/spice/daf/bytebuffer/testfive.daf | Bin 0 -> 20480 bytes .../picante/spice/daf/bytebuffer/testfour.daf | Bin 0 -> 20480 bytes .../picante/spice/daf/bytebuffer/testone.daf | Bin 0 -> 20480 bytes .../spice/daf/bytebuffer/testseven.daf | Bin 0 -> 18432 bytes .../picante/spice/daf/bytebuffer/testsix.daf | Bin 0 -> 20480 bytes .../spice/daf/bytebuffer/testthree.daf | Bin 0 -> 20480 bytes .../picante/spice/daf/bytebuffer/testtwo.daf | Bin 0 -> 20480 bytes .../picante/spice/daf/content/test.daf | Bin 0 -> 18432 bytes .../resources/picante/spice/fov/example.ti | 61 + .../spice/kernel/spk/type12_5d_spice.txt | 290 + .../spice/kernel/spk/type13_5d_spice.txt | 290 + .../spice/kernel/spk/type8_4d_spice.txt | 290 + .../spice/kernel/spk/type8_5d_spice.txt | 290 + .../spice/kernel/spk/type9_4d_spice.txt | 290 + .../spice/kernel/spk/type9_5d_spice.txt | 290 + .../resources/picante/spice/kernel/test.tls | 136 + .../spice/kernel/tk/fk/dynamic/custom.tf | 290 + .../spice/kernel/tk/fk/dynamic/pck00010.tpc | 4061 + .../picante/spice/kernel/tk/lsk/lsk.for | 230 + .../picante/spice/kernel/tk/lsk/taitotdb.dat | Bin 0 -> 336 bytes .../picante/spice/kernel/tk/lsk/tdbtotai.dat | Bin 0 -> 336 bytes .../picante/spice/kernel/tk/lsk/tdbtotdt.dat | Bin 0 -> 336 bytes .../picante/spice/kernel/tk/lsk/tdttotdb.dat | Bin 0 -> 336 bytes .../picante/spice/kernel/tk/lsk/test.tls | 136 + .../parser/MRO_SCLKSCET.00006.65536.bsc | 143 + .../parser/MRO_SCLKSCET.00006.65536.tsc | 253 + .../kernelpool/parser/begindata_assignment.tk | 5 + .../spice/kernelpool/parser/cas00093.bsc | 483 + .../spice/kernelpool/parser/cas00093.tsc | 183 + .../spice/kernelpool/parser/cas_v39.bf | 742 + .../spice/kernelpool/parser/cas_v39.tf | 4449 + .../parser/lro_frames_2010036_v01.bf | 237 + .../parser/lro_frames_2010036_v01.tf | 894 + .../spice/kernelpool/parser/messenger_154.bsc | 477 + .../spice/kernelpool/parser/messenger_154.tsc | 331 + .../spice/kernelpool/parser/naif0008.bls | 57 + .../spice/kernelpool/parser/naif0008.tls | 136 + .../kernelpool/parser/naif0008_nonewline.tls | 132 + .../parser/naif0008_nonewlinealt.tls | 132 + .../spice/kernelpool/parser/nonewline.tk | 4 + .../kernelpool/parser/nonewline_badfile.tk | 5 + .../kernelpool/parser/nonewline_begindata.tk | 6 + .../spice/kernelpool/parser/pck00008.bpc | 2529 + .../spice/kernelpool/parser/pck00008.tpc | 3381 + .../picante/spice/kernelpool/parser/pi.bk | 19 + .../picante/spice/kernelpool/parser/pi.tk | 8 + src/test/resources/picante/spice/naif0012.tls | 152 + .../stars/catalogs/tycho2/file/data/main.data | Bin 0 -> 606060 bytes .../catalogs/tycho2/file/data/main.idindex | Bin 0 -> 37300 bytes .../catalogs/tycho2/file/data/main.index | Bin 0 -> 5192 bytes .../catalogs/tycho2/file/data/suppl.data | Bin 0 -> 9546 bytes .../catalogs/tycho2/file/data/suppl.idindex | Bin 0 -> 1036 bytes .../catalogs/tycho2/file/data/suppl.index | Bin 0 -> 5192 bytes .../stars/catalogs/ucac4/file/u4hpm.dat | 4 + .../stars/catalogs/ucac4/file/u4index.unf | Bin 0 -> 10368000 bytes .../resources/picante/surfaces/mesh/gourd.obj | 979 + src/test/resources/picante/time/naif0008.tls | 136 + .../picante/tree/resourcetree/http/index.html | 29 + .../tree/resourcetree/local/dummy_file.txt | 1 + 1104 files changed, 340648 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/picante/collections/AbstractIndexedIterator.java create mode 100644 src/main/java/picante/collections/AbstractReadOnlyList.java create mode 100644 src/main/java/picante/collections/AbstractSequentialReadOnlyList.java create mode 100644 src/main/java/picante/collections/ArrayUtilities.java create mode 100644 src/main/java/picante/collections/CollectionUtilities.java create mode 100644 src/main/java/picante/collections/IndexRange.java create mode 100644 src/main/java/picante/collections/package-info.java create mode 100644 src/main/java/picante/data/list/AbstractFixedLengthGaugedRetrievableWithExceptions.java create mode 100644 src/main/java/picante/data/list/AbstractFixedLengthRetrievableWithExceptions.java create mode 100644 src/main/java/picante/data/list/AbstractGaugedRetrievable.java create mode 100644 src/main/java/picante/data/list/AbstractGaugedRetrievableWithExceptions.java create mode 100644 src/main/java/picante/data/list/AbstractRetrievableWithExceptions.java create mode 100644 src/main/java/picante/data/list/Gaugeable.java create mode 100644 src/main/java/picante/data/list/Gaugeables.java create mode 100644 src/main/java/picante/data/list/Gauged.java create mode 100644 src/main/java/picante/data/list/GaugedRetrievable.java create mode 100644 src/main/java/picante/data/list/GaugedRetrievableLLE.java create mode 100644 src/main/java/picante/data/list/GaugedRetrievableLLET.java create mode 100644 src/main/java/picante/data/list/GaugedRetrievableLLT.java create mode 100644 src/main/java/picante/data/list/Retrievable.java create mode 100644 src/main/java/picante/data/list/Retrievables.java create mode 100644 src/main/java/picante/data/list/Searcher.java create mode 100644 src/main/java/picante/data/list/package-info.java create mode 100644 src/main/java/picante/demo/Geometry.java create mode 100644 src/main/java/picante/demo/MultiThreaded.java create mode 100644 src/main/java/picante/designpatterns/Blueprint.java create mode 100644 src/main/java/picante/designpatterns/Blueprints.java create mode 100644 src/main/java/picante/designpatterns/BuildFailedException.java create mode 100644 src/main/java/picante/designpatterns/Builder.java create mode 100644 src/main/java/picante/designpatterns/Writable.java create mode 100644 src/main/java/picante/designpatterns/package-info.java create mode 100644 src/main/java/picante/exceptions/BugException.java create mode 100644 src/main/java/picante/exceptions/ExceptionFactory.java create mode 100644 src/main/java/picante/exceptions/FunctionEvaluationException.java create mode 100644 src/main/java/picante/exceptions/PicanteException.java create mode 100644 src/main/java/picante/exceptions/PicanteRuntimeException.java create mode 100644 src/main/java/picante/exceptions/RuntimeInterruptedException.java create mode 100644 src/main/java/picante/exceptions/package-info.java create mode 100644 src/main/java/picante/junit/AssertTools.java create mode 100644 src/main/java/picante/junit/CaptureAndAnswer.java create mode 100644 src/main/java/picante/math/CoordUtilities.java create mode 100644 src/main/java/picante/math/PicanteMath.java create mode 100644 src/main/java/picante/math/Statistics.java create mode 100644 src/main/java/picante/math/cones/AbstractProjection.java create mode 100644 src/main/java/picante/math/cones/ClosedPathPlotter.java create mode 100644 src/main/java/picante/math/cones/Cone.java create mode 100644 src/main/java/picante/math/cones/ConeFunction.java create mode 100644 src/main/java/picante/math/cones/Cones.java create mode 100644 src/main/java/picante/math/cones/DerivativeProjection.java create mode 100644 src/main/java/picante/math/cones/EllipticalCone.java create mode 100644 src/main/java/picante/math/cones/GeometrySanitizer.java create mode 100644 src/main/java/picante/math/cones/JtsUtilities.java create mode 100644 src/main/java/picante/math/cones/ModifiedPackedCoordinateSequence.java create mode 100644 src/main/java/picante/math/cones/ModifiedPackedCoordinateSequenceFactory.java create mode 100644 src/main/java/picante/math/cones/PathPlotter.java create mode 100644 src/main/java/picante/math/cones/PathPlotters.java create mode 100644 src/main/java/picante/math/cones/PathSplitter.java create mode 100644 src/main/java/picante/math/cones/PolygonalCone.java create mode 100644 src/main/java/picante/math/cones/Projection.java create mode 100644 src/main/java/picante/math/cones/ProjectionBuilders.java create mode 100644 src/main/java/picante/math/cones/RotatedProjection.java create mode 100644 src/main/java/picante/math/cones/SequencesConverter.java create mode 100644 src/main/java/picante/math/cones/SimpleCylindrical.java create mode 100644 src/main/java/picante/math/cones/SimpleCylindricalPathType.java create mode 100644 src/main/java/picante/math/coords/AbstractCoordConverter.java create mode 100644 src/main/java/picante/math/coords/AbstractCoordConverterIJ.java create mode 100644 src/main/java/picante/math/coords/AbstractState.java create mode 100644 src/main/java/picante/math/coords/AbstractVector.java create mode 100644 src/main/java/picante/math/coords/AbstractVectorFieldValue.java create mode 100644 src/main/java/picante/math/coords/AbstractVectorIJ.java create mode 100644 src/main/java/picante/math/coords/AssertTools.java create mode 100644 src/main/java/picante/math/coords/CartesianState.java create mode 100644 src/main/java/picante/math/coords/CartesianStateIJ.java create mode 100644 src/main/java/picante/math/coords/CartesianVectorFieldValue.java create mode 100644 src/main/java/picante/math/coords/CoordConverter.java create mode 100644 src/main/java/picante/math/coords/CoordConverterIJ.java create mode 100644 src/main/java/picante/math/coords/CoordConverters.java create mode 100644 src/main/java/picante/math/coords/CoordUtilities.java create mode 100644 src/main/java/picante/math/coords/CylindricalCoordConverter.java create mode 100644 src/main/java/picante/math/coords/CylindricalState.java create mode 100644 src/main/java/picante/math/coords/CylindricalToCartesianBasisTransformation.java create mode 100644 src/main/java/picante/math/coords/CylindricalToCartesianJacobian.java create mode 100644 src/main/java/picante/math/coords/CylindricalVector.java create mode 100644 src/main/java/picante/math/coords/CylindricalVectorFieldValue.java create mode 100644 src/main/java/picante/math/coords/LatitudinalCoordConverter.java create mode 100644 src/main/java/picante/math/coords/LatitudinalState.java create mode 100644 src/main/java/picante/math/coords/LatitudinalToCartesianJacobian.java create mode 100644 src/main/java/picante/math/coords/LatitudinalVector.java create mode 100644 src/main/java/picante/math/coords/PointOnAxisException.java create mode 100644 src/main/java/picante/math/coords/PolarCoordConverter.java create mode 100644 src/main/java/picante/math/coords/PolarState.java create mode 100644 src/main/java/picante/math/coords/PolarToCartesianJacobian.java create mode 100644 src/main/java/picante/math/coords/PolarVector.java create mode 100644 src/main/java/picante/math/coords/RaDecCoordConverter.java create mode 100644 src/main/java/picante/math/coords/RaDecVector.java create mode 100644 src/main/java/picante/math/coords/SphericalCoordConverter.java create mode 100644 src/main/java/picante/math/coords/SphericalState.java create mode 100644 src/main/java/picante/math/coords/SphericalToCartesianBasisTransformation.java create mode 100644 src/main/java/picante/math/coords/SphericalToCartesianJacobian.java create mode 100644 src/main/java/picante/math/coords/SphericalVector.java create mode 100644 src/main/java/picante/math/coords/SphericalVectorFieldValue.java create mode 100644 src/main/java/picante/math/coords/State.java create mode 100644 src/main/java/picante/math/coords/Transformation.java create mode 100644 src/main/java/picante/math/coords/TransformationIJ.java create mode 100644 src/main/java/picante/math/coords/VectorFieldValue.java create mode 100644 src/main/java/picante/math/coords/VectorFieldValueConversions.java create mode 100644 src/main/java/picante/math/coords/package-info.java create mode 100644 src/main/java/picante/math/functions/BasicComputableDifferentiableUnivariateFunction.java create mode 100644 src/main/java/picante/math/functions/BasicComputableDifferentiableVectorIJKFunction.java create mode 100644 src/main/java/picante/math/functions/ChebyshevPolynomial.java create mode 100644 src/main/java/picante/math/functions/Computable.java create mode 100644 src/main/java/picante/math/functions/ComputableDifferentiableUnivariateFunction.java create mode 100644 src/main/java/picante/math/functions/ComputableDifferentiableVectorIJKFunction.java create mode 100644 src/main/java/picante/math/functions/DifferentiableMatrixIJKFunction.java create mode 100644 src/main/java/picante/math/functions/DifferentiableMatrixIJKFunctions.java create mode 100644 src/main/java/picante/math/functions/DifferentiableRotationMatrixIJKFunction.java create mode 100644 src/main/java/picante/math/functions/DifferentiableRotationMatrixIJKFunctions.java create mode 100644 src/main/java/picante/math/functions/DifferentiableUnivariateFunction.java create mode 100644 src/main/java/picante/math/functions/DifferentiableUnivariateFunctionAdaptorToComputable.java create mode 100644 src/main/java/picante/math/functions/DifferentiableUnivariateFunctions.java create mode 100644 src/main/java/picante/math/functions/DifferentiableVectorIJKFunction.java create mode 100644 src/main/java/picante/math/functions/DifferentiableVectorIJKFunctions.java create mode 100644 src/main/java/picante/math/functions/FastMath.java create mode 100644 src/main/java/picante/math/functions/GenericFunction.java create mode 100644 src/main/java/picante/math/functions/HermitePolynomial.java create mode 100644 src/main/java/picante/math/functions/LagrangePolynomial.java create mode 100644 src/main/java/picante/math/functions/MatrixIJKFunction.java create mode 100644 src/main/java/picante/math/functions/Polynomial.java create mode 100644 src/main/java/picante/math/functions/Polynomials.java create mode 100644 src/main/java/picante/math/functions/RotationMatrixIJKFunction.java create mode 100644 src/main/java/picante/math/functions/RotationMatrixIJKFunctions.java create mode 100644 src/main/java/picante/math/functions/RuntimeInterruptionChecker.java create mode 100644 src/main/java/picante/math/functions/UnivariateFunction.java create mode 100644 src/main/java/picante/math/functions/UnivariateFunctions.java create mode 100644 src/main/java/picante/math/functions/UnivariatePolynomial.java create mode 100644 src/main/java/picante/math/functions/UnivariateVectorFunction.java create mode 100644 src/main/java/picante/math/functions/VectorIJKFunction.java create mode 100644 src/main/java/picante/math/functions/VectorIJKFunctions.java create mode 100644 src/main/java/picante/math/functions/package-info.java create mode 100644 src/main/java/picante/math/intervals/Interval.java create mode 100644 src/main/java/picante/math/intervals/IntervalSet.java create mode 100644 src/main/java/picante/math/intervals/IntervalWithValue.java create mode 100644 src/main/java/picante/math/intervals/UnwritableInterval.java create mode 100644 src/main/java/picante/math/intervals/package-info.java create mode 100644 src/main/java/picante/math/package-info.java create mode 100644 src/main/java/picante/math/vectorspace/InternalOperations.java create mode 100644 src/main/java/picante/math/vectorspace/MalformedRotationException.java create mode 100644 src/main/java/picante/math/vectorspace/MatrixIJ.java create mode 100644 src/main/java/picante/math/vectorspace/MatrixIJK.java create mode 100644 src/main/java/picante/math/vectorspace/RotationMatrixIJK.java create mode 100644 src/main/java/picante/math/vectorspace/UnwritableMatrixIJ.java create mode 100644 src/main/java/picante/math/vectorspace/UnwritableMatrixIJK.java create mode 100644 src/main/java/picante/math/vectorspace/UnwritableRotationMatrixIJK.java create mode 100644 src/main/java/picante/math/vectorspace/UnwritableVectorIJ.java create mode 100644 src/main/java/picante/math/vectorspace/UnwritableVectorIJK.java create mode 100644 src/main/java/picante/math/vectorspace/VectorIJ.java create mode 100644 src/main/java/picante/math/vectorspace/VectorIJK.java create mode 100644 src/main/java/picante/math/vectorspace/package-info.java create mode 100644 src/main/java/picante/mechanics/AbstractCoverage.java create mode 100644 src/main/java/picante/mechanics/AbstractPositionVectorFunctionWrapper.java create mode 100644 src/main/java/picante/mechanics/AbstractReversedFrameTransformFunctionWrapper.java create mode 100644 src/main/java/picante/mechanics/AbstractReversedPositionVectorFunctionWrapper.java create mode 100644 src/main/java/picante/mechanics/AbstractReversedStateTransformFunctionWrapper.java create mode 100644 src/main/java/picante/mechanics/AbstractReversedStateVectorFunctionWrapper.java create mode 100644 src/main/java/picante/mechanics/AbstractStateVectorFunctionWrapper.java create mode 100644 src/main/java/picante/mechanics/CelestialBodies.java create mode 100644 src/main/java/picante/mechanics/CelestialFrames.java create mode 100644 src/main/java/picante/mechanics/Coverage.java create mode 100644 src/main/java/picante/mechanics/Coverages.java create mode 100644 src/main/java/picante/mechanics/EphemerisAndFrameProvider.java create mode 100644 src/main/java/picante/mechanics/EphemerisEvaluationException.java create mode 100644 src/main/java/picante/mechanics/EphemerisID.java create mode 100644 src/main/java/picante/mechanics/EphemerisProvider.java create mode 100644 src/main/java/picante/mechanics/EphemerisSourceIOException.java create mode 100644 src/main/java/picante/mechanics/EphemerisSourceLinkException.java create mode 100644 src/main/java/picante/mechanics/EvaluationRuntimeException.java create mode 100644 src/main/java/picante/mechanics/ForwardingStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/FrameEvaluationException.java create mode 100644 src/main/java/picante/mechanics/FrameID.java create mode 100644 src/main/java/picante/mechanics/FrameProvider.java create mode 100644 src/main/java/picante/mechanics/FrameSourceIOException.java create mode 100644 src/main/java/picante/mechanics/FrameSourceLinkException.java create mode 100644 src/main/java/picante/mechanics/FrameTransformFunction.java create mode 100644 src/main/java/picante/mechanics/FrameTransformFunctions.java create mode 100644 src/main/java/picante/mechanics/HourAngle.java create mode 100644 src/main/java/picante/mechanics/IntervalCoverage.java create mode 100644 src/main/java/picante/mechanics/IntervalSetCoverage.java create mode 100644 src/main/java/picante/mechanics/Mechanics.java create mode 100644 src/main/java/picante/mechanics/PositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/PositionVectorFunctions.java create mode 100644 src/main/java/picante/mechanics/SourceException.java create mode 100644 src/main/java/picante/mechanics/SourceMetaData.java create mode 100644 src/main/java/picante/mechanics/SourceMetaDatas.java create mode 100644 src/main/java/picante/mechanics/StateTransform.java create mode 100644 src/main/java/picante/mechanics/StateTransformFunction.java create mode 100644 src/main/java/picante/mechanics/StateTransformFunctions.java create mode 100644 src/main/java/picante/mechanics/StateVector.java create mode 100644 src/main/java/picante/mechanics/StateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/StateVectorFunctions.java create mode 100644 src/main/java/picante/mechanics/TimeOutOfBoundsException.java create mode 100644 src/main/java/picante/mechanics/UnwritableStateTransform.java create mode 100644 src/main/java/picante/mechanics/UnwritableStateVector.java create mode 100644 src/main/java/picante/mechanics/package-info.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/Aberrated.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/AberratedEphemerisProvider.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/AberratedPositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/AberratedStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/AberrationCorrection.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/EqualObserverTargetAberratedStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/GeometricPositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/GeometricStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/InertialLightTimePositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/InertialLightTimeStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/InertialStellarAberratedPositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/InertialStellarAberratedStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/NewtonianAberratedEphemerisProvider.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/NonInertialAberratedPositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/NonInertialAberratedStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/aberrated/package-info.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockSupplier.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockType.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/Lockable.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockableEphemerisLinkEvaluationException.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockableEphemerisProvider.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockableFrameLinkEvaluationException.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockableFrameProvider.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockableFrameTransformFunction.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockablePositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockableStateTransformFunction.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockableStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockingDelegateFrameTransformFunction.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockingDelegatePositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockingDelegateStateTransformFunction.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/LockingDelegateStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/lockable/package-info.java create mode 100644 src/main/java/picante/mechanics/providers/package-info.java create mode 100644 src/main/java/picante/mechanics/providers/reference/ChainLinkEngine.java create mode 100644 src/main/java/picante/mechanics/providers/reference/ReferenceEphemerisLinkEvaluationException.java create mode 100644 src/main/java/picante/mechanics/providers/reference/ReferenceEphemerisProvider.java create mode 100644 src/main/java/picante/mechanics/providers/reference/ReferenceFrameLinkEvaluationException.java create mode 100644 src/main/java/picante/mechanics/providers/reference/ReferenceFrameProvider.java create mode 100644 src/main/java/picante/mechanics/providers/reference/ReferenceFrameTransformFunction.java create mode 100644 src/main/java/picante/mechanics/providers/reference/ReferencePositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/reference/ReferenceStateTransformFunction.java create mode 100644 src/main/java/picante/mechanics/providers/reference/ReferenceStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/providers/reference/package-info.java create mode 100644 src/main/java/picante/mechanics/rotations/AxisAndAngle.java create mode 100644 src/main/java/picante/mechanics/rotations/DifferentiatedEulerAngles.java create mode 100644 src/main/java/picante/mechanics/rotations/DifferentiatedRotation.java create mode 100644 src/main/java/picante/mechanics/rotations/DifferentiatedRotations.java create mode 100644 src/main/java/picante/mechanics/rotations/EulerAngles.java create mode 100644 src/main/java/picante/mechanics/rotations/MatrixWrapper.java create mode 100644 src/main/java/picante/mechanics/rotations/PrivilegedRotationMatrixIJK.java create mode 100644 src/main/java/picante/mechanics/rotations/Quaternion.java create mode 100644 src/main/java/picante/mechanics/rotations/Rotation.java create mode 100644 src/main/java/picante/mechanics/rotations/Rotations.java create mode 100644 src/main/java/picante/mechanics/rotations/UnwritableDifferentiatedRotation.java create mode 100644 src/main/java/picante/mechanics/rotations/UnwritableRotation.java create mode 100644 src/main/java/picante/mechanics/rotations/WrapperWithRate.java create mode 100644 src/main/java/picante/mechanics/rotations/package-info.java create mode 100644 src/main/java/picante/mechanics/utilities/AbstractFrameTransformFunction.java create mode 100644 src/main/java/picante/mechanics/utilities/AbstractPositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/utilities/ChainLinkEngine.java create mode 100644 src/main/java/picante/mechanics/utilities/FixedOffsetFrameFunction.java create mode 100644 src/main/java/picante/mechanics/utilities/FixedOffsetPositionFunction.java create mode 100644 src/main/java/picante/mechanics/utilities/InverseFrameTransformFunction.java create mode 100644 src/main/java/picante/mechanics/utilities/ScaledPositionVectorFunction.java create mode 100644 src/main/java/picante/mechanics/utilities/ScaledStateVectorFunction.java create mode 100644 src/main/java/picante/mechanics/utilities/SimpleEphemerisID.java create mode 100644 src/main/java/picante/mechanics/utilities/SimpleFrameID.java create mode 100644 src/main/java/picante/mechanics/utilities/package-info.java create mode 100644 src/main/java/picante/roots/BooleanStateFinder.java create mode 100644 src/main/java/picante/roots/BooleanStateSolver.java create mode 100644 src/main/java/picante/roots/BrentSolverSupplier.java create mode 100644 src/main/java/picante/roots/RootFinder.java create mode 100644 src/main/java/picante/roots/Stepper.java create mode 100644 src/main/java/picante/roots/Steppers.java create mode 100644 src/main/java/picante/roots/UnivariateBooleanFunction.java create mode 100644 src/main/java/picante/roots/UnivariateBooleanFunctions.java create mode 100644 src/main/java/picante/roots/package-info.java create mode 100644 src/main/java/picante/spice/BindingConflictException.java create mode 100644 src/main/java/picante/spice/EphemerisIDBindingManager.java create mode 100644 src/main/java/picante/spice/FrameIDBindingManager.java create mode 100644 src/main/java/picante/spice/GeneralAberratedEphemerisProvider.java create mode 100644 src/main/java/picante/spice/KernelManager.java create mode 100644 src/main/java/picante/spice/MetakernelReader.java create mode 100644 src/main/java/picante/spice/NameIDBindingList.java create mode 100644 src/main/java/picante/spice/SpiceEnvironment.java create mode 100644 src/main/java/picante/spice/SpiceEnvironmentBuilder.java create mode 100644 src/main/java/picante/spice/SpiceMetaData.java create mode 100644 src/main/java/picante/spice/Utilities.java create mode 100644 src/main/java/picante/spice/adapters/AdapterInstantiationException.java create mode 100644 src/main/java/picante/spice/adapters/BinaryPCKAdapter.java create mode 100644 src/main/java/picante/spice/adapters/BinaryPCKSegmentAdapter.java create mode 100644 src/main/java/picante/spice/adapters/CKAdapter.java create mode 100644 src/main/java/picante/spice/adapters/CKMetaData.java create mode 100644 src/main/java/picante/spice/adapters/CKSegmentAdapter.java create mode 100644 src/main/java/picante/spice/adapters/CKSegmentWithAVAdapter.java create mode 100644 src/main/java/picante/spice/adapters/EphemerisSourceFactory.java create mode 100644 src/main/java/picante/spice/adapters/FKAdapter.java create mode 100644 src/main/java/picante/spice/adapters/FinalKeyMap.java create mode 100644 src/main/java/picante/spice/adapters/FrameSourceFactory.java create mode 100644 src/main/java/picante/spice/adapters/InertialFrameAdapter.java create mode 100644 src/main/java/picante/spice/adapters/KernelPoolMetaData.java create mode 100644 src/main/java/picante/spice/adapters/PCKAdapter.java create mode 100644 src/main/java/picante/spice/adapters/PCKMetaData.java create mode 100644 src/main/java/picante/spice/adapters/SPKAdapter.java create mode 100644 src/main/java/picante/spice/adapters/SPKMetaData.java create mode 100644 src/main/java/picante/spice/adapters/SPKSegmentAdapter.java create mode 100644 src/main/java/picante/spice/adapters/SclkRegistry.java create mode 100644 src/main/java/picante/spice/adapters/SpiceClassedFrameID.java create mode 100644 src/main/java/picante/spice/adapters/SpiceEphemerisID.java create mode 100644 src/main/java/picante/spice/adapters/SpiceFrameID.java create mode 100644 src/main/java/picante/spice/adapters/TKFrameFunctionAdapter.java create mode 100644 src/main/java/picante/spice/adapters/TdbCoverage.java create mode 100644 src/main/java/picante/spice/adapters/TextPCKAdapter.java create mode 100644 src/main/java/picante/spice/adapters/package-info.java create mode 100644 src/main/java/picante/spice/daf/DAF.java create mode 100644 src/main/java/picante/spice/daf/DAFAccessException.java create mode 100644 src/main/java/picante/spice/daf/DAFFactory.java create mode 100644 src/main/java/picante/spice/daf/DAFSegment.java create mode 100644 src/main/java/picante/spice/daf/DAFSupport.java create mode 100644 src/main/java/picante/spice/daf/DAFValidationFailure.java create mode 100644 src/main/java/picante/spice/daf/bytebuffer/ByteBufferDAF.java create mode 100644 src/main/java/picante/spice/daf/bytebuffer/ByteBufferDAFSegment.java create mode 100644 src/main/java/picante/spice/daf/bytebuffer/package-info.java create mode 100644 src/main/java/picante/spice/daf/content/CKSegmentFactory.java create mode 100644 src/main/java/picante/spice/daf/content/DAFBackedCKContent.java create mode 100644 src/main/java/picante/spice/daf/content/DAFBackedPCKContent.java create mode 100644 src/main/java/picante/spice/daf/content/DAFBackedSPKContent.java create mode 100644 src/main/java/picante/spice/daf/content/DAFBasedKernelContent.java create mode 100644 src/main/java/picante/spice/daf/content/DAFContentFactory.java create mode 100644 src/main/java/picante/spice/daf/content/DAFContentServices.java create mode 100644 src/main/java/picante/spice/daf/content/DAFMetaData.java create mode 100644 src/main/java/picante/spice/daf/content/PCKSegmentFactory.java create mode 100644 src/main/java/picante/spice/daf/content/SPKSegmentFactory.java create mode 100644 src/main/java/picante/spice/daf/content/package-info.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/DAFCKType2RecordTable.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/DAFChebyshevTripletRecordList.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/DAFQuaternionAVRecordTable.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/DAFQuaternionRecordTable.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/DAFRecordRetriever.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/DAFStateVectorRecordList.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/DAFStateVectorRecordTable.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/DAFTimeListTable.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/DAFType1SPKRecordTable.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/DAFType3SPKRecordList.java create mode 100644 src/main/java/picante/spice/daf/content/recordtables/package-info.java create mode 100644 src/main/java/picante/spice/daf/package-info.java create mode 100644 src/main/java/picante/spice/fov/FOV.java create mode 100644 src/main/java/picante/spice/fov/FOVFactory.java create mode 100644 src/main/java/picante/spice/fov/FOVSpice.java create mode 100644 src/main/java/picante/spice/fov/package-info.java create mode 100644 src/main/java/picante/spice/jspice/Parameter.java create mode 100644 src/main/java/picante/spice/jspice/Spicelib.java create mode 100644 src/main/java/picante/spice/kernel/ByteBufferReader.java create mode 100644 src/main/java/picante/spice/kernel/ForgivingKernelLoader.java create mode 100644 src/main/java/picante/spice/kernel/Kernel.java create mode 100644 src/main/java/picante/spice/kernel/KernelInstantiationException.java create mode 100644 src/main/java/picante/spice/kernel/KernelLoader.java create mode 100644 src/main/java/picante/spice/kernel/KernelType.java create mode 100644 src/main/java/picante/spice/kernel/SegmentedKernelContent.java create mode 100644 src/main/java/picante/spice/kernel/ck/AbstractCKSegment.java create mode 100644 src/main/java/picante/spice/kernel/ck/CK.java create mode 100644 src/main/java/picante/spice/kernel/ck/CKCoverage.java create mode 100644 src/main/java/picante/spice/kernel/ck/CKEvaluationException.java create mode 100644 src/main/java/picante/spice/kernel/ck/CKInstantiationException.java create mode 100644 src/main/java/picante/spice/kernel/ck/CKSegment.java create mode 100644 src/main/java/picante/spice/kernel/ck/CKSegmentWithAV.java create mode 100644 src/main/java/picante/spice/kernel/ck/CKType2.java create mode 100644 src/main/java/picante/spice/kernel/ck/CKType2Record.java create mode 100644 src/main/java/picante/spice/kernel/ck/CKType3.java create mode 100644 src/main/java/picante/spice/kernel/ck/CKType3WithAV.java create mode 100644 src/main/java/picante/spice/kernel/ck/IntervalStartsCKCoverage.java create mode 100644 src/main/java/picante/spice/kernel/ck/Type2Interpolator.java create mode 100644 src/main/java/picante/spice/kernel/ck/Type3Interpolator.java create mode 100644 src/main/java/picante/spice/kernel/ck/package-info.java create mode 100644 src/main/java/picante/spice/kernel/package-info.java create mode 100644 src/main/java/picante/spice/kernel/pck/AbstractPCKSegment.java create mode 100644 src/main/java/picante/spice/kernel/pck/BinaryPCKInstantiationException.java create mode 100644 src/main/java/picante/spice/kernel/pck/PCK.java create mode 100644 src/main/java/picante/spice/kernel/pck/PCKSegment.java create mode 100644 src/main/java/picante/spice/kernel/pck/PCKType2.java create mode 100644 src/main/java/picante/spice/kernel/pck/PCKType2Record.java create mode 100644 src/main/java/picante/spice/kernel/pck/package-info.java create mode 100644 src/main/java/picante/spice/kernel/spk/AbstractSPKSegment.java create mode 100644 src/main/java/picante/spice/kernel/spk/AbstractSPKType.java create mode 100644 src/main/java/picante/spice/kernel/spk/EquinoctialElements.java create mode 100644 src/main/java/picante/spice/kernel/spk/FirstIndexRetriever.java create mode 100644 src/main/java/picante/spice/kernel/spk/FirstIndexRetrieverList.java create mode 100644 src/main/java/picante/spice/kernel/spk/FirstIndexRetrieverTable.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPK.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKEvaluationException.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKInstantiationException.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKSegment.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType1.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType12.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType13.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType17.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType1Record.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType2.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType2Record.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType3.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType3Record.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType5.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType5Evaluator.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType8.java create mode 100644 src/main/java/picante/spice/kernel/spk/SPKType9.java create mode 100644 src/main/java/picante/spice/kernel/spk/StateVectorDirectLookupRecordTable.java create mode 100644 src/main/java/picante/spice/kernel/spk/StumpffFunctions.java create mode 100644 src/main/java/picante/spice/kernel/spk/TwoBodyPropagator.java create mode 100644 src/main/java/picante/spice/kernel/spk/package-info.java create mode 100644 src/main/java/picante/spice/kernel/tk/TextKernel.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/FKInstantiationException.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/FrameInfo.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/FrameKernel.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/FrameType.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/TKFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/Axis.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DefinableStateVectorFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/Defineable.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicAberratedConstantVectorFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicConstantVectorFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicEulerFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicFrameDefinitionException.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicFrozenFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicInertialFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicMeanEclipticFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicMeanEquatorFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicPositionVectorFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicStateTransformFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicTrueEquatorFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicTwoVectorFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/DynamicVelocityVectorFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/IDUtilities.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/dynamic/TwoVectorMatrix.java create mode 100644 src/main/java/picante/spice/kernel/tk/fk/package-info.java create mode 100644 src/main/java/picante/spice/kernel/tk/lsk/LSK.java create mode 100644 src/main/java/picante/spice/kernel/tk/lsk/LSKInstantiationException.java create mode 100644 src/main/java/picante/spice/kernel/tk/lsk/TDTProvider.java create mode 100644 src/main/java/picante/spice/kernel/tk/lsk/UniformTimeProvider.java create mode 100644 src/main/java/picante/spice/kernel/tk/lsk/package-info.java create mode 100644 src/main/java/picante/spice/kernel/tk/package-info.java create mode 100644 src/main/java/picante/spice/kernel/tk/pck/JEDOffsetConverter.java create mode 100644 src/main/java/picante/spice/kernel/tk/pck/PCKFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/pck/PCKWithNutationFrameFunction.java create mode 100644 src/main/java/picante/spice/kernel/tk/pck/TextPCK.java create mode 100644 src/main/java/picante/spice/kernel/tk/pck/TextPCKInstantiationException.java create mode 100644 src/main/java/picante/spice/kernel/tk/pck/TimeConverter.java create mode 100644 src/main/java/picante/spice/kernel/tk/sclk/EncodedSCLKConverter.java create mode 100644 src/main/java/picante/spice/kernel/tk/sclk/SCLK.java create mode 100644 src/main/java/picante/spice/kernel/tk/sclk/SCLKEvaluationException.java create mode 100644 src/main/java/picante/spice/kernel/tk/sclk/SCLKInstantiationException.java create mode 100644 src/main/java/picante/spice/kernel/tk/sclk/SCLKKernel.java create mode 100644 src/main/java/picante/spice/kernel/tk/sclk/SCLKType1.java create mode 100644 src/main/java/picante/spice/kernel/tk/sclk/SCLKType1Record.java create mode 100644 src/main/java/picante/spice/kernel/tk/sclk/SCLKType1TickConverter.java create mode 100644 src/main/java/picante/spice/kernel/tk/sclk/TickConverter.java create mode 100644 src/main/java/picante/spice/kernel/tk/sclk/package-info.java create mode 100644 src/main/java/picante/spice/kernel/utilities/ChebyshevTriplet.java create mode 100644 src/main/java/picante/spice/kernel/utilities/DirectRecordIndexComputer.java create mode 100644 src/main/java/picante/spice/kernel/utilities/package-info.java create mode 100644 src/main/java/picante/spice/kernelpool/BasicKernelPool.java create mode 100644 src/main/java/picante/spice/kernelpool/KernelPool.java create mode 100644 src/main/java/picante/spice/kernelpool/KernelPoolChangeEvent.java create mode 100644 src/main/java/picante/spice/kernelpool/KernelPoolChangeEventHandler.java create mode 100644 src/main/java/picante/spice/kernelpool/KernelPoolChangeListener.java create mode 100644 src/main/java/picante/spice/kernelpool/KernelPoolEventType.java create mode 100644 src/main/java/picante/spice/kernelpool/KernelPoolFormatException.java create mode 100644 src/main/java/picante/spice/kernelpool/KernelPoolValues.java create mode 100644 src/main/java/picante/spice/kernelpool/UnwritableKernelPool.java create mode 100644 src/main/java/picante/spice/kernelpool/content/AngleUnits.java create mode 100644 src/main/java/picante/spice/kernelpool/content/DynamicConstantVectorProvider.java create mode 100644 src/main/java/picante/spice/kernelpool/content/DynamicFrameProvider.java create mode 100644 src/main/java/picante/spice/kernelpool/content/DynamicUnits.java create mode 100644 src/main/java/picante/spice/kernelpool/content/DynamicVectorProvider.java create mode 100644 src/main/java/picante/spice/kernelpool/content/EulerAnglesFactory.java create mode 100644 src/main/java/picante/spice/kernelpool/content/FKFactory.java create mode 100644 src/main/java/picante/spice/kernelpool/content/KernelPoolContentFactory.java create mode 100644 src/main/java/picante/spice/kernelpool/content/KernelPoolValidatingRetriever.java create mode 100644 src/main/java/picante/spice/kernelpool/content/KernelPoolValidationException.java create mode 100644 src/main/java/picante/spice/kernelpool/content/KeywordFormatter.java create mode 100644 src/main/java/picante/spice/kernelpool/content/LSKFactory.java create mode 100644 src/main/java/picante/spice/kernelpool/content/PCKFactory.java create mode 100644 src/main/java/picante/spice/kernelpool/content/ParsingUtilities.java create mode 100644 src/main/java/picante/spice/kernelpool/content/SCLKFactory.java create mode 100644 src/main/java/picante/spice/kernelpool/content/SCLKPartitionTable.java create mode 100644 src/main/java/picante/spice/kernelpool/content/SCLKType1Creator.java create mode 100644 src/main/java/picante/spice/kernelpool/content/SCLKType1ListBasedRecordTable.java create mode 100644 src/main/java/picante/spice/kernelpool/content/SpiceAberrationCorrection.java create mode 100644 src/main/java/picante/spice/kernelpool/content/SpiceInfoHolder.java create mode 100644 src/main/java/picante/spice/kernelpool/content/TKFrameProviders.java create mode 100644 src/main/java/picante/spice/kernelpool/content/TextKernelContentInstantiationException.java create mode 100644 src/main/java/picante/spice/kernelpool/content/package-info.java create mode 100644 src/main/java/picante/spice/kernelpool/package-info.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/ParseException.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/Parser.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/ParserConstants.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/ParserTokenManager.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/SimpleCharStream.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/TextKernelParser.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/Token.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/TokenMgrError.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/package-info.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/ParseException.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/Parser.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/ParserConstants.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/ParserTokenManager.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/SimpleCharStream.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/TParser.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/TParserConstants.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/TParserTokenManager.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/TimeParser.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/Token.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/TokenMgrError.java create mode 100644 src/main/java/picante/spice/kernelpool/parser/time/package-info.java create mode 100644 src/main/java/picante/spice/package-info.java create mode 100644 src/main/java/picante/spice/provided/CanonicalizedStringKeyMap.java create mode 100644 src/main/java/picante/spice/provided/CanonicalizedStringValueMap.java create mode 100644 src/main/java/picante/spice/provided/EphemerisNames.java create mode 100644 src/main/java/picante/spice/provided/FrameNames.java create mode 100644 src/main/java/picante/spice/provided/InertialFrames.java create mode 100644 src/main/java/picante/spice/provided/package-info.java create mode 100644 src/main/java/picante/surfaces/CachedSurfaceNormalComputer.java create mode 100644 src/main/java/picante/surfaces/Circle.java create mode 100644 src/main/java/picante/surfaces/Cylinder.java create mode 100644 src/main/java/picante/surfaces/Ellipse.java create mode 100644 src/main/java/picante/surfaces/Ellipsoid.java create mode 100644 src/main/java/picante/surfaces/EllipsoidalIntersectionComputer.java create mode 100644 src/main/java/picante/surfaces/EllipsoidalLimbComputer.java create mode 100644 src/main/java/picante/surfaces/EllipsoidalPlaneIntersectionComputer.java create mode 100644 src/main/java/picante/surfaces/EllipsoidalSurfaceNormalComputer.java create mode 100644 src/main/java/picante/surfaces/NoIntersectionException.java create mode 100644 src/main/java/picante/surfaces/OffsetSurface.java create mode 100644 src/main/java/picante/surfaces/Plane.java create mode 100644 src/main/java/picante/surfaces/PlaneIntersectionComputer.java create mode 100644 src/main/java/picante/surfaces/RotatedSurface.java create mode 100644 src/main/java/picante/surfaces/Sphere.java create mode 100644 src/main/java/picante/surfaces/SphericalSurfaceNormalComputer.java create mode 100644 src/main/java/picante/surfaces/Surface.java create mode 100644 src/main/java/picante/surfaces/SurfaceIntersectionComputer.java create mode 100644 src/main/java/picante/surfaces/SurfaceNormalComputer.java create mode 100644 src/main/java/picante/surfaces/SurfaceUtilities.java create mode 100644 src/main/java/picante/surfaces/Surfaces.java create mode 100644 src/main/java/picante/surfaces/UnwritableEllipse.java create mode 100644 src/main/java/picante/surfaces/UnwritablePlane.java create mode 100644 src/main/java/picante/surfaces/package-info.java create mode 100644 src/main/java/picante/time/Calendarizer.java create mode 100644 src/main/java/picante/time/DaySecond.java create mode 100644 src/main/java/picante/time/DelimitedYDHMSFormatter.java create mode 100644 src/main/java/picante/time/DelimitedYMDHMSFormatter.java create mode 100644 src/main/java/picante/time/FunctionOfTime.java create mode 100644 src/main/java/picante/time/FunctionOfTimeFactory.java create mode 100644 src/main/java/picante/time/GPSTimeSystem.java create mode 100644 src/main/java/picante/time/IDelimitedTimeFormatter.java create mode 100644 src/main/java/picante/time/ISOStringParser.java create mode 100644 src/main/java/picante/time/ITSRangeSource.java create mode 100644 src/main/java/picante/time/ITimeFormatter.java create mode 100644 src/main/java/picante/time/ITimeStringParser.java create mode 100644 src/main/java/picante/time/InvalidUTCStringException.java create mode 100644 src/main/java/picante/time/JulianDate.java create mode 100644 src/main/java/picante/time/LeapsecondEntry.java create mode 100644 src/main/java/picante/time/SCLKTimeSystem.java create mode 100644 src/main/java/picante/time/TAITimeSystem.java create mode 100644 src/main/java/picante/time/TDBQuadTime.java create mode 100644 src/main/java/picante/time/TDBQuadTimeSystem.java create mode 100644 src/main/java/picante/time/TDBTimeSystem.java create mode 100644 src/main/java/picante/time/TDTTimeSystem.java create mode 100644 src/main/java/picante/time/TSEpoch.java create mode 100644 src/main/java/picante/time/TSId.java create mode 100644 src/main/java/picante/time/TSManager.java create mode 100644 src/main/java/picante/time/TSRange.java create mode 100644 src/main/java/picante/time/TSRangeSerializable.java create mode 100644 src/main/java/picante/time/TimeAdapter.java create mode 100644 src/main/java/picante/time/TimeConversion.java create mode 100644 src/main/java/picante/time/TimeSystem.java create mode 100644 src/main/java/picante/time/TimeSystemConverter.java create mode 100644 src/main/java/picante/time/TimeSystemTransform.java create mode 100644 src/main/java/picante/time/TimeSystems.java create mode 100644 src/main/java/picante/time/TimeValueParser.java create mode 100644 src/main/java/picante/time/UTCEpoch.java create mode 100644 src/main/java/picante/time/UTCFactory.java create mode 100644 src/main/java/picante/time/UTCOutputType.java create mode 100644 src/main/java/picante/time/UTCStringParser.java create mode 100644 src/main/java/picante/time/UTCTimeSystem.java create mode 100644 src/main/java/picante/time/UTCYearFracFormatter.java create mode 100644 src/main/java/picante/time/UnknownTimeSystemException.java create mode 100644 src/main/java/picante/time/package-info.java create mode 100644 src/main/java/picante/timeline/AbstractStateTimeline.java create mode 100644 src/main/java/picante/timeline/Direction.java create mode 100644 src/main/java/picante/timeline/StateTimeline.java create mode 100644 src/main/java/picante/timeline/StateTimelineCollection.java create mode 100644 src/main/java/picante/timeline/StateTimelineIterator.java create mode 100644 src/main/java/picante/timeline/package-info.java create mode 100644 src/main/java/picante/units/FundamentalPhysicalConstants.java create mode 100644 src/main/java/picante/units/LocalTimeToRadiansConversions.java create mode 100644 src/main/java/picante/units/package-info.java create mode 100644 src/main/java/picante/utilities/InitSpice.java create mode 100644 src/main/java/picante/utilities/SPICEUtils.java create mode 100644 src/main/javadoc/picante/cartography/projections/doc-files/dsmap_polar.cat create mode 100644 src/main/javadoc/picante/cartography/projections/doc-files/usgs_snyder_brownbook.pdf create mode 100644 src/main/javadoc/picante/math/coords/doc-files/cartCoord.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/cartToCylCoord.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/cartToCylVect.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/cartToSphCoord.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/cartToSphVect.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/cartVect.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/cylCoord.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/cylToCartCoord.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/cylToCartVect.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/cylVect.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/sphCoord.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/sphToCartCoord.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/sphToCartVect.png create mode 100644 src/main/javadoc/picante/math/coords/doc-files/sphVect.png create mode 100644 src/main/javadoc/picante/math/doc-files/statistics.pdf create mode 100644 src/main/javadoc/picante/math/functions/legendrepoly/doc-files/generalLegendreEquation.svg create mode 100644 src/main/javadoc/picante/math/functions/legendrepoly/doc-files/plm_ident_1.svg create mode 100644 src/main/javadoc/picante/math/functions/legendrepoly/doc-files/plm_ident_2.svg create mode 100644 src/main/javadoc/picante/math/functions/legendrepoly/doc-files/plm_ident_3.svg create mode 100644 src/main/javadoc/picante/math/functions/legendrepoly/doc-files/sphereHarm.svg create mode 100644 src/main/javadoc/picante/math/functions/legendrepoly/doc-files/sphereHarm_2.svg create mode 100644 src/main/javadoc/picante/mechanics/rotations/doc-files/on_averaging_rotations.pdf create mode 100644 src/main/javadoc/picante/progress/package.html create mode 100644 src/main/resources/picante/spice/kernelpool/parser/Parser.jj create mode 100644 src/main/resources/picante/spice/kernelpool/parser/time/Parser.jj create mode 100644 src/main/resources/picante/spice/kernelpool/parser/time/TParser.jj create mode 100644 src/main/resources/picante/time/parameters.properties create mode 100644 src/test/java/picante/collections/AbstractIndexedIteratorTest.java create mode 100644 src/test/java/picante/collections/ArrayUtilitiesTest.java create mode 100644 src/test/java/picante/collections/CollectionUtilitiesTest.java create mode 100644 src/test/java/picante/data/list/AbstractFixedLengthGaugedRetrievableWithExceptionsTest.java create mode 100644 src/test/java/picante/data/list/AbstractFixedLengthRetrievableWithExceptionsTest.java create mode 100644 src/test/java/picante/data/list/AbstractGaugedRetrievableWithExceptionsTest.java create mode 100644 src/test/java/picante/data/list/AbstractRetrievableWithExceptionsTest.java create mode 100644 src/test/java/picante/data/list/GaugeablesTest.java create mode 100644 src/test/java/picante/data/list/SearcherTest.java create mode 100644 src/test/java/picante/demo/TestBODVCD.java create mode 100644 src/test/java/picante/demo/TestCKCOV.java create mode 100644 src/test/java/picante/demo/TestCKGPAV.java create mode 100644 src/test/java/picante/demo/TestFOVRAY.java create mode 100644 src/test/java/picante/demo/TestGETFOV.java create mode 100644 src/test/java/picante/demo/TestGFDIST.java create mode 100644 src/test/java/picante/demo/TestGFTFOV.java create mode 100644 src/test/java/picante/demo/TestILUMIN.java create mode 100644 src/test/java/picante/demo/TestLATREC.java create mode 100644 src/test/java/picante/demo/TestOCCULT.java create mode 100644 src/test/java/picante/demo/TestPXFORM.java create mode 100644 src/test/java/picante/demo/TestSCE2C.java create mode 100644 src/test/java/picante/demo/TestSCE2S.java create mode 100644 src/test/java/picante/demo/TestSCE2T.java create mode 100644 src/test/java/picante/demo/TestSCENCD.java create mode 100644 src/test/java/picante/demo/TestSCS2E.java create mode 100644 src/test/java/picante/demo/TestSCT2E.java create mode 100644 src/test/java/picante/demo/TestSINCPT.java create mode 100644 src/test/java/picante/demo/TestSPKCOV.java create mode 100644 src/test/java/picante/demo/TestSPKEZR.java create mode 100644 src/test/java/picante/demo/TestSTR2ET.java create mode 100644 src/test/java/picante/demo/TestSXFORM.java create mode 100644 src/test/java/picante/demo/TestTPARSE.java create mode 100644 src/test/java/picante/designpatterns/BlueprintsTest.java create mode 100644 src/test/java/picante/math/EstimatorTest.java create mode 100644 src/test/java/picante/math/PicanteMathPerformanceTest.java create mode 100644 src/test/java/picante/math/PicanteMathTest.java create mode 100644 src/test/java/picante/math/StatisticsBuilderTest.java create mode 100644 src/test/java/picante/math/StatisticsTest.java create mode 100644 src/test/java/picante/math/TrackerTest.java create mode 100644 src/test/java/picante/math/cones/BasicPathIterator.java create mode 100644 src/test/java/picante/math/cones/GeometrySanitizerTest.java create mode 100644 src/test/java/picante/math/cones/PathSplitterTest.java create mode 100644 src/test/java/picante/math/cones/SequencesConverterTest.java create mode 100644 src/test/java/picante/math/cones/TestCones.java create mode 100644 src/test/java/picante/math/coords/CartesianStateIJTest.java create mode 100644 src/test/java/picante/math/coords/CartesianStateTest.java create mode 100644 src/test/java/picante/math/coords/CartesianVectorFieldValueTest.java create mode 100644 src/test/java/picante/math/coords/CoordConvertersRandomStatesTest.java create mode 100644 src/test/java/picante/math/coords/CoordConvertersTest.java create mode 100644 src/test/java/picante/math/coords/CoordUtilitiesTest.java create mode 100644 src/test/java/picante/math/coords/CylindricalCoordConverterTest.java create mode 100644 src/test/java/picante/math/coords/CylindricalStateTest.java create mode 100644 src/test/java/picante/math/coords/CylindricalToCartesianJacobianTest.java create mode 100644 src/test/java/picante/math/coords/CylindricalVectorTest.java create mode 100644 src/test/java/picante/math/coords/LatitudinalCoordConverterTest.java create mode 100644 src/test/java/picante/math/coords/LatitudinalStateTest.java create mode 100644 src/test/java/picante/math/coords/LatitudinalVectorTest.java create mode 100644 src/test/java/picante/math/coords/PolarCoordConverterTest.java create mode 100644 src/test/java/picante/math/coords/PolarStateTest.java create mode 100644 src/test/java/picante/math/coords/PolarVectorTest.java create mode 100644 src/test/java/picante/math/coords/RaDecCoordConverterTest.java create mode 100644 src/test/java/picante/math/coords/RaDecVectorTest.java create mode 100644 src/test/java/picante/math/coords/SphericalCoordConverterTest.java create mode 100644 src/test/java/picante/math/coords/SphericalStateTest.java create mode 100644 src/test/java/picante/math/coords/SphericalToCartesianJacobianTest.java create mode 100644 src/test/java/picante/math/coords/SphericalVectorTest.java create mode 100644 src/test/java/picante/math/coords/VectorFieldValueConversionsTest.java create mode 100644 src/test/java/picante/math/functions/ChebyshevPolynomialTest.java create mode 100644 src/test/java/picante/math/functions/DifferentiableUnivariateFunctionsTest.java create mode 100644 src/test/java/picante/math/functions/HermitePolynomialTest.java create mode 100644 src/test/java/picante/math/functions/LagrangePolynomialTest.java create mode 100644 src/test/java/picante/math/functions/PolynomialsTest.java create mode 100644 src/test/java/picante/math/functions/UnivariateFunctionsTest.java create mode 100644 src/test/java/picante/math/functions/UnivariatePolynomialTest.java create mode 100644 src/test/java/picante/math/intervals/IntervalSetBuilderTest.java create mode 100644 src/test/java/picante/math/intervals/IntervalSetTest.java create mode 100644 src/test/java/picante/math/intervals/IntervalTest.java create mode 100644 src/test/java/picante/math/intervals/IntervalWithValueTest.java create mode 100644 src/test/java/picante/math/intervals/UnwritableIntervalTest.java create mode 100644 src/test/java/picante/math/vectorspace/InternalOperationsTest.java create mode 100644 src/test/java/picante/math/vectorspace/MatrixIJKTest.java create mode 100644 src/test/java/picante/math/vectorspace/MatrixIJTest.java create mode 100644 src/test/java/picante/math/vectorspace/RotationMatrixIJKTest.java create mode 100644 src/test/java/picante/math/vectorspace/UnwritableMatrixIJKTest.java create mode 100644 src/test/java/picante/math/vectorspace/UnwritableMatrixIJTest.java create mode 100644 src/test/java/picante/math/vectorspace/UnwritableRotationMatrixIJKTest.java create mode 100644 src/test/java/picante/math/vectorspace/UnwritableVectorIJKTest.java create mode 100644 src/test/java/picante/math/vectorspace/UnwritableVectorIJTest.java create mode 100644 src/test/java/picante/math/vectorspace/VectorIJKTest.java create mode 100644 src/test/java/picante/math/vectorspace/VectorIJTest.java create mode 100644 src/test/java/picante/mechanics/AbstractPositionVectorFunctionWrapperTest.java create mode 100644 src/test/java/picante/mechanics/AbstractReversedFrameTransformFunctionWrapperTest.java create mode 100644 src/test/java/picante/mechanics/AbstractReversedPositionVectorFunctionWrapperTest.java create mode 100644 src/test/java/picante/mechanics/AbstractReversedStateTransformFunctionWrapperTest.java create mode 100644 src/test/java/picante/mechanics/AbstractReversedStateVectorFunctionWrapperTest.java create mode 100644 src/test/java/picante/mechanics/AbstractStateVectorFunctionWrapperTest.java create mode 100644 src/test/java/picante/mechanics/CelestialFramesTest.java create mode 100644 src/test/java/picante/mechanics/ConstantFrameTransformFunction.java create mode 100644 src/test/java/picante/mechanics/ConstantPositionVectorFunction.java create mode 100644 src/test/java/picante/mechanics/ConstantStateTransformFunction.java create mode 100644 src/test/java/picante/mechanics/ConstantStateVectorFunction.java create mode 100644 src/test/java/picante/mechanics/CoveragesTest.java create mode 100644 src/test/java/picante/mechanics/EphemerisCodePair.java create mode 100644 src/test/java/picante/mechanics/EphemerisProviderTest.java create mode 100644 src/test/java/picante/mechanics/EphemerisTestCodes.java create mode 100644 src/test/java/picante/mechanics/FrameCodePair.java create mode 100644 src/test/java/picante/mechanics/FrameProviderTest.java create mode 100644 src/test/java/picante/mechanics/FrameTestCodes.java create mode 100644 src/test/java/picante/mechanics/FrameTransformFunctionsTest.java create mode 100644 src/test/java/picante/mechanics/HourAngleTest.java create mode 100644 src/test/java/picante/mechanics/IntervalCoverageTest.java create mode 100644 src/test/java/picante/mechanics/IntervalSetCoverageTest.java create mode 100644 src/test/java/picante/mechanics/MechanicsTest.java create mode 100644 src/test/java/picante/mechanics/PositionVectorFunctionsTest.java create mode 100644 src/test/java/picante/mechanics/StateTransformFunctionsTest.java create mode 100644 src/test/java/picante/mechanics/StateTransformTest.java create mode 100644 src/test/java/picante/mechanics/StateVectorFunctionsTest.java create mode 100644 src/test/java/picante/mechanics/StateVectorTest.java create mode 100644 src/test/java/picante/mechanics/UnwritableStateTransformTest.java create mode 100644 src/test/java/picante/mechanics/UnwritableStateVectorTest.java create mode 100644 src/test/java/picante/mechanics/providers/aberrated/InertialStellarAberratedStateVectorFunctionTest.java create mode 100644 src/test/java/picante/mechanics/providers/aberrated/NewtonianAberratedEphemerisProviderTest.java create mode 100644 src/test/java/picante/mechanics/providers/lockable/LockableEphemerisProviderFrameTest.java create mode 100644 src/test/java/picante/mechanics/providers/lockable/LockableEphemerisProviderTest.java create mode 100644 src/test/java/picante/mechanics/providers/lockable/LockableFrameProviderTest.java create mode 100644 src/test/java/picante/mechanics/providers/reference/ChainLinkEngineTest.java create mode 100644 src/test/java/picante/mechanics/providers/reference/EngineTestCodes.java create mode 100644 src/test/java/picante/mechanics/providers/reference/ReferenceEphemerisProviderFrameTest.java create mode 100644 src/test/java/picante/mechanics/providers/reference/ReferenceEphemerisProviderTest.java create mode 100644 src/test/java/picante/mechanics/providers/reference/ReferenceFrameProviderTest.java create mode 100644 src/test/java/picante/mechanics/rotations/AxisAndAngleTest.java create mode 100644 src/test/java/picante/mechanics/rotations/DifferentiatedEulerAnglesABATest.java create mode 100644 src/test/java/picante/mechanics/rotations/DifferentiatedEulerAnglesABCLeftTest.java create mode 100644 src/test/java/picante/mechanics/rotations/DifferentiatedEulerAnglesABCRightTest.java create mode 100644 src/test/java/picante/mechanics/rotations/DifferentiatedEulerAnglesTest.java create mode 100644 src/test/java/picante/mechanics/rotations/DifferentiatedRotationTest.java create mode 100644 src/test/java/picante/mechanics/rotations/DifferentiatedRotationsTest.java create mode 100644 src/test/java/picante/mechanics/rotations/EulerAnglesABATest.java create mode 100644 src/test/java/picante/mechanics/rotations/EulerAnglesABCLeftTest.java create mode 100644 src/test/java/picante/mechanics/rotations/EulerAnglesABCRightTest.java create mode 100644 src/test/java/picante/mechanics/rotations/EulerAnglesAxisTest.java create mode 100644 src/test/java/picante/mechanics/rotations/EulerAnglesTest.java create mode 100644 src/test/java/picante/mechanics/rotations/MatrixWrapperTest.java create mode 100644 src/test/java/picante/mechanics/rotations/QuaternionTest.java create mode 100644 src/test/java/picante/mechanics/rotations/RotationTest.java create mode 100644 src/test/java/picante/mechanics/rotations/RotationsTest.java create mode 100644 src/test/java/picante/mechanics/rotations/WrapperRateTest.java create mode 100644 src/test/java/picante/mechanics/utilities/AbstractFrameTransformFunctionTest.java create mode 100644 src/test/java/picante/mechanics/utilities/AbstractPositionVectorFunctionTest.java create mode 100644 src/test/java/picante/mechanics/utilities/ChainLinkEngineTest.java create mode 100644 src/test/java/picante/mechanics/utilities/EngineTestCodes.java create mode 100644 src/test/java/picante/mechanics/utilities/FixedOffsetFrameFunctionTest.java create mode 100644 src/test/java/picante/mechanics/utilities/FixedOffsetPositionFunctionTest.java create mode 100644 src/test/java/picante/mechanics/utilities/ScaledPositionVectorFunctionTest.java create mode 100644 src/test/java/picante/mechanics/utilities/ScaledStateVectorFunctionTest.java create mode 100644 src/test/java/picante/mechanics/utilities/SimpleEphemerisIDTest.java create mode 100644 src/test/java/picante/mechanics/utilities/SimpleFrameIDTest.java create mode 100644 src/test/java/picante/spice/EphemerisIDBindingManagerTest.java create mode 100644 src/test/java/picante/spice/FrameIDBindingManagerTest.java create mode 100644 src/test/java/picante/spice/KernelManagerTest.java create mode 100644 src/test/java/picante/spice/NameIDBindingListTest.java create mode 100644 src/test/java/picante/spice/SpiceEnvironmentBuilderTest.java create mode 100644 src/test/java/picante/spice/SpiceEnvironmentTest.java create mode 100644 src/test/java/picante/spice/UtilitiesTest.java create mode 100644 src/test/java/picante/spice/adapters/BinaryPCKAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/BinaryPCKSegmentAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/CKAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/CKMetaDataTest.java create mode 100644 src/test/java/picante/spice/adapters/CKSegmentAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/CKSegmentWithAVAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/EphemerisSourceFactoryTest.java create mode 100644 src/test/java/picante/spice/adapters/FKAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/FinalKeyMapTest.java create mode 100644 src/test/java/picante/spice/adapters/FrameSourceFactoryTest.java create mode 100644 src/test/java/picante/spice/adapters/InertialFrameAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/KernelPoolMetaDataTest.java create mode 100644 src/test/java/picante/spice/adapters/PCKAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/PCKMetaDataTest.java create mode 100644 src/test/java/picante/spice/adapters/SPKAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/SPKMetaDataTest.java create mode 100644 src/test/java/picante/spice/adapters/SPKSegmentAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/SclkRegistryTest.java create mode 100644 src/test/java/picante/spice/adapters/SpiceClassedFrameIDTest.java create mode 100644 src/test/java/picante/spice/adapters/SpiceEphemerisIDTest.java create mode 100644 src/test/java/picante/spice/adapters/SpiceFrameIDTest.java create mode 100644 src/test/java/picante/spice/adapters/TKFrameFunctionAdapterTest.java create mode 100644 src/test/java/picante/spice/adapters/TdbCoverageTest.java create mode 100644 src/test/java/picante/spice/adapters/TextPCKAdapterTest.java create mode 100644 src/test/java/picante/spice/daf/DAFFactoryTest.java create mode 100644 src/test/java/picante/spice/daf/DAFSupportTest.java create mode 100644 src/test/java/picante/spice/daf/bytebuffer/ByteBufferDAFSegmentTest.java create mode 100644 src/test/java/picante/spice/daf/bytebuffer/ByteBufferDAFTest.java create mode 100644 src/test/java/picante/spice/daf/content/CKSegmentFactoryTest.java create mode 100644 src/test/java/picante/spice/daf/content/DAFBackedCKContentTest.java create mode 100644 src/test/java/picante/spice/daf/content/DAFBackedSPKContentTest.java create mode 100644 src/test/java/picante/spice/daf/content/DAFBasedKernelContentTest.java create mode 100644 src/test/java/picante/spice/daf/content/DAFContentServicesTest.java create mode 100644 src/test/java/picante/spice/daf/content/DAFMetaDataTest.java create mode 100644 src/test/java/picante/spice/daf/content/PCKSegmentFactoryTest.java create mode 100644 src/test/java/picante/spice/daf/content/SPKSegmentFactoryTest.java create mode 100644 src/test/java/picante/spice/daf/content/recordtables/ArrayDAFSegment.java create mode 100644 src/test/java/picante/spice/daf/content/recordtables/DAFChebyshevTripletRecordListTest.java create mode 100644 src/test/java/picante/spice/daf/content/recordtables/DAFQuaternionAVRecordTableTest.java create mode 100644 src/test/java/picante/spice/daf/content/recordtables/DAFQuaternionRecordTableTest.java create mode 100644 src/test/java/picante/spice/daf/content/recordtables/DAFRecordRetrieverTest.java create mode 100644 src/test/java/picante/spice/daf/content/recordtables/DAFStateVectorRecordListTest.java create mode 100644 src/test/java/picante/spice/daf/content/recordtables/DAFStateVectorRecordTableTest.java create mode 100644 src/test/java/picante/spice/daf/content/recordtables/DAFTimeListTableTest.java create mode 100644 src/test/java/picante/spice/daf/content/recordtables/DAFType1SPKRecordTableTest.java create mode 100644 src/test/java/picante/spice/daf/content/recordtables/DAFType3SPKRecordListTest.java create mode 100644 src/test/java/picante/spice/fov/FOVFactoryTest.java create mode 100644 src/test/java/picante/spice/kernel/ByteBufferReaderTest.java create mode 100644 src/test/java/picante/spice/kernel/ForgivingKernelLoaderTest.java create mode 100644 src/test/java/picante/spice/kernel/KernelLoaderTest.java create mode 100644 src/test/java/picante/spice/kernel/KernelTest.java create mode 100644 src/test/java/picante/spice/kernel/ck/AbstractCKSegmentTest.java create mode 100644 src/test/java/picante/spice/kernel/ck/CKTest.java create mode 100644 src/test/java/picante/spice/kernel/ck/CKType3Test.java create mode 100644 src/test/java/picante/spice/kernel/ck/CKType3WithAVTest.java create mode 100644 src/test/java/picante/spice/kernel/ck/IntervalStartsCKCoverageTest.java create mode 100644 src/test/java/picante/spice/kernel/ck/TimeListArrayWrapper.java create mode 100644 src/test/java/picante/spice/kernel/ck/Type2InterpolatorTest.java create mode 100644 src/test/java/picante/spice/kernel/ck/Type3InterpolatorTest.java create mode 100644 src/test/java/picante/spice/kernel/pck/AbstractPCKSegmentTest.java create mode 100644 src/test/java/picante/spice/kernel/pck/PCKTest.java create mode 100644 src/test/java/picante/spice/kernel/pck/PCKType2RecordTest.java create mode 100644 src/test/java/picante/spice/kernel/pck/PCKType2Test.java create mode 100644 src/test/java/picante/spice/kernel/spk/AbstractSPKSegmentTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/AbstractSPKTypeTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/EquinoctialElementsTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/FirstIndexRetrieverListTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/FirstIndexRetrieverTableTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType12Test.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType13Test.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType17Test.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType1RecordTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType1Test.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType2RecordTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType2Test.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType3RecordTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType3Test.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType5EvaluatorTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType5Test.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType8Test.java create mode 100644 src/test/java/picante/spice/kernel/spk/SPKType9Test.java create mode 100644 src/test/java/picante/spice/kernel/spk/StateVectorDirectLookupRecordTableTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/StumpffFunctionsTest.java create mode 100644 src/test/java/picante/spice/kernel/spk/TwoBodyPropagatorTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/TextKernelTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/FrameInfoTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/FrameKernelTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/FrameTypeTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/TKFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/dynamic/DefinableStateVectorFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/dynamic/DynamicEulerFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/dynamic/DynamicFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/dynamic/DynamicFrozenFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/dynamic/DynamicInertialFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/dynamic/DynamicMeanEclipticFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/dynamic/DynamicMeanEquatorFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/dynamic/DynamicTrueEquatorFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/dynamic/DynamicTwoVectorFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/fk/dynamic/SpiceEnvironmentSetup.java create mode 100644 src/test/java/picante/spice/kernel/tk/lsk/LSKTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/lsk/TDTProviderTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/lsk/TestUtilities.java create mode 100644 src/test/java/picante/spice/kernel/tk/pck/JEDOffsetConverterTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/pck/PCKFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/pck/PCKWithNutationFrameFunctionTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/pck/TextPCKTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/sclk/AssertionUtilities.java create mode 100644 src/test/java/picante/spice/kernel/tk/sclk/SCLKKernelTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/sclk/SCLKTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/sclk/SCLKType1RecordTest.java create mode 100644 src/test/java/picante/spice/kernel/tk/sclk/SCLKType1Test.java create mode 100644 src/test/java/picante/spice/kernel/tk/sclk/SCLKType1TickConverterTest.java create mode 100644 src/test/java/picante/spice/kernel/utilities/DirectRecordIndexComputerTest.java create mode 100644 src/test/java/picante/spice/kernelpool/AssertionUtilities.java create mode 100644 src/test/java/picante/spice/kernelpool/BasicKernelPoolTest.java create mode 100644 src/test/java/picante/spice/kernelpool/ImmutableKernelPoolTest.java create mode 100644 src/test/java/picante/spice/kernelpool/KernelPoolChangeEventHandlerTest.java create mode 100644 src/test/java/picante/spice/kernelpool/KernelPoolChangeEventTest.java create mode 100644 src/test/java/picante/spice/kernelpool/KernelPoolTest.java create mode 100644 src/test/java/picante/spice/kernelpool/KernelPoolValuesTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/AngleUnitsTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/AxisTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/DynamicConstantVectorProviderTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/DynamicFrameProviderTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/DynamicVectorProviderTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/EulerAnglesFactoryTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/FKFactoryTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/KernelPoolBuilder.java create mode 100644 src/test/java/picante/spice/kernelpool/content/KernelPoolContentFactoryTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/KernelPoolValidatingRetrieverTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/KeywordFormatterTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/LSKFactoryTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/LargeAngles.java create mode 100644 src/test/java/picante/spice/kernelpool/content/MockSpice.java create mode 100644 src/test/java/picante/spice/kernelpool/content/PCKFactoryTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/SCLKFactoryTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/SCLKPartitionTableTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/SCLKType1CreatorTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/SCLKType1ListBasedRecordTableTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/SpiceAberrationCorrectionTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/TKFrameProvidersTest.java create mode 100644 src/test/java/picante/spice/kernelpool/content/TwoVectorMatrixTest.java create mode 100644 src/test/java/picante/spice/kernelpool/parser/TextKernelParserTest.java create mode 100644 src/test/java/picante/spice/kernelpool/parser/time/TimeParserTest.java create mode 100644 src/test/java/picante/spice/provided/CanonicalizedStringKeyMapTest.java create mode 100644 src/test/java/picante/spice/provided/CanonicalizedStringValueMapTest.java create mode 100644 src/test/java/picante/spice/provided/EphemerisNamesTest.java create mode 100644 src/test/java/picante/spice/provided/FrameNamesTest.java create mode 100644 src/test/java/picante/spice/provided/InertialFramesTest.java create mode 100644 src/test/java/picante/time/ISOStringParserTest.java create mode 100644 src/test/java/picante/time/JulianDateTest.java create mode 100644 src/test/java/picante/time/TimeAdapterTest.java create mode 100644 src/test/java/picante/time/UTCEpochTest.java create mode 100644 src/test/java/picante/time/UTCFactoryTest.java create mode 100644 src/test/java/picante/time/UTCStringParserTest.java create mode 100644 src/test/java/picante/timeline/AbstractStateTimelineTest.java create mode 100644 src/test/java/picante/timeline/StateTimelineBuilderTest.java create mode 100644 src/test/java/picante/timeline/StateTimelineTest.java create mode 100644 src/test/java/picante/units/AngleConversionsTest.java create mode 100644 src/test/java/picante/units/LocalTimeToRadiansConversionsTest.java create mode 100644 src/test/java/picante/utilities/TestChainLinkEngine.java create mode 100644 src/test/java/picante/utilities/TestInitSpice.java create mode 100644 src/test/java/picante/utilities/TestSPICEUtils.java create mode 100644 src/test/java/picante/utilities/TestTimeConversion.java create mode 100755 src/test/resources/kernels/ck/getCK.bash create mode 100644 src/test/resources/kernels/fk/cas_v37.tf create mode 100644 src/test/resources/kernels/fk/cas_v40.tf create mode 100644 src/test/resources/kernels/fk/earth_topo_050714.tf create mode 100644 src/test/resources/kernels/fk/earth_topo_201023.tf create mode 100644 src/test/resources/kernels/ik/cas_iss_v09.ti create mode 100644 src/test/resources/kernels/ik/cas_iss_v10.ti create mode 100644 src/test/resources/kernels/ik/cas_uvis_v06.ti create mode 100644 src/test/resources/kernels/ik/example.ti create mode 100644 src/test/resources/kernels/ik/mgs_moc_v20.ti create mode 100644 src/test/resources/kernels/lsk/naif0008.tls create mode 100644 src/test/resources/kernels/lsk/naif0009.tls create mode 100644 src/test/resources/kernels/lsk/naif0010.tls create mode 100644 src/test/resources/kernels/lsk/naif0011.tls create mode 100644 src/test/resources/kernels/lsk/naif0012.tls create mode 100644 src/test/resources/kernels/mk/geometry.tm create mode 100644 src/test/resources/kernels/mk/multiThreaded.tm create mode 100644 src/test/resources/kernels/pck/cpck05Mar2004.tpc create mode 100644 src/test/resources/kernels/pck/cpck26Jan2007.tpc create mode 100644 src/test/resources/kernels/pck/earth_latest_high_prec.bpc create mode 100644 src/test/resources/kernels/pck/pck00008.tpc create mode 100644 src/test/resources/kernels/pck/pck00009.tpc create mode 100644 src/test/resources/kernels/pck/pck00010.tpc create mode 100644 src/test/resources/kernels/sclk/cas00071.tsc create mode 100644 src/test/resources/kernels/sclk/cas00082.tsc create mode 100644 src/test/resources/kernels/sclk/cas00084.tsc create mode 100644 src/test/resources/kernels/sclk/cas00085.tsc create mode 100644 src/test/resources/kernels/sclk/cas00145.tsc create mode 100644 src/test/resources/kernels/sclk/mgs_sclkscet_00061.tsc create mode 100644 src/test/resources/kernels/sclk/sdu_sclkscet_00074.tsc create mode 100644 src/test/resources/kernels/sclk/vg200006.tsc create mode 100755 src/test/resources/kernels/spk/getSPK.bash create mode 100644 src/test/resources/picante/events/lookuptables/trackdef/st1.txt create mode 100644 src/test/resources/picante/events/lookuptables/trackdef/st2.txt create mode 100644 src/test/resources/picante/events/lookuptables/trackdef/st3.txt create mode 100644 src/test/resources/picante/math/CrucibleMathPerformanceTest_output.txt create mode 100644 src/test/resources/picante/math/coords/testFromCartToCoord.for create mode 100644 src/test/resources/picante/math/coords/testFromCoordToCart.for create mode 100644 src/test/resources/picante/math/coords/testFromCylToCartOutput.txt create mode 100644 src/test/resources/picante/math/coords/testFromLatToCartOutput.txt create mode 100644 src/test/resources/picante/math/coords/testFromSphToCartOutput.txt create mode 100644 src/test/resources/picante/math/coords/testRandomCartesianInput.txt create mode 100644 src/test/resources/picante/math/coords/testSpiceCyl.txt create mode 100644 src/test/resources/picante/math/coords/testSpiceLat.txt create mode 100644 src/test/resources/picante/math/coords/testSpiceSph.txt create mode 100644 src/test/resources/picante/math/vectorfields/SampleScalar.docx create mode 100644 src/test/resources/picante/mechanics/providers/aberrated/lsk.tls create mode 100644 src/test/resources/picante/mechanics/providers/aberrated/pck.tpc create mode 100644 src/test/resources/picante/modeling/drivers/tests/NIST_Misra1a.dat create mode 100644 src/test/resources/picante/spacephysicsdata/dst/dst_realtime/201207/index.html create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/20120725_ace_mag_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/201208_ace_loc_1h.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/ace_mag_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/ace_swepam_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141120_ace_epam_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141120_ace_mag_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141120_ace_sis_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141120_ace_swepam_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141121_ace_epam_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141121_ace_mag_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141121_ace_sis_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141121_ace_swepam_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141122_ace_epam_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141122_ace_mag_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141122_ace_sis_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141122_ace_swepam_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141123_ace_epam_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141123_ace_mag_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141123_ace_sis_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141123_ace_swepam_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141124_ace_epam_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141124_ace_mag_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141124_ace_sis_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141124_ace_swepam_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141125_ace_epam_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141125_ace_mag_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141125_ace_sis_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/20141125_ace_swepam_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/README.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/ace_epam_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/ace_mag_1m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/ace_sis_5m.txt create mode 100644 src/test/resources/picante/spacephysicsdata/realtimeace/testdir/ace_swepam_1m.txt create mode 100644 src/test/resources/picante/spice/daf/bytebuffer/testfive.daf create mode 100644 src/test/resources/picante/spice/daf/bytebuffer/testfour.daf create mode 100644 src/test/resources/picante/spice/daf/bytebuffer/testone.daf create mode 100644 src/test/resources/picante/spice/daf/bytebuffer/testseven.daf create mode 100644 src/test/resources/picante/spice/daf/bytebuffer/testsix.daf create mode 100644 src/test/resources/picante/spice/daf/bytebuffer/testthree.daf create mode 100644 src/test/resources/picante/spice/daf/bytebuffer/testtwo.daf create mode 100644 src/test/resources/picante/spice/daf/content/test.daf create mode 100644 src/test/resources/picante/spice/fov/example.ti create mode 100644 src/test/resources/picante/spice/kernel/spk/type12_5d_spice.txt create mode 100644 src/test/resources/picante/spice/kernel/spk/type13_5d_spice.txt create mode 100644 src/test/resources/picante/spice/kernel/spk/type8_4d_spice.txt create mode 100644 src/test/resources/picante/spice/kernel/spk/type8_5d_spice.txt create mode 100644 src/test/resources/picante/spice/kernel/spk/type9_4d_spice.txt create mode 100644 src/test/resources/picante/spice/kernel/spk/type9_5d_spice.txt create mode 100644 src/test/resources/picante/spice/kernel/test.tls create mode 100644 src/test/resources/picante/spice/kernel/tk/fk/dynamic/custom.tf create mode 100644 src/test/resources/picante/spice/kernel/tk/fk/dynamic/pck00010.tpc create mode 100644 src/test/resources/picante/spice/kernel/tk/lsk/lsk.for create mode 100644 src/test/resources/picante/spice/kernel/tk/lsk/taitotdb.dat create mode 100644 src/test/resources/picante/spice/kernel/tk/lsk/tdbtotai.dat create mode 100644 src/test/resources/picante/spice/kernel/tk/lsk/tdbtotdt.dat create mode 100644 src/test/resources/picante/spice/kernel/tk/lsk/tdttotdb.dat create mode 100644 src/test/resources/picante/spice/kernel/tk/lsk/test.tls create mode 100644 src/test/resources/picante/spice/kernelpool/parser/MRO_SCLKSCET.00006.65536.bsc create mode 100644 src/test/resources/picante/spice/kernelpool/parser/MRO_SCLKSCET.00006.65536.tsc create mode 100644 src/test/resources/picante/spice/kernelpool/parser/begindata_assignment.tk create mode 100644 src/test/resources/picante/spice/kernelpool/parser/cas00093.bsc create mode 100644 src/test/resources/picante/spice/kernelpool/parser/cas00093.tsc create mode 100644 src/test/resources/picante/spice/kernelpool/parser/cas_v39.bf create mode 100644 src/test/resources/picante/spice/kernelpool/parser/cas_v39.tf create mode 100644 src/test/resources/picante/spice/kernelpool/parser/lro_frames_2010036_v01.bf create mode 100644 src/test/resources/picante/spice/kernelpool/parser/lro_frames_2010036_v01.tf create mode 100644 src/test/resources/picante/spice/kernelpool/parser/messenger_154.bsc create mode 100644 src/test/resources/picante/spice/kernelpool/parser/messenger_154.tsc create mode 100644 src/test/resources/picante/spice/kernelpool/parser/naif0008.bls create mode 100644 src/test/resources/picante/spice/kernelpool/parser/naif0008.tls create mode 100644 src/test/resources/picante/spice/kernelpool/parser/naif0008_nonewline.tls create mode 100644 src/test/resources/picante/spice/kernelpool/parser/naif0008_nonewlinealt.tls create mode 100644 src/test/resources/picante/spice/kernelpool/parser/nonewline.tk create mode 100644 src/test/resources/picante/spice/kernelpool/parser/nonewline_badfile.tk create mode 100644 src/test/resources/picante/spice/kernelpool/parser/nonewline_begindata.tk create mode 100644 src/test/resources/picante/spice/kernelpool/parser/pck00008.bpc create mode 100644 src/test/resources/picante/spice/kernelpool/parser/pck00008.tpc create mode 100644 src/test/resources/picante/spice/kernelpool/parser/pi.bk create mode 100644 src/test/resources/picante/spice/kernelpool/parser/pi.tk create mode 100644 src/test/resources/picante/spice/naif0012.tls create mode 100644 src/test/resources/picante/stars/catalogs/tycho2/file/data/main.data create mode 100644 src/test/resources/picante/stars/catalogs/tycho2/file/data/main.idindex create mode 100644 src/test/resources/picante/stars/catalogs/tycho2/file/data/main.index create mode 100644 src/test/resources/picante/stars/catalogs/tycho2/file/data/suppl.data create mode 100644 src/test/resources/picante/stars/catalogs/tycho2/file/data/suppl.idindex create mode 100644 src/test/resources/picante/stars/catalogs/tycho2/file/data/suppl.index create mode 100644 src/test/resources/picante/stars/catalogs/ucac4/file/u4hpm.dat create mode 100644 src/test/resources/picante/stars/catalogs/ucac4/file/u4index.unf create mode 100644 src/test/resources/picante/surfaces/mesh/gourd.obj create mode 100644 src/test/resources/picante/time/naif0008.tls create mode 100644 src/test/resources/picante/tree/resourcetree/http/index.html create mode 100644 src/test/resources/picante/tree/resourcetree/local/dummy_file.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6b391c8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +/target/ +.classpath +.project +.settings/ +/data/ +/idea/ +/.idea/ +/bin/ +/target/ +.DS_Store +*.DS_Store + +# binary kernels in src/main/resources +*.bc +*.bsp diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..6e4e1c7 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,8 @@ + +Copyright 2023, The Johns Hopkins University Applied Physics Laboratory + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5cd9008 --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +# Picante + +Picante is a Java implementation of the core functionality of [NAIF SPICE](https://naif.jpl.nasa.gov). + +Key features: + +- Pure Java; no native libraries needed +- replicates NAIF SPICE ephemeris calculations and frame transforms to 1e-12 precision +- Thread safe + +Although Picante reproduces many SPICE capabilities, it is implemented very differently. Kernels are loaded into a " +SpiceEnvironment". The user can instantiate multiple SpiceEnvironments to compare calculations with different sets of +kernels, or to run a multithreaded application. + +Picante was developed by the Analysis and Applications group of the Space Exploration Sector of the Johns Hopkins +University Applied Physics Laboratory. +It is released under the [MIT](LICENSE.md) License. + +## Maven Coordinates + +``` + + edu.jhuapl.ses + picante + 0.0.0 + +``` + +### Demo Code + +The [unit tests](src/test/java/picante/demo) show how to replicate many common NAIF functions using Picante. +The [demo](src/main/java/picante/demo) package contains a longer example, modeled on an example in the +SPICE [tutorials](https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/Tutorials/pdf/individual_docs/38_program_idl.pdf). + +Many of the binary CK and SPK files needed to run the examples are not included in this repository. Run +the [getCK](src/test/resources/kernels/ck/getCK.bash) and [getSPK](src/test/resources/kernels/spk/getSPK.bash) scripts +to download them from NAIF. + +## Incompatibilities with NAIF/SPICE: + +- CK types other than 2 or 3 are not supported. +- Unsupported SPK types: + - 10 + - 14 + - 15 + - 18 and higher +- DSK files are not supported. +- Product and Switch frames (new in N0067) are not supported. +- Time format incompatibilities. Picante's [TimeConversion](src/main/java/picante/time/TimeConversion.java) class can parse all the example time format strings listed in + the notes for [STR2ET](https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/FORTRAN/spicelib/str2et.html). + - All times are assumed to be UTC. Neither time system modifiers (e.g. TT, TDT, TDB, etc) nor U.S. Time zones are + supported. + - TimeConversion fails on "2000 Jan 01 00:00:00 PST" but STR2ET will accept it. + - TimeConversion fails on "2000 Jan 01 00:00:00 TDB" but STR2ET will accept it. + - STR2ET will fail on the following examples, but TimeConversion will parse them: + - 1997 Jan 32 12:29:29 translates to 1997-02-01T12:29:29.000 + - 1997 Feb 29, 12:29:20.0 translates to 1997-03-01T12:29:20.000 + - 1992 Mar 12 12:62:20 translates to 1992-03-12T13:02:20.000 + - 1993 Mar 18 15:29:60.5 translates to 1993-03-18T15:30:00.500 +- Built-in enumerations containing commonly used solar system bodies (`CelestialBodies`) and frames (`CelestialFrames`) + have entries that deviate from the standard NAIF string names: + - `DE-###` frames have the minus sign removed: `DE###` + - The asteroid `52_EUROPA` is assigned the entry: `A52_EUROPA` + - The corresponding IAU body-fixed frame is: `IAU_A52_EUROPA` to preserve the `IAU_` prefix property commonly + expected. diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..0047db1 --- /dev/null +++ b/pom.xml @@ -0,0 +1,160 @@ + + 4.0.0 + edu.jhuapl.ses + picante + 0.0.1 + jar + + picante + Picante is a pure Java implementation of the core function of the NAIF/SPICE library (https://naif.jpl.nasa.gov/naif/). + https://github.com/JHUAPL/Picante + + 2023 + + Johns Hopkins University Applied Physics Laboratory + https://www.jhuapl.edu/ + + + + + MIT License + https://opensource.org/license/mit/ + + + + + + HariNairJHUAPL + Hari Nair + Hari.Nair@jhuapl.edu + JHUAPL + https://www.jhuapl.edu/ + + + + + scm:git:https://github.com/JHUAPL/Picante.git + https://github.com/JHUAPL/Picante.git + scm:git:https://github.com/JHUAPL/Picante.git + HEAD + + + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + + + UTF-8 + UTF-8 + + + + + + + maven-compiler-plugin + 3.11.0 + + 17 + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.4.0 + + + enforce-maven + + enforce + + + + + 3.2.5 + + + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.3.0 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + true + + + + + + + + maven-compiler-plugin + + + org.apache.maven.plugins + maven-enforcer-plugin + + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + + + + com.google.guava + guava + 32.1.2-jre + + + org.easymock + easymock + 5.2.0 + + + junit + junit + 4.13.2 + + + net.jafama + jafama + 2.3.2 + + + org.apache.commons + commons-math3 + 3.6.1 + + + org.locationtech.jts + jts-core + 1.19.0 + + + \ No newline at end of file diff --git a/src/main/java/picante/collections/AbstractIndexedIterator.java b/src/main/java/picante/collections/AbstractIndexedIterator.java new file mode 100644 index 0000000..19e4bac --- /dev/null +++ b/src/main/java/picante/collections/AbstractIndexedIterator.java @@ -0,0 +1,53 @@ +package picante.collections; + +import java.util.Iterator; +import java.util.NoSuchElementException; + +import com.google.common.collect.UnmodifiableIterator; + +/** + * Simple abstract class that implements the {@link Iterator} interface from a source that is + * organized by index. Simply supply implementations for the two abstract methods and you'll have an + * {@link Iterator} that works properly. + * + * @param the element over which iteration is to be performed + */ +public abstract class AbstractIndexedIterator extends UnmodifiableIterator { + + private int index = 0; + + @Override + public boolean hasNext() { + return index < elements(); + } + + @Override + public E next() { + if (index < elements()) { + /* + * Post-increment index after retrieval. + */ + return element(index++); + } + throw new NoSuchElementException("Unable to access element at index: " + index + + " from indexed elements of length: " + elements()); + } + + /** + * Provide the number of elements in the indexed list. + * + * @return the number + */ + protected abstract int elements(); + + /** + * Supplies the element associated with a particular index in the range [0, elements()-1] + * respectively + * + * @param index the index of interest + * + * @return the element at index + */ + protected abstract E element(int index); + +} diff --git a/src/main/java/picante/collections/AbstractReadOnlyList.java b/src/main/java/picante/collections/AbstractReadOnlyList.java new file mode 100644 index 0000000..00e68b2 --- /dev/null +++ b/src/main/java/picante/collections/AbstractReadOnlyList.java @@ -0,0 +1,26 @@ +/** + * Filename: AbstractReadOnlyList.java Author : vandejd1 Created : Feb 24, 2009 + * + * Copyright (C) 2008 The Johns Hopkins University Applied Physics Laboratory (JHU/APL) All rights + * reserved + */ +package picante.collections; + +import java.util.List; +import java.util.RandomAccess; + + +/** + * a base class that allows you to easily get a {@link List} view of objects + * + * all add or modify methods throw runtime exceptions + * + * this version implements the marker interface RandomAccess, so make sure your implementation + * suppoorts this (but the only consequence is that Java collection utilities will be slow). + * + * @author vandejd1 + */ +public abstract class AbstractReadOnlyList extends AbstractSequentialReadOnlyList + implements RandomAccess { + +} diff --git a/src/main/java/picante/collections/AbstractSequentialReadOnlyList.java b/src/main/java/picante/collections/AbstractSequentialReadOnlyList.java new file mode 100644 index 0000000..b91e50a --- /dev/null +++ b/src/main/java/picante/collections/AbstractSequentialReadOnlyList.java @@ -0,0 +1,270 @@ +package picante.collections; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.NoSuchElementException; + +/** + * abstract base class for making a list view of objects; you just need the size() and get(i) + * methods; + * + * Note that this list does not implement the marker interface RandomAccess, meaning that the + * collections will not assume fast random access. (There is a subclass that does have random access + * if that's what you want.) + * + * All methods that add or modify elements throw runtime exceptions. + * + * @author vandejd1 + */ +@SuppressWarnings("unused") +public abstract class AbstractSequentialReadOnlyList implements List { + + @Override + public boolean add(T o) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public void add(int index, T element) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public boolean addAll(Collection c) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public boolean addAll(int index, Collection c) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public void clear() { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + /** + * a very simple implementation that does linear search + */ + @Override + public boolean contains(Object o) { + for (int i = 0; i < size(); i++) { + if (get(i).equals(o)) { + return true; + } + } + return false; + } + + /** + * does linear search on every element in the list + */ + @Override + public boolean containsAll(Collection c) { + for (Object o : c) { + if (!contains(o)) { + return false; + } + } + return true; + } + + /** + * a very simple implementation that does linear search to find the index of the element that + * ".equals() the given object + */ + @Override + public int indexOf(Object o) { + for (int i = 0; i < size(); i++) { + if (get(i).equals(o)) { + return i; + } + } + return -1; + } + + @Override + public boolean isEmpty() { + return size() == 0; + } + + @Override + public Iterator iterator() { + return listIterator(); + } + + @Override + public int lastIndexOf(Object o) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public ListIterator listIterator() { + return listIterator(0); + } + + @Override + public ListIterator listIterator(int index) { + return new ListItr(index); + } + + @Override + public boolean remove(Object o) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public T remove(int index) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public boolean removeAll(Collection c) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public boolean retainAll(Collection c) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public T set(int index, T element) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public List subList(int fromIndex, int toIndex) { + // TODO: implement this? + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public Object[] toArray() { + // TODO: implement this? + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + @Override + public X[] toArray(X[] a) { + // TODO: implement this? + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + private class Itr implements Iterator { + /** + * Index of element to be returned by subsequent call to next. + */ + int cursor = 0; + + /** + * Index of element returned by most recent call to next or previous. Reset to -1 if this + * element is deleted by a call to remove. + */ + int lastRet = -1; + + // /** + // * The modCount value that the iterator believes that the backing + // * List should have. If this expectation is violated, the iterator + // * has detected concurrent modification. + // */ + // int expectedModCount = modCount; + + @Override + public boolean hasNext() { + return cursor != size(); + } + + @Override + public T next() { + // checkForComodification(); + try { + T next = get(cursor); + lastRet = cursor++; + return next; + } catch (IndexOutOfBoundsException e) { + // checkForComodification(); + throw new NoSuchElementException(); + } + } + + @Override + public void remove() { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + } + + // final void checkForComodification() + // { + // if (modCount != expectedModCount) + // throw new ConcurrentModificationException(); + // } + } + + private class ListItr extends Itr implements ListIterator { + ListItr(int index) { + cursor = index; + } + + @Override + public boolean hasPrevious() { + return cursor != 0; + } + + @Override + public T previous() { + // checkForComodification(); + try { + int i = cursor - 1; + T previous = get(i); + lastRet = cursor = i; + return previous; + } catch (IndexOutOfBoundsException e) { + // checkForComodification(); + throw new NoSuchElementException(); + } + } + + @Override + public int nextIndex() { + return cursor; + } + + @Override + public int previousIndex() { + return cursor - 1; + } + + @Override + public void set(T o) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + // if (lastRet == -1) + // throw new IllegalStateException(); + // // checkForComodification(); + // + // try { + // AbstractList.this.set(lastRet, o); + // expectedModCount = modCount; + // } catch (IndexOutOfBoundsException e) { + // throw new ConcurrentModificationException(); + // } + } + + @Override + public void add(T o) { + throw new UnsupportedOperationException("Unsupported method called on a read-only list."); + // checkForComodification(); + // + // try { + // AbstractList.this.add(cursor++, o); + // lastRet = -1; + // expectedModCount = modCount; + // } catch (IndexOutOfBoundsException e) { + // throw new ConcurrentModificationException(); + // } + } + } + +} diff --git a/src/main/java/picante/collections/ArrayUtilities.java b/src/main/java/picante/collections/ArrayUtilities.java new file mode 100644 index 0000000..8451e52 --- /dev/null +++ b/src/main/java/picante/collections/ArrayUtilities.java @@ -0,0 +1,462 @@ +package picante.collections; + +import java.util.Arrays; + +/** + * This class consists exclusively of static methods that operate on or return arrays. It is much + * like the Arrays class in the java.util package, only it provides other useful methods. + * + * TODO: Flush out the class with the remaining primitive array search methods + * + */ +public class ArrayUtilities { + + /** + * Determine the index of the last element less than or equal to the specified key. The list must + * be sorted into ascending order {@link Arrays#sort(double[])}. If it is not sorted, the results + * are undefined. If the list contains multiple elements equal to the specified one, the last one + * is guaranteed to be extracted. + *

+ * The method utilizes {@link Arrays#binarySearch(double[], int, int, double)} so its performance + * characteristics are closely related. + *

+ * + * @param list the list containing sorted doubles over which to search + * @param key the key to locate the last element less than or equal to in the list + * + * @return the range returned is [-1,list.length-1], where -1 indicates that key precedes all + * elements in the list. + */ + public static int lastLessThanOrEqualTo(double[] list, double key) { + return lastLessThanOrEqualTo(list, 0, list.length, key); + } + + /** + * Determine the index of the last element less than or equal to the specified key. The list must + * be sorted into ascending order {@link Arrays#sort(double[])}. If it is not sorted, the results + * are undefined. If the list contains multiple elements equal to the specified key value, the + * last one is guaranteed to be extracted. + *

+ * The method utilizes {@link Arrays#binarySearch(double[], int, int, double)} so its performance + * characteristics are closely related. + *

+ * + * @param list the list over which a subset of values is to be searched + * @param startIndex the starting position to perform the search + * @param length the length over which to perform the search + * @param key the key to locate + * + * @return the index of the element last less than or equal to the supplied key in the sublist. + * The range returned is [pos-1,pos+length-1] where pos-1 indicates that key precedes all + * elements in the specified range within list. + */ + public static int lastLessThanOrEqualTo(double[] list, int startIndex, int length, double key) { + int result = Arrays.binarySearch(list, startIndex, startIndex + length, key); + + /* + * If the result was located in the list directly, locate the last element equal to it and + * return that index. + */ + if (result >= 0) { + int lastEqualIndex = locateLastElementEqualTo(result, list, startIndex + length); + return lastEqualIndex; + } + + return convertIndexForLessThan(result); + } + + /** + * Determine the index of the last element strictly less than the specified key. The list must be + * sorted into ascending order {@link Arrays#sort(double[])}. If it is not sorted, the results are + * undefined. If the list contains multiple equal elements to the specified one, the last one is + * guaranteed to be extracted. + *

+ * This method utilizes {@link Arrays#binarySearch(double[], int, int, double)} so its performance + * characteristics are closely related. + *

+ * + * @param list the list containing sorted doubles over which to search + * @param key the key to locate the last element strictly less than in the list + * + * @return the range returned is [-1, list.length-1], where -1 indicates that key precedes all + * elements in the list. + */ + public static int lastLessThan(double[] list, double key) { + return lastLessThan(list, 0, list.length, key); + } + + /** + * Determine the index of the last element strictly less than the specified key. The list must be + * sorted into ascending order {@link Arrays#sort(double[])}. If it is not sorted, the results are + * undefined. If the list contains multiple elements equal to the specified key value, the last + * one is guaranteed to be extracted. + *

+ * This method utilizes {@link Arrays#binarySearch(double[], int, int, double)} so its performance + * characteristics are closely related. + *

+ * + * @param list the list over which a subset of values is to be searched + * @param startIndex the starting position from which to perform the search + * @param length the length over which to perform the search + * @param key the key to locate + * + * @return the index of the last element strictly less than the supplied key in the sublist. The + * range returned is [pos-1,pos+length-1] where pos-1 indicates that key preceds all + * elements in the specified range within the list. + */ + public static int lastLessThan(double[] list, int startIndex, int length, double key) { + int result = Arrays.binarySearch(list, startIndex, startIndex + length, key); + + /* + * If the result was located in the list directly, locate the first element equal to it and + * return that index less 1. + */ + if (result >= 0) { + int lastEqualIndex = locateFirstElementEqualTo(result, list, startIndex); + return lastEqualIndex - 1; + } + + return convertIndexForLessThan(result); + } + + /** + * Determine the index of the first element greater than or equal to the specified key. The list + * must be sorted into ascending order {@link Arrays#sort(double[])}. If it is not sorted, the + * results are undefined. If the list contains multiple elements equal to the specified key, the + * first one is guaranteed to be located. + *

+ * This method utilizes {@link Arrays#binarySearch(double[], int, int, double)} so its performance + * characteristics are closely related. + *

+ * + * @param list the sorted list containing the values to be searched + * @param key the key to locate + * + * @return the range returned is [0, list.length], where list.length indicates that key follows + * all the elements in the list. + */ + public static int firstGreaterThanOrEqualTo(double[] list, double key) { + + /* + * This is just as simple as invoking the corresponding lastLessThan method and adding one. + */ + return lastLessThan(list, key) + 1; + } + + /** + * Determine the index of the first element greater than or equal to the specified key in the + * range within the supplied list. The range must be sorted into ascending order + * {@link Arrays#sort(double[], int, int)}. If it is not sorted, the results are undefined. If the + * list contains multiple elements equal to the specified key, the first one is guaranteed to be + * located. + *

+ * This method utilizes {@link Arrays#binarySearch(double[], int, int, double)} so its performance + * characteristics are closely related. + *

+ * + * @param list the list from which the range is to be searched + * @param startIndex the start index of the search range + * @param length the length of the search range + * @param key the key to locate + * + * @return the range returned is [pos, pos+length], where pos+length indicates that key follows + * all elements in the range. + */ + public static int firstGreaterThanOrEqualTo(double[] list, int startIndex, int length, + double key) { + + /* + * This is just as simple as invoking the corresponding lastLessThan method and adding one. + */ + return lastLessThan(list, startIndex, length, key) + 1; + } + + /** + * Determine the index of the first element strictly greater than the specified key. The list must + * be sorted into ascending order: {@link Arrays#sort(double[])}. If it is not sorted, the results + * are undefined. If the list contains multiple elements equal to the specified object, the first + * one is guaranteed to be located. + *

+ * This method utilizes {@link Arrays#binarySearch(double[], int, int, double)} so its performance + * characteristics are closely related. + *

+ * + * @param list the list over which to perform the search + * @param key the value to locate + * + * @return the range returned is [0, list.length], where list.length indicates that key follows + * all elements in the list. + */ + public static int firstGreaterThan(double[] list, double key) { + /* + * This is just as simple as invoking the corresponding lastLessThanOrEqualTo method and adding + * one. + */ + return lastLessThanOrEqualTo(list, key) + 1; + } + + /** + * Determine the index of the first element strictly greater than the specified key within the + * specified range of list. The range must be sorted into ascending order: + * {@link Arrays#sort(double[], int, int)}. If it is not sorted, the results are undefined. If the + * list contains multiple elements equal to the specified key, the first one in the range is + * guaranteed to be located. + *

+ * This method utilizes {@link Arrays#binarySearch(double[], int, int, double)} so its performance + * characteristics are closely related. + *

+ * + * @param list the list from which the range is to be searched + * @param startIndex the start index of the search range + * @param length the length of the search range + * @param key the key to locate + * + * @return the range returned is [pos, pos+length], where pos+length indicates that key follows + * all elements in the range + */ + public static int firstGreaterThan(double[] list, int startIndex, int length, double key) { + + /* + * This is just as simple as invoking the corresponding lastLessThanOrEqualTo method and adding + * one. + */ + return lastLessThanOrEqualTo(list, startIndex, length, key) + 1; + } + + /** + * Locate the last element in the list equal to the element by the supplied index. + * + * @param index the index at which to start the search. It should be an index to an existing + * element of the list that is of interest. + * @param list the list over which the search is to be performed + * @param maxIndex the maximum index which is to be considered + * + * @return the index of the last element equal to list[index] in the sorted list. + */ + private static int locateLastElementEqualTo(int index, double[] list, int maxIndex) { + + /* + * If we are already at the end of the list, just return. + */ + if (index == list.length - 1) { + return index; + } + + int result = index; + + /* + * Loop over elements in the list incrementing result as long as they are equal to list[index]. + */ + while ((result < maxIndex) && (list[++result] == list[index])) { + } + + /* + * Result will have been incremented one past the desired index, decrement it. + */ + return --result; + + } + + /** + * Locate the first element in the list equal to the element at position index. + * + * @param index the index at which to start the search for the first value. + * @param list the list over which the search is to be performed. + * @param firstIndex the minimum index over which the search is to happen + * + * @return the index of the first element equal to list[index] in the sorted list. + */ + private static int locateFirstElementEqualTo(int index, double[] list, int firstIndex) { + + /* + * If we are already at the start of the range, just return. + */ + if (index == firstIndex) { + return index; + } + + int result = index; + + /* + * Loop over the previous elements in the list as long as they continue to compare with equality + * to the element at list[index]. + */ + while ((result > firstIndex) && (list[--result] == list[index])) { + } + + /* + * Result will have been decremented one past the desired index, increment it. + */ + return ++result; + } + + /** + * In the event that the binarySearch algorithm from the Collections class is unable to turn up a + * matched element, locate the index of the element that is strictly less than the one sought. + * + * @param result a negative result from either {@link Arrays#binarySearch(byte[], byte)} + * + * @param listSize the size of the list over which the binary search was performed at the time of + * the search + * + * @return the index of the element strictly less than the one sought after in the binary search. + */ + private static int convertIndexForLessThan(int result) { + + int insertionPoint = -result - 1; + + /* + * Since the insertion point is defined as the index at which everyone will be shifted to the + * right: + * + * value: 10 20 30 40 index: 0 1 2 3 + * + * If insertion point is 1, then that means the result of inserting this element into the list + * will result: + * + * value: 10 15 20 30 40 index: 0 1 2 3 4 + * + * would be the result, and 15 would have reduced to an insertion point of 1. So, long story + * short, if we reach here then just subtract one and we'll get the answer we desire. + */ + return insertionPoint - 1; + + } + + /** + * Checks if an array is ragged, e.g: + * + *
+   * This is a ragged array
+   *  { {1, 2, 3} }
+   *  { {3, 4}    }
+   * 
+   * This is not a ragged array
+   *  { {1, 2, 3} }
+   *  { {3, 4, 5} }
+   * 
+ * + * @param r input array + * @param the array type parameter + * + * @return true if the input is a ragged array, false if it is 'rectangular' + */ + public static boolean isRagged(R[][] r) { + + if (r.length > 0) { + + int width0 = r[0].length; + + for (int i = 0; i < r.length; i++) { + + if (r[i].length != width0) { + return true; + } + + } + + } + return false; + } + + /** + * Checks if an array is ragged. + * + * @param r input array + * @param the array type parameter + * + * @return true if the input is a ragged array, false if it is 'rectangular' + */ + public static boolean isRagged(R[][][] r) { + + if (r.length > 0 && r[0].length > 0) { + + int width0 = r[0].length; + int depth0 = r[0][0].length; + + for (int i = 0; i < r.length; i++) { + + if (r[i].length != width0) { + return true; + } + + for (int j = 0; j < r[0].length; j++) { + if (r[i][j].length != depth0) { + return true; + } + } + + } + + } + + return false; + } + + /** + * Checks if an array is ragged, e.g: + * + *
+   * This is a ragged array
+   *  { {1, 2, 3} }
+   *  { {3, 4}    }
+   * 
+   * This is not a ragged array
+   *  { {1, 2, 3} }
+   *  { {3, 4, 5} }
+   * 
+ * + * @param r input array + * @return true if the input is a ragged array, false if it is 'rectangular' + */ + public static boolean isRagged(double[][] r) { + + if (r.length > 0) { + + int width0 = r[0].length; + + for (int i = 0; i < r.length; i++) { + + if (r[i].length != width0) { + return true; + } + + } + + } + return false; + } + + /** + * Checks if an array is ragged. + * + * @param r input array + * @return true if the input is a ragged array, false if it is 'rectangular' + */ + public static boolean isRagged(double[][][] r) { + + if (r.length > 0 && r[0].length > 0) { + + int width0 = r[0].length; + int depth0 = r[0][0].length; + + for (int i = 0; i < r.length; i++) { + + if (r[i].length != width0) { + return true; + } + + for (int j = 0; j < r[0].length; j++) { + if (r[i][j].length != depth0) { + return true; + } + } + + } + + } + + return false; + } + +} diff --git a/src/main/java/picante/collections/CollectionUtilities.java b/src/main/java/picante/collections/CollectionUtilities.java new file mode 100644 index 0000000..4adf54e --- /dev/null +++ b/src/main/java/picante/collections/CollectionUtilities.java @@ -0,0 +1,534 @@ +package picante.collections; + +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import com.google.common.collect.ImmutableList; + +/** + * This class consists exclusively of static methods that operate on or return collections. It + * contains polymorphic algorithms that operate on collections. It is much like the Collections + * class in the java.util package, only it provides other useful generic methods. + * + * The methods of this class all throw a NullPointerException if the collections or class objects + * provided to them are null. + */ +public class CollectionUtilities { + + /** + * Determine the index of the last element less than or equal to the specified key. The list must + * be sorted into ascending order according to the natural ordering specified by the + * implementation of the Comparable interface. If it is not sorted, the results are undefined. If + * the list contains multiple elements equal to the specified object, the last one is guaranteed + * to be extracted. + * + * The method utilizes {@link java.util.Collections#binarySearch(List, Object)} so its performance + * characteristics are closely related. + * + * @param the parameterized type of the key + * @param list the list containing objects capable of being compared to an instance of T, sorted + * in an order consistent with the comparison + * @param key the key to locate the last element less than or equal to in the list + * + * @return the range returned is [-1,list.size()-1], where -1 indicates that key precedes all + * elements in the list. + */ + public static int lastLessThanOrEqualTo(List> list, T key) { + + int result = Collections.binarySearch(list, key); + + /* + * If the result was located in the list directly, locate the last element equal to it and + * return that index. + */ + if (result >= 0) { + int lastEqualIndex = locateLastElementEqualTo(result, key, list); + return lastEqualIndex; + } + + return convertIndexForLessThan(result, list.size()); + } + + /** + * Determine the index of the last element less than or equal to the specified key. The list must + * be sorted into ascending order according to the ordering specified by the implementation of the + * supplied Comparator. If it is not sorted, the results are undefined. If the list contains + * multiple elements equal to the specified object, the last one is guaranteed to be extracted. + * + * The method utilizes {@link java.util.Collections#binarySearch(List, Object, Comparator)} so its + * performance characteristics are closely related. + * + * @param the parameterized type of the key + * @param list the list containing objects to be compared against key with the supplied + * comparator, sorted in an ordering consistent with the comparator + * @param key the key to locate the last element less than or equal to in the list + * @param c the comparator defining the ordering to be utilized in the search + * + * @return the range of the return values is [-1,list.size()-1], where -1 indicates that key + * precedes all elements in the list. + */ + public static int lastLessThanOrEqualTo(List list, T key, + Comparator c) { + + int result = Collections.binarySearch(list, key, c); + + /* + * If the result was located in the list directly, locate the last element equal to it and + * return that index. + */ + if (result >= 0) { + int lastEqualIndex = locateLastElementEqualTo(result, list, c); + return lastEqualIndex; + } + + return convertIndexForLessThan(result, list.size()); + } + + /** + * Determine the index of the last element less than the specified key. The list must be sorted + * into ascending order according to the natural ordering specified by the implementation of the + * Comparable interface. If it is not sorted, the results are undefined. If the list contains + * multiple elements equal to the specified object, the last one is guaranteed to be extracted. + * + * The method utilizes {@link java.util.Collections#binarySearch(List, Object)} so its performance + * characteristics are closely related. + * + * @param the parameterized type of the key + * @param list the list containing objects capable of being compared to an instance of T, sorted + * in an order consistent with the comparison + * @param key the key to locate the last element less than in the list + * + * @return the range returned is [-1,list.size()-1], where -1 indicates that key precedes all + * elements in the list. + */ + public static int lastLessThan(List> list, T key) { + + int result = Collections.binarySearch(list, key); + + /* + * If the result was located in the list directly, locate the first element equal to it and + * return that index less 1. + */ + if (result >= 0) { + int lastEqualIndex = locateFirstElementEqualTo(result, key, list); + return lastEqualIndex - 1; + } + + return convertIndexForLessThan(result, list.size()); + } + + /** + * Determine the index of the last element less than the specified key. The list must be sorted + * into ascending order according to the ordering specified by the implementation of the supplied + * Comparator. If it is not sorted, the results are undefined. If the list contains multiple + * elements equal to the specified object, the last one is guaranteed to be extracted. + * + * The method utilizes {@link java.util.Collections#binarySearch(List, Object, Comparator)} so its + * performance characteristics are closely related. + * + * @param the parameterized type of the key + * @param list the list containing objects to be compared against key with the supplied + * comparator, sorted in an ordering consistent with the comparator + * @param key the key to locate the last element less than in the list + * @param c the comparator defining the ordering to be utilized in the search + * + * @return the range of the return values is [-1,list.size()-1], where -1 indicates that key + * precedes all elements in the list. + */ + public static int lastLessThan(List list, T key, Comparator c) { + + int result = Collections.binarySearch(list, key, c); + + /* + * If the result was located in the list directly, locate the first element equal to it and + * return that index less 1. + */ + if (result >= 0) { + int lastEqualIndex = locateFirstElementEqualTo(result, list, c); + return lastEqualIndex - 1; + } + + return convertIndexForLessThan(result, list.size()); + } + + /** + * Determine the index of the first element greater than or equal to the specified key. The list + * must be sorted into ascending order according to the natural ordering specified by the + * implementation of the Comparable interface. If it is not sorted, the results are undefined. If + * the list contains multiple elements equal to the specified object, the first one is guaranteed + * to be extracted. + * + * The method utilizes {@link java.util.Collections#binarySearch(List, Object)} so its performance + * characteristics are closely related. + * + * @param the parameterized type of the key + * @param list the list containing objects capable of being compared to an instance of T, sorted + * in an order consistent with the comparison + * @param key the key to locate the first element greater than or equal to in the list + * + * @return the range returned is [0,list.size()], where list.size() indicates that key follows all + * elements in the list. + */ + public static int firstGreaterThanOrEqualTo(List> list, + T key) { + + /* + * This is just as simple as invoking the corresponding lastLessThan method and adding one. + */ + return lastLessThan(list, key) + 1; + } + + /** + * Determine the index of the first element greater than or equal to the specified key. The list + * must be sorted into ascending order according to the ordering specified by the implementation + * of the supplied Comparator. If it is not sorted, the results are undefined. If the list + * contains multiple elements equal to the specified object, the first one is guaranteed to be + * extracted. + * + * The method utilizes {@link java.util.Collections#binarySearch(List, Object, Comparator)} so its + * performance characteristics are closely related. + * + * @param the parameterized type of the key + * @param list the list containing objects to be compared against key with the supplied + * comparator, sorted in an ordering consistent with the comparator + * @param key the key to locate the first element greater than or equal to in the list + * @param c the comparator defining the ordering to be utilized in the search + * + * @return the range of the return values is [0,list.size()], where list.size() indicates that key + * follows all elements in the list. + */ + public static int firstGreaterThanOrEqualTo(List list, T key, + Comparator c) { + + /* + * This is just as simple as invoking the corresponding lastLessThan method and adding one. + */ + return lastLessThan(list, key, c) + 1; + } + + /** + * Determine the index of the first element greater than the specified key. The list must be + * sorted into ascending order according to the natural ordering specified by the implementation + * of the Comparable interface. If it is not sorted, the results are undefined. If the list + * contains multiple elements equal to the specified object, the first one is guaranteed to be + * extracted. + * + * The method utilizes {@link java.util.Collections#binarySearch(List, Object)} so its performance + * characteristics are closely related. + * + * @param the parameterized type of the key + * @param list the list containing objects capable of being compared to an instance of T, sorted + * in an order consistent with the comparison + * @param key the key to locate the first element greater than in the list + * + * @return the range returned is [0,list.size()], where list.size() indicates that key follows all + * elements in the list. + */ + public static int firstGreaterThan(List> list, T key) { + + /* + * This is just as simple as invoking the corresponding lastLessThanOrEqualTo method and adding + * one. + */ + return lastLessThanOrEqualTo(list, key) + 1; + } + + /** + * Determine the index of the first element greater than the specified key. The list must be + * sorted into ascending order according to the ordering specified by the implementation of the + * supplied Comparator. If it is not sorted, the results are undefined. If the list contains + * multiple elements equal to the specified object, the first one is guaranteed to be extracted. + * + * The method utilizes {@link java.util.Collections#binarySearch(List, Object, Comparator)} so its + * performance characteristics are closely related. + * + * @param the parameterized type of the key + * @param list the list containing objects to be compared against key with the supplied + * comparator, sorted in an ordering consistent with the comparator + * @param key the key to locate the first element greater than in the list + * @param c the comparator defining the ordering to be utilized in the search + * + * @return the range of the return values is [0,list.size()], where list.size() indicates that key + * follows all elements in the list. + */ + public static int firstGreaterThan(List list, T key, Comparator c) { + + /* + * This is just as simple as invoking the corresponding lastLessThanOrEqualTo method and adding + * one. + */ + return lastLessThanOrEqualTo(list, key, c) + 1; + } + + /** + * Locate the first element equal to the supplied key, starting at index. This expectation is that + * index is already pointing at an element of the list that is equal to the supplied key from the + * implementation of the Comparable interface's perspective. + * + * Supplying the key is necessary in the event that the list itself implements Comparable of an + * unrelated type, of which key is an instance of a subclass. + * + * @param the parameterized type of key + * @param index the index at which to start the search. It should be such that: + * list.get(index).compareTo(key) == 0. + * @param key the key to compare against for equality + * @param list the list containing objects to be compared against key, sorted in an order + * consistent with the natural ordering defined by Comparable + * + * @return the index of the first element in the list that is equal to the supplied key. + */ + private static int locateFirstElementEqualTo(int index, T key, + List> list) { + + /* + * If we are already at the head of the list, then just return. + */ + if (index == 0) { + return index; + } + + int result = index; + + ListIterator> iterator = list.listIterator(index); + + /* + * Loop over the previous elements as long as they continue to compare with equality to key, + * subtracting values from result. + */ + while ((iterator.hasPrevious()) && (iterator.previous().compareTo(key) == 0)) { + result--; + } + + return result; + } + + /** + * Locate the first element in the list equal to the element by the supplied index. + * + * @param the parameterized type of key + * @param index the index at which to start the search. It should be an index to an existing + * element of the list. + * @param list the list containing objects to be compared against key, sorted in an order + * consistent with the natural ordering defined by Comparable + * @param c the comparator used to search through the list + * + * @return the index of the first element in the list that is equal to the supplied key. + */ + private static int locateFirstElementEqualTo(int index, List list, + Comparator c) { + + /* + * If we are already at the head of the list, then just return. + */ + if (index == 0) { + return index; + } + + int result = index; + + ListIterator iterator = list.listIterator(index); + + T key = iterator.next(); + + /* + * Back up the interator to its previous state. We only stepped forward to extract the + * comparison element. + */ + iterator.previous(); + + /* + * Loop over elements in the list, decrementing result, until we find an element that no longer + * compares to key with equality. + */ + while ((iterator.hasPrevious()) && (c.compare(key, iterator.previous()) == 0)) { + result--; + } + + return result; + + } + + /** + * Locate the last element equal to the supplied key, starting at index. This expectation is that + * index is already pointing at an element of the list that is equal to the supplied key from the + * implementation of the Comparable interface's perspective. + * + * Supplying the key is necessary in the event that the list itself implements Comparable of an + * unrelated type, of which key is an instance of a subclass. + * + * @param the parameterized type of key + * @param index the index at which to start the search. It should be such that: + * list.get(index).compareTo(key) == 0. + * @param key the key to compare against for equality + * @param list the list containing objects to be compared against key, sorted in an order + * consistent with the natural ordering defined by Comparable + * + * @return the index of the last element in the list that is equal to the supplied key. + */ + private static int locateLastElementEqualTo(int index, T key, + List> list) { + + /* + * If we are already at the end of the list, just return. + */ + if (index == list.size() - 1) { + return index; + } + + int result = index; + + ListIterator> iterator = list.listIterator(index + 1); + + /* + * Loop over elements in the list incrementing result as long as the elements compare with key + * as equality. + */ + while ((iterator.hasNext()) && (iterator.next().compareTo(key) == 0)) { + result++; + } + + return result; + } + + /** + * Locate the last element in the list equal to the element by the supplied index. + * + * @param the parameterized type of key + * @param index the index at which to start the search. It should be an index to an existing + * element of the list. + * @param list the list containing objects to be compared against key, sorted in an order + * consistent with the natural ordering defined by Comparable + * @param c the comparator used to search through the list + * + * @return the index of the last element in the list that is equal to the supplied key. + */ + private static int locateLastElementEqualTo(int index, List list, + Comparator c) { + + /* + * If we are already at the end of the list, just return. + */ + if (index == list.size() - 1) { + return index; + } + + int result = index; + + ListIterator iterator = list.listIterator(index); + + T key = iterator.next(); + + /* + * Loop over elements of the list, incrementing result, as long as these elements continue + * comparing with key as equality. + */ + while ((iterator.hasNext() && (c.compare(key, iterator.next()) == 0))) { + result++; + } + + return result; + + } + + /** + * In the event that the binarySearch algorithm from the Collections class is unable to turn up a + * matched element, locate the index of the element that is strictly less than the one sought. + * + * @param result a negative result from either + * {@link java.util.Collections#binarySearch(List, Object)} or + * {@link java.util.Collections#binarySearch(List, Object, Comparator)} + * + * @param listSize the size of the list over which the binary search was performed at the time of + * the search + * + * @return the index of the element strictly less than the one sought after in the binary search. + * Range of returned values is [-1,listSize], where -1 indicates the value sought after + * precedes all elements in the list. + */ + private static int convertIndexForLessThan(int result, @SuppressWarnings("unused") int listSize) { + + int insertionPoint = -result - 1; + + /* + * Since the insertion point is defined as the index at which everyone will be shifted to the + * right: + * + * value: 10 20 30 40 index: 0 1 2 3 + * + * If insertion point is 1, then that means the result of inserting this element into the list + * will result: + * + * value: 10 15 20 30 40 index: 0 1 2 3 4 + * + * would be the result, and 15 would have reduced to an insertion point of 1. So, long story + * short, if we reach here then just subtract one and we'll get the answer we desire. + */ + return insertionPoint - 1; + + } + + /** + * Adds the contents of an iterable to the supplied collection. + *

+ * Elements are added to the collection via the {@link Collection#add(Object)} method in the order + * that the iterator generated from the supplied iterable produces them. + *

+ * + * @param the element type of the iterable + * @param iterable the iterable, producing elements of type T + * @param collection the collection to receive elements of type T + * + * @return a reference to collection for the convenience of method chaining + */ + public static > C addAll(Iterable iterable, C collection) { + return addAll(iterable.iterator(), collection); + } + + /** + * Adds the contents of an iterator to the supplied collection. + *

+ * Elements are added to the collection via the {@link Collection#add(Object)} method in the order + * that the iterator produces them. + *

+ * + * @param the element type of the iterator + * @param the collection type + * @param iterable the iterator, producing elements of type T + * @param collection the collection to receive elements of type T + * + * @return a reference to collection for the convenience of method chaining + */ + public static > C addAll(Iterator iterator, C collection) { + while (iterator.hasNext()) { + collection.add(iterator.next()); + } + return collection; + } + + + /** + * allows an ImmutableList of children objects to be converted to an ImmutableList of parent + * objects; for an ordinary Java List, this would be dangerous because of the ability to + * potentially ADD diverse objects into the list. But since this method deals with an immutable + * list, nothing can be added. Note that the requirement that S extends T is not needed - the + * compiler will let this through even if S does not extend T, but that's probably something you + * don't want to do, so the S extends T is there to remind you of this fact. As long as S extends + * T, the casting that goes on inside this method is safe. + * + * @param the type of the child + * @param the type of the parent + * @param listOfChildren the children to convert + * + * @return the same list cast as a list of parent objects (type T) + */ + @SuppressWarnings("unchecked") + public static ImmutableList convertToListOfSuperclass( + ImmutableList listOfChildren) { + // recast as list of parent objects: + return (ImmutableList) listOfChildren; + } + +} diff --git a/src/main/java/picante/collections/IndexRange.java b/src/main/java/picante/collections/IndexRange.java new file mode 100644 index 0000000..60c5f79 --- /dev/null +++ b/src/main/java/picante/collections/IndexRange.java @@ -0,0 +1,109 @@ +/** + * Author : vandejd1 Created : Apr 19, 2010 + * + * Copyright (C) 2010 The Johns Hopkins University Applied Physics Laboratory (JHU/APL) All rights + * reserved + */ +package picante.collections; + +/** + * captures a range of indices specified by a low index and a high index; both end points are + * considered to be included in the range + * + * + * NOTES for future development: If you want to add methods, look at the picante.math.intervals + * package and make sure that any method names you use are consistent with the (non-integer) + * interval processing class there. After discussion, we decided that its probably easier to + * duplicate code for the integer interval mechanisms (if we ever need it) rather than try to come + * up with a convoluted framework for handling (unwritable and writable) intervals of multiple + * types. + * + * If you want to make this class writable: create a new parent class that is unwritable: + * UnwritableIndexRange, and then move the getter methods there. Then this class becomes the + * writable versions and you can add the setters here. + * + * This class is one instance of a larger concept - that of index mapping or index translation (as + * in sub-setting, or selecting a sub-range). There is already a class in the timeseries library + * that will eventually be moved into crucible that this class will eventually implement: + * IIndexTranslator. + * + * @author vandejd1 + */ +public class IndexRange { + private final int lowIndex; + private final int highIndex; + + public IndexRange(int lowIndexInclusive, int highIndexInclusive) { + this.lowIndex = lowIndexInclusive; + this.highIndex = highIndexInclusive; + } + + /** + * @return the lower index in the range; this index value is included in the range + */ + public int getLowIndex() { + return lowIndex; + } + + /** + * @return the upper index in the range; this index is included in the range + */ + public int getHighIndex() { + return highIndex; + } + + /** + * @return the total number of indices in the range, including the lower and upper endpoints + */ + public int getNumIndicesIncluded() { + return highIndex - lowIndex + 1; + } + + /** + * returns true if the given index is inside this range, i.e., if + * {@code lowIndex <= idx <= highIndex} + * + * @param idx the index to test + * + * @return true if contained in the range + */ + public boolean contains(int idx) { + return (idx >= lowIndex) && (idx <= highIndex); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + highIndex; + result = prime * result + lowIndex; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + IndexRange other = (IndexRange) obj; + if (highIndex != other.highIndex) { + return false; + } + if (lowIndex != other.lowIndex) { + return false; + } + return true; + } + + @Override + public String toString() { + return "IndexRange [lowIndex=" + lowIndex + ", highIndex=" + highIndex + "]"; + } + +} diff --git a/src/main/java/picante/collections/package-info.java b/src/main/java/picante/collections/package-info.java new file mode 100644 index 0000000..cf7ff7f --- /dev/null +++ b/src/main/java/picante/collections/package-info.java @@ -0,0 +1,19 @@ +/** + * Package containing Java collections framework related software. + *

+ * This package simply contains any additional capabilities that are supplied and designed to + * integrate with or into the general collections framework provided by Sun. + *

+ *

+ * Features include the following: + *