h,[F      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                                                                                         0.2.0None"%1=>None"%1=>)-(*,+)(*)+,-None"%1=>1 telescope-Specify which numbered axis a type represents data X instance AxisOrder X where axisN = 1 data Y instance AxisOrder Y where axisN = 2;:=<>6789123549687354:;<=>12None"%1=>B telescope>Primitive types that can be serialized as Big or Little EndianBCEDBEDCNone"%1=>M telescope Encode an " of dimensions up to O telescopeConvert between an  and 6 4V telescopeDecode Big Endian encoded binary data into an Array of arbitrary dimensions ix by specifying the 6 4$decodeArray @Ix2 @Float [3, 2] inputArray P Seq (Sz (2 :. 3)) [ [ 1.0, 2.0, 3.0 ] , [ 4.0, 5.0, 6.0 ] ]W telescopeEncode an Array as a Lazy ByteString based on the type of the element a6myArray = decodeArray @Ix2 @Float BPFloat [3, 2] inputoutput = encodeArray myArrayX telescope9Decode binary data into an Array of arbitrary dimensions ix by specifying the 6 4 and the 3decodeArrayOrder @Ix2 @Float BigEndian [3, 2] inputArray P Seq (Sz (2 :. 3)) [ [ 1.0, 2.0, 3.0 ] , [ 4.0, 5.0, 6.0 ] ]Y telescope%Decode binary data into as a 1d ArrayZ telescopeResize a Vector into an Array] telescope#Get the Axes for a given array size[VXYWZ\]RTSUOPQMNVWXYZRTSUOQPMN[\]None"%1=>u telescopeIn-tree representation of an NDArray. You can parse a file as this and get it back. Not really what we want though but in haskell we can't easily just parse a multi-dimensional array we could do a simpler representation. Using an ADTlsnmqportjkuvyzxwuwxzvyltsnmropqjk None"%1=> telescope/Types that have a textual representation, like , but for any Type None"%1=> telescopeTracks the location of the parser in the document for error messages telescope4Easy error message when we expect a particular type: instance FromKeyword Int where parseKeywordValue = \case Integer n -> pure n v -> expected "Integer" v telescopeAdd a child to the parsing  None"%1=> telescope%Root Object with all anchors resolved telescopeAll allowed node values. We can't use Aeson's Value, because it doesn't support tags, binary data, or references telescopeRawBinary !ByteString telescope A Node is a  with an optional  and  telescopeSpecify a schema using  from ToAsdf telescopeMakes a node from a value%% None"%&1=> telescopeDecompressed block data telescope>values that have been encoded to the file format: padding, etc telescopeSplit an encoded  into a ', '[Encoded Block]' and 'Encoded Index' telescopeLightweight first-pass parsing using 'State ByteString' instead of Parsec or similar telescope2Skip along blocks and create a list of all of them telescope?Verify that the magic token is next without consuming any input telescope$consume the magic token if available== None"%1=>!R telescopeConvert a type to an u https:/asdf-standard.readthedocs.ioenlatest generated stsci.eduasdfcorendarray-1.1.0.html telescope Convert an u into a type https:/asdf-standard.readthedocs.ioenlatest generated stsci.eduasdfcorendarray-1.1.0.html lsnmqportjkuvyzxw uyvzxwlrqpomnstjkNone"%1=>"  telescopeParse a  from a None"%1=>* telescope Generically parse a key from an  into a record value telescopeGenerically parse s into records telescope)Generically serialize record values to a  telescope$Generically serialize records to an  telescopeParse an Asdf  or 2 into a type. The generic instance will decode an + with field names matching record selectors data Example = Example { name :: Text , age :: Int , tags :: [Text] } deriving (Generic, FromAsdf) telescope$Specify how a type is parsed from a  instance FromAsdf Integer where parseValue = \case Integer n -> pure $ fromIntegral n node -> expected "Integer" node telescopeConvert a type to an Asdf  or ). The generic instance will encode to an + with field names matching record selectors data Example = Example { name :: Text , age :: Int , tags :: [Text] } deriving (Generic, ToAsdf) instance ToAsdf Example where schema _ = "tag:example.org/schemas/example-1.0.0" telescope#Specify how an object encodes to a  instance User ToAsdf where toValue user = Object [ ("name", toNode user.name) , ("age", toNode user.age) ] telescopeSpecify the schema for a type :instance ToAsdf Unit where schema _ = "!unit/unit-1.0.0" telescope,Specify that this node be saved as an anchor =instance ToAsdf Config where anchor _ = Just "globalConfig" telescope;Manually control all aspects of how this is converted to a  telescope1Flexibly parse lists from either Array or NDArray telescope%Parse a node, ignoring the schema tag telescopeParse a key from an  instance FromAsdf User where parseValue = \case Object o -> do name <- o .: "name" age <- o .: "age" pure $ User{name, age} telescopeParse an optional key from an  telescopeParse a child at the given array index - > instance FromAsdf Friends where > parseValue = case > Array ns -> do > best <- ns ! 0 > second <- ns ! 1 > other <- mapM parseNode ns > pure $ Friends{best, second, other} !None"%1=>+ telescope%Await an event. Throw if out of input!!None"#%1=>. telescopeRoot ASDF node telescope'Required Software node at the top-level telescopeTag a value with a  telescopeVOUnit:  https://www.ivoa.net/documents/VOUnits/20231215/REC-VOUnits-1.1.html - Unrecognised units should be accepted by parsers, as long as they are parsed giving preference to the syntaxes and prefixes described here. telescope+Convert any ToAsdf into a raw Asdf documentNone"%1=>0  telescope Encode a  to a  telescope Encode a  to a  telescope Encode an  document to a  telescopeLow-level encoding of a node to a Yaml tree, without required headers, etc telescopeCreate a stream of yaml events telescope Decode a  to a  telescope Decode a  to a  telescope Decode a  to a  telescope Decode a  to a  telescope!Parse the asdf file parts into a  telescopeDecode the BlockIndex"None"%1=>1X<(uvyzxw(uyvzxwNone"%1=>3 telescopeWCSAlt options telescopeTyped WCS Axes data X data Y myFunction :: WCSAxis 'WCSMain X -> WCSAxis 'WCSMain Y -> Header myFunction wcsx wcsy = toHeader wcsx <> toHeader wcsy telescope'Converts a wcs keyword like "ctype" to CTYPE1A for header parsingNone"%1=>8  telescopeGeneric NodeName telescopeConvert a type to named axes data X deriving (Generic, ToAxes) data Y instance ToAxes Y where toAxes = ["y"] telescope WCSAxis s Y -> Transform (Pix X, PixY) (Scale X, Scale Y) spatialTransform wcsx wcsy = let dx = shift wcsx.crpix :: Transform (Pix X) (Shift X) dy = shift wcsy.crpix :: Transform (Pix Y) (Shift Y) xx = scale wcsx.cdelt :: Transform (Shift X) (Scale X) xy = scale wcsy.cdelt :: Transform (Shift Y) (Scale Y) in dx |> xx <&> dy |> xy telescopeA Tranform/ with the types stripped, and the axes recorded telescopeA step contains a frame (like ) and a 'Transform a b' telescope.GWCS pipelines consist of an input and output  telescopeConvert a type into a  via  and  telescopeCompose two transforms telescopeConcatent two transforms#$%None"%1=>:p telescope'Generate the Checksum per the FITS spec telescope0Encode the Checksum as ASCII chars per FITS specNone"%1=>: telescope*Manually look up a keyword from the headerNone"%1=>;;&'(None"%1=><+ telescope Construct a keyword HeaderRecord telescope"Set the comment of a KeywordRecrod&  )  None"%1=>< telescopeRaw HDU Data. See )  67893549678345 None"%1=>? telescopeA builder that keeps track of its length so we can pad and justify things telescope)Render required keywords for a data array telescope contains all other keywords. Filter out any that match system keywords so they aren't rendered twice telescope;Fill out the header or data block to the nearest 2880 bytes telescope/Smart constructor, don't allow negative lengths telescope.Execute a BuilderBlock and create a bytestringNone"%1=>B telescope Decode a  of arbitrary dimensions ix and type a. Consider inspecting the DataArray's (.bitpix) and (.axes) if these are unknown.)decodeDataArray @Ix2 @Float hdu.dataArrayArray D Seq (Sz (2 :. 3)) [ [ 1.0, 2.0, 3.0 ] , [ 4.0, 5.0, 6.0 ] ]This creates a delayed (D) array, which will postpone evaluation of cells until needed telescope Encode an " to a encodeImage array DataArray: data: 48 bytes dimensions: format: Int64 axes: [3,2] telescope%Create a DataArray from raw Fits infoNone"%1=>D telescope$Decode a FITS file read as a strict  0 decode =<< BS.readFile "samples/simple2x3.fits" telescopeEncode a FITS file to a strict  BS.writeFile $ encdoe fits telescope5Encode an HDU, properly handling datasum and checksum telescope8Fast replace a single keyword in a raw header bytestring telescopeParse HDUs by running MegaParsec parsers one at a time, tracking how much of the ByteString we've consumed(c) 2024 Sean HessBSD3Sean Hess  experimentalportableNone"%1=>E#$&'%  "! 69354 96345" !#$&%'*+,*+-*+./01/01/012/013/014/05/06/07/08/09/0:/0;/0</0=/0>/0>/0>?/0@/0A/0B/0C/0DEFGEFHEFHEFHIEJKEJLEJMEJNEOPEOQERSERTERUERVERWXYZ[\]^_`abcdefffghijklmnopqrstuvwxyz{|}~         [                                  5   6 8  Q                                                                                                                                        ! Ygg#('&))))g)EF*telescope-0.2.0-inplaceTelescope.Data.BinaryTelescope.Fits.HeaderTelescope.Fits.TypesTelescope.FitsTelescope.Asdf.ErrorTelescope.Data.AxesTelescope.Data.ArrayTelescope.Asdf.NDArray.TypesTelescope.Data.KnownTextTelescope.Data.ParserTelescope.Asdf.NodeTelescope.Asdf.Encoding.FileTelescope.Asdf.NDArrayTelescope.Asdf.ReferenceTelescope.Asdf.ClassTelescope.Asdf.Encoding.StreamTelescope.Asdf.CoreTelescope.Asdf.EncodingTelescope.Data.WCSTelescope.Asdf.GWCSTelescope.Fits.ChecksumTelescope.Fits.Header.KeywordTelescope.Fits.Header.ClassTelescope.Fits.Encoding.RenderTelescope.Fits.DataArrayTelescope.Fits.Encoding telescopePaths_telescope $dmanchor $dmparseValue $dmschema $dmtoNode $dmtoValueTelescope.Asdf $dmtoAxes54$dmparseHeader $dmtoHeader$dmtoKeywordRecord DataArraybase GHC.ByteOrder ByteOrder BigEndian LittleEndianfts-prs-0.4.2-d57e951c Data.Fits KeywordRecord_comment_value_keywordValueIntegerFloatStringLogicLogicalConstantTF hduBlockSizeHeader_records HeaderRecordKeywordComment BlankLine getKeywordsmssv-1.0.4.0-6d02dfc8Data.Massiv.Core.Index.InternalIx1DimunDimData.Massiv.Core.Index.IxIx5Ix4Ix3Ix2Data.Massiv.Core.CommonsizeArrayData.Massiv.Array.Ops.Slice!>!?> AsdfError YamlError BlockError ParseError EncodeErrorrunAsdfM$fShowAsdfError$fExceptionAsdfError $fEqAsdfError AxisOrderaxisNMajorRowColumnAxesaxesAxis axesRowMajoraxesColumnMajor toRowMajor toColumnMajor totalItems $fIsListAxes $fShowAxes$fEqAxes BinaryValuebyteSizeputget$fBinaryValueDouble$fBinaryValueFloat$fBinaryValueInt$fBinaryValueInt64$fBinaryValueInt32$fBinaryValueInt16$fBinaryValueInt8PutArrayputArray AxesIndex axesIndex indexAxes ArrayErrorBinaryParseError AxesMismatchResizeMismatch decodeArray encodeArraydecodeArrayOrder decodeVector fromVector axesIndexN indexAxesNsizeAxes$fAxesIndexIxN$fAxesIndexIxN0$fAxesIndexIxN1$fAxesIndexIx2$fAxesIndexInt $fPutArrayIxN$fPutArrayIxN0$fPutArrayIxN1 $fPutArrayIx2 $fPutArrayInt$fShowArrayError$fExceptionArrayError IsDataTypedataTypeDataTypeFloat64Float32Int64Int32Int16Int8Bool8Ucs4 NDArrayDatashapedatatype byteorderbytes$fShowNDArrayData$fIsDataTypeTYPEList$fIsDataTypeDataTypeInt8$fIsDataTypeTYPEInt16$fIsDataTypeTYPEInt32$fIsDataTypeTYPEInt64$fIsDataTypeTYPEFloat$fIsDataTypeTYPEDouble$fEqNDArrayData$fShowDataType $fEqDataType KnownText knownText$fKnownTextSymbolsRefChildIndexPath ParseFailureParser ParseFailPathAdd runParser runPureParserexpected parseFailparseAt $fShowRef $fShowPath$fShowParseError$fExceptionParseError$fEqParseError$fEqPath$fSemigroupPath $fMonoidPath$fEqRefAnchorsAnchoranchor JSONPointer JSONReferencepointeruriTreeObjectKeyBoolNumberNDArray ReferenceAliasNullNodevalueschema SchemaTag schemaTag fromValue jsonReference jsonPointer$fIsStringSchemaTag$fShowSchemaTag$fShowJSONPointer$fShowJSONReference $fMonoidValue$fSemigroupValue$fIsStringValue$fIsStringNode $fShowNode $fShowAnchors $fEqAnchors$fMonoidAnchors$fSemigroupAnchors$fSemigroupTree $fMonoidTree $fShowTree$fEqNode $fShowValue $fEqValue $fEqAnchor$fIsStringAnchor $fShowAnchor$fEqJSONReference$fEqJSONPointer$fMonoidSchemaTag$fSemigroupSchemaTag $fEqSchemaTagAsdfFileindexblockstreeChecksum Compression NoCompressionZLibBZip2 BlockIndex BlockHeaderchecksumdataSizeusedSize allocatedSize compressionflags headerSize BlockSource BlockDataEncodedBlock splitAsdfFile parseAsdfFile parseTree parseIndex parseBlocks parseBlockexactly parseUntilnonEmptyremainingBytes breakIndexconcatAsdfFile encodeTree encodeBlocks encodeBlock encodeIndex noChecksumgetBlock getBlocksgetBlockHeaderputBlockHeader blockIndexputBlock blockHeader getBlockDatablockMagicTokenblockIndexHeadercheckMagicToken getMagicToken$fShowBlockData$fShowAsdfFile $fEqAsdfFile$fShowBlockHeader$fEqBlockHeader$fShowChecksum $fEqChecksum$fShowCompression$fEqCompression$fEqBlockIndex$fEqBlockSource $fEqBlockData $fShowEncoded $fEqEncoded$fIsStringEncoded ToNDArray toNDArray FromNDArray fromNDArrayparseGet ndArrayPut ndArrayMassiv parseMassivputUcs4getUcs4 parseNDArray$fFromNDArrayArray$fFromNDArrayList$fFromNDArrayList0$fFromNDArrayList1$fToNDArrayArray$fToNDArrayList$fToNDArrayList0 findPointer GParseKey gParseKey GParseObject gParseObjectGToNodegToNode GToObject gToObjectFromAsdf parseValueToAsdftoValuetoNode parseInteger parseAnyList parseNode.:.:?!$fGToObjectk:*:$fGToObjectkM1$fGToObjectkM10$fToAsdfUTCTime$fToAsdfBlockSource $fToAsdfAxes$fToAsdfByteOrder$fToAsdfDataType$fToAsdfNDArrayData $fToAsdfTree $fToAsdfNode $fToAsdfValue $fToAsdfBool $fToAsdfList $fToAsdfText $fToAsdfArray $fToAsdfMaybe$fToAsdfTuple4$fToAsdfTuple3$fToAsdfTuple2$fToAsdfNonEmpty $fToAsdfList0 $fToAsdfFloat$fToAsdfDouble$fToAsdfInteger $fToAsdfInt64 $fToAsdfInt32 $fToAsdfInt16 $fToAsdfInt8 $fToAsdfInt $fGToNodekK1 $fGToNodekK10$fGToObjectkM11$fGParseObjectk:*:$fGParseObjectkM1$fGParseObjectkM10$fFromAsdfUTCTime$fFromAsdfByteOrder$fFromAsdfDataType$fFromAsdfNDArrayData$fFromAsdfTree$fFromAsdfNode$fFromAsdfValue$fFromAsdfBool$fFromAsdfList$fFromAsdfText$fFromAsdfArray$fFromAsdfMaybe$fFromAsdfList0$fFromAsdfList1$fFromAsdfList2$fFromAsdfList3$fFromAsdfList4$fFromAsdfList5$fFromAsdfList6$fFromAsdfTuple4$fFromAsdfTuple3$fFromAsdfTuple2$fFromAsdfNonEmpty$fFromAsdfList7$fFromAsdfFloat$fFromAsdfDouble$fFromAsdfInteger$fFromAsdfInt64$fFromAsdfInt32$fFromAsdfInt16$fFromAsdfInt8 $fFromAsdfInt$fGParseKeykK1$fGParseKeykK10$fGParseObjectkM11NoInput ExpectedEvent InvalidScalarInvalidScalarTag InvalidTreeNDArrayMissingKeyNDArrayMissingBlockNDArrayExpectedInvalidReferenceAnchorUndefined runStream runStreamListyieldDocumentStream yieldNodeaddBlock isComplexNodesinkTreesinkNode resolveAnchorndArrayDataFromMaps sinkMapping sinkMappings sinkWhile sinkSequence parseScalareventparseSchemaTag isNDArrayexpectexpect' sinkIndex addNodeAnchor$fShowYamlErrorExtensionMetadatasoftwareextension_classHistory extensionsAsdflibraryhistorySoftwareversionnamehomepageauthorQuantityunitUnitCountPixelDegrees Nanometers toAsdfDoc$fFromAsdfUnit $fToAsdfUnit$fFromAsdfQuantity$fToAsdfQuantity$fToAsdfSoftware$fToAsdfExtensionMetadata$fFromAsdfAsdf $fToAsdfAsdf $fShowHistory$fGenericHistory$fFromAsdfHistory$fToAsdfHistory$fShowExtensionMetadata$fGenericExtensionMetadata$fFromAsdfExtensionMetadata$fShowSoftware $fEqSoftware$fGenericSoftware$fFromAsdfSoftware$fGenericQuantity$fEqUnitencodeMencode encodeAsdf encodeNode encodeStreamdecodeM decodeEitherdecodedecodeFromTree parseAsdfTreestreamAsdfFile decodeBlockdecodeBlockIndex runYamlError runParseErrorWCSAltWCSMainABWCSAxiscdeltcrvalcrpixcunitctypeCTypeCUnit toWCSAxisKey$fKnownTextWCSAltB$fKnownTextWCSAltA$fKnownTextWCSAltWCSMain$fGenericWCSAxis $fEqWCSAxis $fShowWCSAxis $fEqCType $fShowCType $fEqCUnit $fShowCUnitTConcat GTypeName gtypeNameDeltaAlphaThetaPhiToAxestoAxesCompositeFrame FrameAxisaxisTypeaxisName axisOrder ICRSFrameCelestialFramereferenceFrame SpectralFrame StokesFrameCoordinateFrameLinearLinear1dslope interceptRotate3dpsithetaphi direction ProjectionAffine translationmatrix InterceptIdentityScaleShift DirectionPix2SkyNative2Celestial TransformtransformationForwardComposeConcatDirectfieldsTransformationforwardoutputsinputsLonPoleLatLonRotPixAxisTypeAxisNameGWCSStep transformframeGWCS|><&>frameAxesObjectshiftscalelinearrotateproject celestialidentity wcsLinear wcsIntercept$fToAsdfAxisType$fToAsdfTransformation$fToAsdfGWCSStep $fToAsdfGWCS$fToAsdfDirection $fToAsdfShift $fToAsdfScale$fToAsdfIdentity$fToAsdfAffine$fToAsdfProjection$fToAsdfRotate3d$fToAsdfLinear$fToAsdfStokesFrame$fToAsdfSpectralFrame$fToAsdfICRSFrame$fToAsdfCelestialFrame$fToAsdfCoordinateFrame$fToAsdfCompositeFrame$fGTypeNamekM1$fToAxesTuple4$fToAxesTuple3$fToAxesTuple2 $fToAxesUnit$fToAxesLinear $fToAxesRot $fToAxesShift $fToAxesScale $fToAxesPix $fGenericPhi $fToAxesPhi$fGenericTheta $fToAxesTheta$fGenericAlpha $fToAxesAlpha$fGenericDelta $fToAxesDelta$fGenericLinear$fGenericRotate3d$fShowIntercept $fEqIntercept$fShowIdentity $fEqIdentity $fShowScale $fEqScale $fShowShift $fEqShift$fShowDirection$fShowTransform$fGenericGWCSStep $fShowForward $fEqForward$fShowTransformation$fEqTransformation$fToAsdfLonPole $fToAsdfLat $fToAsdfLon$fIsStringAxisType$fIsStringAxisName$fToAsdfAxisName$fShowAxisName$fSemigroupAxisName $fEqAxisName c_char_encode c_checksumencodeChecksum checksumValueadd1s$fSemigroupChecksum lookupKeyword findKeyword isKeyword HeaderFor GFromHeader gParseHeader GToHeader gToHeader FromHeader parseHeaderToHeadertoHeader FromKeywordparseKeywordValue ToKeywordtoKeywordValuetoKeywordRecord parseKeyword cleanKeywordkeywordForField$fToKeywordCType$fToKeywordCUnit$fToKeywordBool$fToKeywordText$fToKeywordFloat$fToKeywordInt$fFromKeywordCType$fFromKeywordCUnit$fFromKeywordBool$fFromKeywordText$fFromKeywordFloat$fFromKeywordInt$fGToHeaderkM1$fGToHeaderkM10$fGToHeaderk:*:$fGToHeaderkM11$fGToHeaderkM12$fToHeaderWCSAxis$fToHeaderList$fToHeaderMaybe$fGFromHeaderkM1$fGFromHeaderkM10$fGFromHeaderk:*:$fGFromHeaderkM11$fGFromHeaderkM12$fFromHeaderWCSAxis$fGToHeaderkM13keyword addCommentIsBitPixbitPixBitPixBPInt8BPInt16BPInt32BPInt64BPFloatBPDoubleFits primaryHDU ExtensionImageBinTablerawDatabitpix BinTableHDU dataArrayheappCountheaderImageHDU PrimaryHDUemptyDataArray bitPixBits$fShowDataArray$fShowBinTableHDU$fShowImageHDU$fShowExtension$fShowPrimaryHDU $fShowFits$fIsBitPixTYPEDouble$fIsBitPixTYPEFloat$fIsBitPixTYPEInt64$fIsBitPixTYPEInt32$fIsBitPixTYPEInt16$fIsBitPixTYPEInt8 $fShowBitPix $fEqBitPix BuilderBlockbuilderlengthrenderDataArray renderDatarenderImageHeaderrenderPrimaryHeader renderDatasum renderEndrenderDataKeywordsrenderOtherKeywords fillBlockrenderKeywordLinerenderKeywordValue renderKeyword renderComment renderValue builderBlock runRenderjustifypadspaceszerospaddingstring$fMonoidBuilderBlock$fSemigroupBuilderBlock$fIsStringBuilderBlockdecodeDataArrayencodeDataArrayHDUErrorInvalidExtensionMissingPrimary FormatError InvalidHDUencodePrimaryHDUencodeImageHDUencodeExtension encodeHDUreplaceKeywordLine parseFits parseMainData nextParser$fShowHDUError$fExceptionHDUError getBinDir getDataDirgetDataFileName getDynLibDir getLibDir getLibexecDir getSysconfDir GHC.TypeLits KnownSymbolbytestring-0.12.1.0-7b92Data.ByteString.Internal.Type ByteString