<commit_before>(ns cmr.umm-spec.test.generate-and-parse
  "Tests roundtrip XML generation from a Clojure record and parsing it. Ensures that the same data
  is returned."
  (:require [clojure.test :refer :all]
            [clojure.java.io :as io]
            [clojure.test.check.generators :as gen]
            [com.gfredericks.test.chuck.clojure-test :refer [for-all]]
            [cmr.common.util :refer [update-in-each]]
            [cmr.common.test.test-check-ext :as ext :refer [defspec]]
            [cmr.umm-spec.test.expected-conversion :as expected-conversion]
            [cmr.umm-spec.test.umm-record-sanitizer :as sanitize]
            [cmr.umm-spec.core :as core]
            [cmr.umm-spec.simple-xpath :refer [select context]]
            [cmr.umm-spec.xml-to-umm-mappings.iso19115-2 :as iso-xml-to-umm]
            [cmr.umm-spec.umm-to-xml-mappings.iso19115-2 :as iso-umm-to-xml]
            [cmr.umm-spec.iso-keywords :as kws]
            [cmr.umm-spec.iso19115-2-util :as iu]
            [cmr.umm-spec.umm-to-xml-mappings.echo10 :as echo10]
            [cmr.common.util :refer [are2]]
            [cmr.umm-spec.test.umm-generators :as umm-gen]))

(def tested-formats
  "Seq of formats to use in round-trip conversion and XML validation tests."
  [:dif :dif10 :echo10 :iso19115 :iso-smap])

(defn xml-round-trip
  "Returns record after being converted to XML and back to UMM through
  the given to-xml and to-umm mappings."
  [record format]
  (let [metadata-xml (core/generate-metadata :collection format record)]
    ;; validate against xml schema
    (is (empty? (core/validate-xml :collection format metadata-xml)))
    (core/parse-metadata :collection format metadata-xml)))

(deftest roundtrip-example-record
  (doseq [metadata-format tested-formats]
    (testing (str metadata-format)
      (is (= (expected-conversion/convert expected-conversion/example-record metadata-format)
             (xml-round-trip expected-conversion/example-record metadata-format))))))

(defspec roundtrip-generated-records 100
  (for-all [umm-record (gen/no-shrink umm-gen/umm-c-generator)
            metadata-format (gen/elements tested-formats)]
    (is (= (expected-conversion/convert umm-record metadata-format)
           (xml-round-trip umm-record metadata-format)))))

(defn- parse-iso19115-projects-keywords
  "Returns the parsed projects keywords for the given ISO19115-2 xml"
  [metadata-xml]
  (let [md-data-id-el (first (select (context metadata-xml) iso-xml-to-umm/md-data-id-base-xpath))]
    (seq (#'kws/descriptive-keywords md-data-id-el "project"))))

;; Info in UMM Projects field is duplicated in ISO191152 xml in two different places.
;; We parse UMM Projects from the gmi:MI_Operation, not from gmd:descriptiveKeywords.
;; This test is to verify that we populate UMM Projects in gmd:descriptiveKeywords correctly as well.
(defspec iso19115-projects-keywords 100
  (for-all [umm-record umm-gen/umm-c-generator]
    (let [metadata-xml (core/generate-metadata :collection :iso19115 umm-record)
          projects (:Projects (core/parse-metadata :collection :iso19115 metadata-xml))
          expected-projects-keywords (seq (map iu/generate-title projects))]
      (is (= expected-projects-keywords
             (parse-iso19115-projects-keywords metadata-xml))))))

(comment

  (println (core/generate-metadata :collection :iso-smap user/failing-value))

  (is (= (expected-conversion/convert user/failing-value :iso-smap)
         (xml-round-trip user/failing-value :iso-smap)))

  ;; random XML gen
  (def metadata-format :dif)
  (def metadata-format :iso19115)
  (def metadata-format :echo10)
  (def metadata-format :dif)<commit_msg>CMR-1852: Added test with failure case uncovered by generated round-trip test.<commit_after>(ns cmr.umm-spec.test.generate-and-parse
  "Tests roundtrip XML generation from a Clojure record and parsing it. Ensures that the same data
  is returned."
  (:require [clojure.test :refer :all]
            [clojure.java.io :as io]
            [clojure.test.check.generators :as gen]
            [com.gfredericks.test.chuck.clojure-test :refer [for-all]]
            [cmr.common.util :refer [update-in-each]]
            [cmr.common.test.test-check-ext :as ext :refer [defspec]]
            [cmr.umm-spec.test.expected-conversion :as expected-conversion]
            [cmr.umm-spec.test.umm-record-sanitizer :as sanitize]
            [cmr.umm-spec.core :as core]
            [cmr.umm-spec.simple-xpath :refer [select context]]
            [cmr.umm-spec.xml-to-umm-mappings.iso19115-2 :as iso-xml-to-umm]
            [cmr.umm-spec.umm-to-xml-mappings.iso19115-2 :as iso-umm-to-xml]
            [cmr.umm-spec.iso-keywords :as kws]
            [cmr.umm-spec.iso19115-2-util :as iu]
            [cmr.umm-spec.umm-to-xml-mappings.echo10 :as echo10]
            [cmr.common.util :refer [are2]]
            [cmr.umm-spec.test.umm-generators :as umm-gen]))

(def tested-formats
  "Seq of formats to use in round-trip conversion and XML validation tests."
  [:dif :dif10 :echo10 :iso19115 :iso-smap])

(defn xml-round-trip
  "Returns record after being converted to XML and back to UMM through
  the given to-xml and to-umm mappings."
  [record format]
  (let [metadata-xml (core/generate-metadata :collection format record)]
    ;; validate against xml schema
    (is (empty? (core/validate-xml :collection format metadata-xml)))
    (core/parse-metadata :collection format metadata-xml)))

(deftest roundtrip-example-record
  (doseq [metadata-format tested-formats]
    (testing (str metadata-format)
      (is (= (expected-conversion/convert expected-conversion/example-record metadata-format)
             (xml-round-trip expected-conversion/example-record metadata-format))))))

(defspec roundtrip-generated-records 100
  (for-all [umm-record (gen/no-shrink umm-gen/umm-c-generator)
            metadata-format (gen/elements tested-formats)]
    (is (= (expected-conversion/convert umm-record metadata-format)
           (xml-round-trip umm-record metadata-format)))))

(defn- parse-iso19115-projects-keywords
  "Returns the parsed projects keywords for the given ISO19115-2 xml"
  [metadata-xml]
  (let [md-data-id-el (first (select (context metadata-xml) iso-xml-to-umm/md-data-id-base-xpath))]
    (seq (#'kws/descriptive-keywords md-data-id-el "project"))))

;; Info in UMM Projects field is duplicated in ISO191152 xml in two different places.
;; We parse UMM Projects from the gmi:MI_Operation, not from gmd:descriptiveKeywords.
;; This test is to verify that we populate UMM Projects in gmd:descriptiveKeywords correctly as well.
(defspec iso19115-projects-keywords 100
  (for-all [umm-record umm-gen/umm-c-generator]
    (let [metadata-xml (core/generate-metadata :collection :iso19115 umm-record)
          projects (:Projects (core/parse-metadata :collection :iso19115 metadata-xml))
          expected-projects-keywords (seq (map iu/generate-title projects))]
      (is (= expected-projects-keywords
             (parse-iso19115-projects-keywords metadata-xml))))))

;; TODO This test fails. This failure case was caught by the round-trip-generated-records test.
; (deftest bad-instruments-parsing
;   (let [failing-value #cmr.umm_spec.models.collection.UMM-C{:CollectionCitations [#cmr.umm_spec.models.common.ResourceCitationType{:SeriesName "\"ZF(|", :Creator "Zd00[.T", :ReleasePlace nil, :Title nil, :DOI nil, :Publisher nil, :ReleaseDate nil, :RelatedUrl nil, :IssueIdentification nil, :Editor nil, :DataPresentationForm nil, :Version nil, :OtherCitationDetails nil}], :MetadataDates [#cmr.umm_spec.models.common.DateType{:Date #=(cmr.common.joda-time/date-time 192883598499 "UTC"), :Type "UPDATE"} #cmr.umm_spec.models.common.DateType{:Date #=(cmr.common.joda-time/date-time 2420430037927 "UTC"), :Type "UPDATE"} #cmr.umm_spec.models.common.DateType{:Date #=(cmr.common.joda-time/date-time 2304181132037 "UTC"), :Type "DELETE"} #cmr.umm_spec.models.common.DateType{:Date #=(cmr.common.joda-time/date-time 458215973476 "UTC"), :Type "DELETE"}], :SpatialKeywords ["R.,0[yNaXn,mwBQnEF)" "!R%@-tE]@aRN*A'@9s9i(2KXdnrtu3a/"], :ISOTopicCategories ["environment" "intelligenceMilitary" "planningCadastre" "society" "boundaries"], :TilingIdentificationSystem #cmr.umm_spec.models.common.TilingIdentificationSystemType{:TilingIdentificationSystemName "Z(^O_I[", :Coordinate1 #cmr.umm_spec.models.common.TilingCoordinateType{:MinimumValue -0.05882352941176471, :MaximumValue -1.619047619047619}, :Coordinate2 #cmr.umm_spec.models.common.TilingCoordinateType{:MinimumValue 4.444444444444444, :MaximumValue 16.5}}, :Abstract "m(!ibkl_5", :MetadataLanguage "_}Ob03tpl0", :Personnel [#cmr.umm_spec.models.common.ResponsibilityType{:Role "PUBLISHER", :Party #cmr.umm_spec.models.common.PartyType{:OrganizationName #cmr.umm_spec.models.common.OrganizationNameType{:ShortName ")D?Y", :LongName "h/=L1p/", :Uuid "ade59e53-3b81-4bdc-A03f-1fbca8e3b971"}, :Person nil, :ServiceHours "6xl", :ContactInstructions ";&'%.Gaw", :Contacts nil, :Addresses [#cmr.umm_spec.models.common.AddressType{:StreetAddresses ["(" "w$/;"], :City "a^qS5UoE", :StateProvince "|!.@84{\"h", :PostalCode nil, :Country "iT-08ne"} #cmr.umm_spec.models.common.AddressType{:StreetAddresses nil, :City "a\"?K3", :StateProvince "1ws1HAZ6z*", :PostalCode nil, :Country "P)7/=ha7'"} #cmr.umm_spec.models.common.AddressType{:StreetAddresses nil, :City "f", :StateProvince "xQDHy3jk]\"", :PostalCode nil, :Country "E/sI"} #cmr.umm_spec.models.common.AddressType{:StreetAddresses nil, :City "=#2*.\\\"fq=", :StateProvince nil, :PostalCode nil, :Country nil}], :RelatedUrls [#cmr.umm_spec.models.common.RelatedUrlType{:Description "+BZT32DO)", :ContentType nil, :Protocol nil, :URLs ["file://357.org/h1U2lrxp1X3KBnXbiak.png"], :Title "c.U)", :MimeType ":w", :Caption nil, :FileSize #cmr.umm_spec.models.common.FileSizeType{:Size 2.3125, :Unit nil}}]}} #cmr.umm_spec.models.common.ResponsibilityType{:Role "CUSTODIAN", :Party #cmr.umm_spec.models.common.PartyType{:OrganizationName #cmr.umm_spec.models.common.OrganizationNameType{:ShortName "A=g{s2M", :LongName nil, :Uuid nil}, :Person nil, :ServiceHours "=", :ContactInstructions "Up>JY0u", :Contacts [#cmr.umm_spec.models.common.ContactType{:Type "F4bn\"8r;{", :Value "+&k{"}], :Addresses nil, :RelatedUrls nil}} #cmr.umm_spec.models.common.ResponsibilityType{:Role "PUBLISHER", :Party #cmr.umm_spec.models.common.PartyType{:OrganizationName nil, :Person #cmr.umm_spec.models.common.PersonType{:FirstName "xg-_X4", :MiddleName nil, :LastName "E&Lf&zH", :Uuid nil}, :ServiceHours "`R", :ContactInstructions "fvPUG{,i", :Contacts [#cmr.umm_spec.models.common.ContactType{:Type "PFv= }H", :Value "]BDm.[`{$v"} #cmr.umm_spec.models.common.ContactType{:Type "^V.IIx#?Jj", :Value "iq=$vVj:!["} #cmr.umm_spec.models.common.ContactType{:Type nil, :Value "1"}], :Addresses [#cmr.umm_spec.models.common.AddressType{:StreetAddresses nil, :City "J<L!M.3K", :StateProvince "i", :PostalCode nil, :Country "S:}:)"} #cmr.umm_spec.models.common.AddressType{:StreetAddresses nil, :City "B/6jZl{$M", :StateProvince nil, :PostalCode nil, :Country nil} #cmr.umm_spec.models.common.AddressType{:StreetAddresses nil, :City "\"c62p-ncn", :StateProvince "&uA\\G<%>X", :PostalCode nil, :Country nil} #cmr.umm_spec.models.common.AddressType{:StreetAddresses nil, :City "i", :StateProvince nil, :PostalCode nil, :Country nil}], :RelatedUrls nil}} #cmr.umm_spec.models.common.ResponsibilityType{:Role "STAKEHOLDER", :Party #cmr.umm_spec.models.common.PartyType{:OrganizationName nil, :Person #cmr.umm_spec.models.common.PersonType{:FirstName ".", :MiddleName "} ,X^xHD", :LastName "7P)_-9VG)", :Uuid "6f02d629-5f77-4c2f-bee4-0ceba79fbbaf"}, :ServiceHours nil, :ContactInstructions "fk65^`W=wI", :Contacts [#cmr.umm_spec.models.common.ContactType{:Type nil, :Value "iKGHCH5a"} #cmr.umm_spec.models.common.ContactType{:Type "^cb=", :Value "8RvN[&"}], :Addresses nil, :RelatedUrls nil}} #cmr.umm_spec.models.common.ResponsibilityType{:Role "AUTHOR", :Party #cmr.umm_spec.models.common.PartyType{:OrganizationName #cmr.umm_spec.models.common.OrganizationNameType{:ShortName "KaBs", :LongName nil, :Uuid nil}, :Person nil, :ServiceHours nil, :ContactInstructions nil, :Contacts [#cmr.umm_spec.models.common.ContactType{:Type nil, :Value "#yN"} #cmr.umm_spec.models.common.ContactType{:Type nil, :Value ".DSw@q"} #cmr.umm_spec.models.common.ContactType{:Type "wG(,w", :Value "?Us~M?/0#,"}], :Addresses nil, :RelatedUrls nil}}], :DirectoryNames nil, :Purpose "s<F%@ElLW", :PublicationReferences nil, :RelatedUrls [#cmr.umm_spec.models.common.RelatedUrlType{:Description "f$:f6#W", :ContentType nil, :Protocol "41,\\G][[", :URLs ["ftp://0B0Rs6U5E8gwB6x4.com/2fDRPG5uajDQZ5IoVN7lFoYEM.gif" "ftp://NmZnaIVt5AgkY7thc9fm1l4xeKsVyTqOA20.org/AG6u4RFnYmSV0e2091n54TdgO2Nl5Fd6vZi.jpg" "https://UKs4.org/Gfgiqc7qUp5jSXvaoPBu.png" "ftp://43U6cdZj10zt5.org/eR2JAa34NkI7I65uK2RTXWDN2gG3q636YYOJDR6C1.tiff" "file://feyoByO5Lucxec73h4cA9B9lZ1gG3kt7DEVh6e3.gov/p8Fv1497jF9aU1UQyYx6AGr2mRtk96qlLM.tiff"], :Title "q:x%{e<++", :MimeType "cDVI", :Caption nil, :FileSize #cmr.umm_spec.models.common.FileSizeType{:Size -18.5, :Unit "PA|"}} #cmr.umm_spec.models.common.RelatedUrlType{:Description "DZ8\\o#yCc", :ContentType nil, :Protocol ")-,.d", :URLs ["ftp://lnaqw6L439T6By20jhX73945AQV2kdIXN1nbfY84.gov/5.tiff" "file://Ubv6z3tS86vL1L04uhW7ygJ3J8YB2U1q0.gov/3kkOk9CNg7yEvXlhXICPf2Sxhn5j4YhM35z4EdduYJWqxzjL.txt" "http://0MG1Ih9B3jm15f26vp1x273185EWIL6GC488Y7bUC0198LxTL.gov/st9gKH4JrZ431WO7mxugF7Nm5W71C1PHO0139uM8Tlo1D.jpg" "https://g073X4tSoh0PqJy20pO1yW6J.com/GYcouqQFQY4ygPWWnE4MLs13EL2.gif"], :Title "0u;m;Si$;}", :MimeType "&N5)Z", :Caption nil, :FileSize #cmr.umm_spec.models.common.FileSizeType{:Size -1.021739130434783, :Unit nil}} #cmr.umm_spec.models.common.RelatedUrlType{:Description nil, :ContentType nil, :Protocol nil, :URLs ["ftp://P5gP176Fgk3aJb9E4R79C1Wf1gofPH.com/1X755kE5.tiff" "http://c340.com/3e7.tiff" "http://I.gov/z5F4Ay6pD7H86GBp1pbS5p46I2w0J7w2K96bYU4W.txt" "https://S3Ag0iQz42IuQJWU8W48mpxYMw1w.gov/9MN3417MSrnwa43Tgf0ah4ks2Qf32.jpg"], :Title nil, :MimeType nil, :Caption nil, :FileSize #cmr.umm_spec.models.common.FileSizeType{:Size -0.6274509803921569, :Unit nil}} #cmr.umm_spec.models.common.RelatedUrlType{:Description "&h=zxp5G_y", :ContentType #cmr.umm_spec.models.common.ContentTypeType{:Type "`GDfLcX*", :Subtype "{7^qaY~up,"}, :Protocol ",k\"9,u3q?", :URLs ["http://a3Ja77Z3.org/2xJDot3g968kPS3lkH7weAj7Pu1.tiff"], :Title "9_](", :MimeType "Y)rG]U", :Caption nil, :FileSize #cmr.umm_spec.models.common.FileSizeType{:Size 3.9, :Unit nil}}], :DataDates [#cmr.umm_spec.models.common.DateType{:Date #=(cmr.common.joda-time/date-time 3982882855913 "UTC"), :Type "REVIEW"} #cmr.umm_spec.models.common.DateType{:Date #=(cmr.common.joda-time/date-time 1663520963311 "UTC"), :Type "DELETE"} #cmr.umm_spec.models.common.DateType{:Date #=(cmr.common.joda-time/date-time 1455662574938 "UTC"), :Type "UPDATE"}], :Organizations [#cmr.umm_spec.models.common.ResponsibilityType{:Role "RIGHTSHOLDER", :Party #cmr.umm_spec.models.common.PartyType{:OrganizationName #cmr.umm_spec.models.common.OrganizationNameType{:ShortName ",no<*tC", :LongName nil, :Uuid nil}, :Person nil, :ServiceHours ".4soMhR!+%", :ContactInstructions "GNXK", :Contacts [#cmr.umm_spec.models.common.ContactType{:Type "mpk@9#", :Value "[-9d \"\\W`u"} #cmr.umm_spec.models.common.ContactType{:Type "48", :Value "p)J4n\\K["}], :Addresses nil, :RelatedUrls nil}} #cmr.umm_spec.models.common.ResponsibilityType{:Role "AUTHOR", :Party #cmr.umm_spec.models.common.PartyType{:OrganizationName #cmr.umm_spec.models.common.OrganizationNameType{:ShortName "d`'W '", :LongName nil, :Uuid "9ed2befb-b15e-419b-Bcf4-92a3400d7412"}, :Person nil, :ServiceHours "4C", :ContactInstructions ".8=qQm", :Contacts nil, :Addresses nil, :RelatedUrls nil}} #cmr.umm_spec.models.common.ResponsibilityType{:Role "CUSTODIAN", :Party #cmr.umm_spec.models.common.PartyType{:OrganizationName #cmr.umm_spec.models.common.OrganizationNameType{:ShortName "2Bo8Z*?", :LongName "yAX", :Uuid "542afe40-21d7-44ac-Bca9-cb981169cfc2"}, :Person nil, :ServiceHours nil, :ContactInstructions "hig$", :Contacts nil, :Addresses nil, :RelatedUrls nil}}], :AccessConstraints #cmr.umm_spec.models.common.AccessConstraintsType{:Description "\"rMa1uO+Q", :Value -0.9024390243902439}, :SpatialExtent #cmr.umm_spec.models.common.SpatialExtentType{:SpatialCoverageType "HORIZONTAL", :HorizontalSpatialDomain #cmr.umm_spec.models.common.HorizontalSpatialDomainType{:ZoneIdentifier nil, :Geometry #cmr.umm_spec.models.common.GeometryType{:CoordinateSystem "CARTESIAN", :Points [#cmr.umm_spec.models.common.PointType{:Longitude -0.03846153846153846, :Latitude -0.2333333333333333} #cmr.umm_spec.models.common.PointType{:Longitude -0.7254901960784313, :Latitude 0.2978723404255319} #cmr.umm_spec.models.common.PointType{:Longitude -2.666666666666667, :Latitude -0.673469387755102} #cmr.umm_spec.models.common.PointType{:Longitude 0.4888888888888889, :Latitude -0.5}], :BoundingRectangles nil, :GPolygons nil, :Lines nil}}, :VerticalSpatialDomains nil, :OrbitParameters #cmr.umm_spec.models.common.OrbitParametersType{:SwathWidth 1.25, :Period -0.1739130434782609, :InclinationAngle 1.7, :NumberOfOrbits 8.4, :StartCircularLatitude nil}, :GranuleSpatialRepresentation "ORBIT"}, :MetadataLineages nil, :AdditionalAttributes nil, :EntryId "dk|", :ScienceKeywords (#cmr.umm_spec.models.common.ScienceKeywordType{:Category "BN,otE1NDO1F1#K'.cAm1wUMzTkgZK=)6Bd\"UqO@/tkp!GB]Qpf4/g5aRyDk]", :Topic "lz'CW'CZoWYDjWHQQBeQsMgnFlNnWpTc-H .e==0RS9ksWG0-.n5&", :Term "-pmrICkG00uxda$#e%SlMFs\"3G$dVeF-WFhnsU/o#yL\"904y=4us*j2ki3@Jj[ET\"00=/qEL0KCAeqz", :VariableLevel1 "D,J97/ED9^IfDU@N#AOA oZtRhVmk63+^cY1Z4=orGd[-72h$k*-98Uq1M*lWr-Ak4Mxg", :VariableLevel2 "DIA1[]4=,.t!Hod].5@G+x@Vj&*CCxB[LNj0W22v%/", :VariableLevel3 nil, :DetailedVariable nil}), :Quality "bw]", :EntryTitle "rk", :Distributions [#cmr.umm_spec.models.common.DistributionType{:DistributionMedia nil, :DistributionSize nil, :DistributionFormat "`Oq*pC", :Fees nil} #cmr.umm_spec.models.common.DistributionType{:DistributionMedia nil, :DistributionSize nil, :DistributionFormat "&EXB", :Fees 1.80952380952381}], :CollectionProgress "COMPLETE", :SpatialInformation #cmr.umm_spec.models.collection.SpatialInformationType{:VerticalCoordinateSystem #cmr.umm_spec.models.collection.VerticalCoordinateSystemType{:AltitudeSystemDefinition nil, :DepthSystemDefinition #cmr.umm_spec.models.collection.VerticalSystemDefinitionType{:DatumName "~-|&I7aUD", :DistanceUnits "o8aOt5Z]zh", :EncodingMethod "VLDjLf_]", :Resolutions [0.6153846153846154 -3.25 3.6 1.285714285714286]}}, :HorizontalCoordinateSystem nil, :SpatialCoverageType "|mf9~}"}, :CollectionDataType "OTHER", :UseConstraints nil, :TemporalKeywords nil, :AncillaryKeywords nil, :ProcessingLevel #cmr.umm_spec.models.collection.ProcessingLevelType{:ProcessingLevelDescription nil, :Id "T67}V"}, :Platforms [#cmr.umm_spec.models.common.PlatformType{:Type nil, :ShortName "U6A&M$1-WFobl#A+8VbSPYa6qjL[#'6S8g%d\"$RDZ", :LongName nil, :Characteristics nil, :Instruments nil} #cmr.umm_spec.models.common.PlatformType{:Type "ZDe8nH", :ShortName "ye-a\"H*jSIOvGZL(0)b0@2OPbpCl-O1mp+)6=IlS(i51Qq7[Ij0vKypGxhd\"6O.&y3Gs/", :LongName "M/d=g=&u-oLq)#4I3x$i#^TuAhx]K6'r#GzMEq(#XPGCyOhVmqkapeU\"[Pb,^)(#IZgf9T@cWhlE4I*=^H.#kEGkvFLlH6z=,Gt/4qN*w.O6X Ll4iGRQ[$&kLO2n*YRwk OMb!,8IgpWDt,nm&FM(d8GqymyXdzyPJp6$lcrtmfvmt@cE[Q]Wq7u+ouj=]ktuY#br4w GNkU(nxSftz)t]I3oTm N-rbgYwxH-MG3)L2K/^z!jef!^kMntuJR*3+9]#)8%tRq@U,VwVA+jT,/GvW]sxUri2MWr7dZq+n/6BKpt-%PrE%vd4y5po@2rSA)Mkn6+cbWHBUbP5+X1otVeiV*Zl\"W)AY(3C24MM44QUWEqUOT)w'M6HecY#BzR/bQ#(Ze)vN,jEr3AOA&#g/kej%zf=n.NXcruj3V0]K-ZpnkV9h=TLIRw!zZ", :Characteristics nil, :Instruments [#cmr.umm_spec.models.common.InstrumentType{:ShortName "^%", :LongName nil, :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "Vy\"1 ", :Description "K;EX> \"}eP", :Value "*V,&", :Unit "3[F0z(gd", :DataType "SwNvL8USC7DkdPJA2Ow82EAu"} #cmr.umm_spec.models.common.CharacteristicType{:Name "-$2.&", :Description "PO.i?]*", :Value "qykZmu)7", :Unit "L?b", :DataType "qSxsoRpWssZlJ6ieerhddHzBCGF"} #cmr.umm_spec.models.common.CharacteristicType{:Name "sEm_C,n", :Description "N%1p?d", :Value "l1vgi[k]", :Unit "h)", :DataType "mB1MDYAfg1aKufHopmz2hzDiE3"} #cmr.umm_spec.models.common.CharacteristicType{:Name "I_", :Description "yh<", :Value "uuwN)y|", :Unit "E,-", :DataType "L4oentes"} #cmr.umm_spec.models.common.CharacteristicType{:Name "87!J~lM", :Description ";*$J,U]H", :Value "*RcSm", :Unit "E7", :DataType "4Q9CPgVvoNWXmVOci3diREcUm"}], :Technique nil, :NumberOfSensors 40, :Sensors [#cmr.umm_spec.models.common.SensorType{:ShortName "(dsj7", :LongName "0t_e", :Characteristics nil, :Technique "k"} #cmr.umm_spec.models.common.SensorType{:ShortName "G:`", :LongName nil, :Characteristics nil, :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "5!97y$3}!O", :LongName nil, :Characteristics nil, :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "[_#$*b8#ds", :LongName nil, :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "z0ZK_,", :Description "uk+6", :Value "K^:|e", :Unit ">BE4", :DataType "eDL0QjVz5kxRT01Lf5AhPxSR321Vb4pvYtuHsayMALBaoJPl9hlsmqpTONR"} #cmr.umm_spec.models.common.CharacteristicType{:Name "ftV2", :Description " FU<3u;", :Value "d4Sc", :Unit " zN*", :DataType "qlwDYrUx4Izr46pLgylogDu"} #cmr.umm_spec.models.common.CharacteristicType{:Name "l(*", :Description "-`*", :Value "=,Lj}`]e", :Unit "V~/e6L/z^", :DataType "UC2XuQbRI9heCiDB3LgzcRHDtmADyXCgMn"} #cmr.umm_spec.models.common.CharacteristicType{:Name "M.M", :Description "eTYg]O#]Oo", :Value "PS-$-4", :Unit "B#lo-uWf-", :DataType "Ync6RNmCitfyEK3NnQt5lbH2U5XDvdwyj3kSxVDCTk65LTOvyK5JifXKuJBRfHw"} #cmr.umm_spec.models.common.CharacteristicType{:Name "Ff", :Description "9l$6*", :Value "vVl", :Unit "m:i)6}", :DataType "MqpmuurYC5BlQYbdSOIhAq9N8Xz4cYYIYnUT7lKC"}], :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "<", :LongName nil, :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "J%;3!J>", :Description "Sl[o+Wa", :Value "S`yM", :Unit "j>V'pr?A", :DataType "YR4TAW1QWVeRveM95yYu9oxV0SKxiYQvHLt69f4OqmDIsqYSwnNSlhO7e5cDTPVXNtSunIk"} #cmr.umm_spec.models.common.CharacteristicType{:Name "j,Ut_<0]eq", :Description "qoCBk-RxY", :Value "ke[{", :Unit "a\\o", :DataType "5SfB1MQ8BiZ4zuOwMZ9UUR4nYVFSKqKRwE7yg5baX5CoJ5053Y9SoRLJkY8nu3kbrSH6bco"} #cmr.umm_spec.models.common.CharacteristicType{:Name "^l9r", :Description "=U8\\M3;?", :Value "dBhTyr_b<", :Unit "sZz", :DataType "hwOgovm4k6QgWjf0EnsaAotF6mEraTXyA8QyrSRxpWp2WOETcT309J2ZRr4qlr4lRV"} #cmr.umm_spec.models.common.CharacteristicType{:Name "jgCoHb", :Description "tEJ?j", :Value "~#((E,", :Unit "Fy", :DataType "ZvneskmATZcn"} #cmr.umm_spec.models.common.CharacteristicType{:Name "n", :Description "mEm", :Value "~iPXDP*g", :Unit "r\\Sw%Q:G2", :DataType "8dsNEA6xiTH6CP4Ba5NJxcsiIUlpREwdo2PBiytjW7EC3wqwJyDFtYjV1RpHIIWo"}], :Technique nil}], :OperationalModes nil} #cmr.umm_spec.models.common.InstrumentType{:ShortName " P&Tp", :LongName "l6\\*hNcUa", :Characteristics nil, :Technique nil, :NumberOfSensors 47, :Sensors [#cmr.umm_spec.models.common.SensorType{:ShortName "zW4", :LongName nil, :Characteristics nil, :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "kUvK$", :LongName "Q6v", :Characteristics nil, :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "SyR.}*cSo", :LongName "Z1+'", :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "#", :Description "Q", :Value "X", :Unit "9v-@_/", :DataType "TXMaIIN0WX08kjm9cgkpsVzw0LKGVC6mZ1YwmaUXJBVUa5kHkQzdTf6uV"} #cmr.umm_spec.models.common.CharacteristicType{:Name "WP(", :Description "Y//", :Value "W;t3nlss", :Unit "7'", :DataType "ZclYd7"} #cmr.umm_spec.models.common.CharacteristicType{:Name "J9iv`YLN", :Description "`Gb$", :Value "V K", :Unit "]CDnelo\\{3", :DataType "0zyoT4YQii6LBgZU7c9oOvhdgXfuqutHHDVG3MNuEEU1fNA"} #cmr.umm_spec.models.common.CharacteristicType{:Name "05k$xi.Nd", :Description "@L|k$:Fi", :Value ".|gy@K$xj(", :Unit "D;3<]KU", :DataType "qM0x09DhpHoPQIpzi9De8gEmEW145CVXPMLSj47CIm"}], :Technique "n"} #cmr.umm_spec.models.common.SensorType{:ShortName "e^", :LongName ")XoPHg|", :Characteristics nil, :Technique "-9+[!&0@"} #cmr.umm_spec.models.common.SensorType{:ShortName "-dIg", :LongName nil, :Characteristics nil, :Technique nil}], :OperationalModes nil} #cmr.umm_spec.models.common.InstrumentType{:ShortName "]c", :LongName nil, :Characteristics nil, :Technique nil, :NumberOfSensors -21, :Sensors [#cmr.umm_spec.models.common.SensorType{:ShortName "#3g", :LongName ",5:ZDyoZ", :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "bDL\"gF>", :Description "v*iZ3cv]k", :Value "ZD~U(?", :Unit "Ej(IR", :DataType "PeoaP6KR0CCFiuJg4tPfbRAGiXMEMkOzLDK7px5Jl4HLGaJJZiARzfvdJZIGbsTsp"} #cmr.umm_spec.models.common.CharacteristicType{:Name "Gk.{D0|;7", :Description "?OV", :Value "<!6dku=3", :Unit "R, [@9T&Ic", :DataType "o1q"} #cmr.umm_spec.models.common.CharacteristicType{:Name "m)ez", :Description ")ozGHGiTw ", :Value "]C~w#t0~", :Unit "/R}gs", :DataType "m"}], :Technique nil}], :OperationalModes nil} #cmr.umm_spec.models.common.InstrumentType{:ShortName "t5D >", :LongName nil, :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "u5_H:", :Description "C[b", :Value "7Rl[4_jxV", :Unit "V{V3x['\"1", :DataType "W2oL3BDb19LGzYTBIQ"} #cmr.umm_spec.models.common.CharacteristicType{:Name "}", :Description "7", :Value "yUK/\"zvM", :Unit ">", :DataType "NCZs5YwEgyVagZZIqZ4BdolpK523zM6ppB1WljMAfQr3k001RTPZgUXuO8A7IMJaAj"} #cmr.umm_spec.models.common.CharacteristicType{:Name "2m&dtki", :Description "@>rI-)]B", :Value "|U?>$G'", :Unit "/(u=$", :DataType "GanZOqX0XqDIoNE45tCNutmCCf37feL2gdtsB4FbLyMeFORqn9t0Zl7nQ"} #cmr.umm_spec.models.common.CharacteristicType{:Name "I8t/r", :Description "q ", :Value "1.2foL'", :Unit "UUY", :DataType "XeD1h85EWzgL4BePayrn7sptSi58eP8hIXd1N3h6jaeskQs0sn38kXkABWPhVMESIcvC6CY6Dfk"}], :Technique nil, :NumberOfSensors nil, :Sensors [#cmr.umm_spec.models.common.SensorType{:ShortName "?:5FA|1\" f", :LongName "OP6<!8", :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "a}", :Description "BR<$\".", :Value "ihNJ'i-", :Unit "'ij?*7D", :DataType "W21VhB8VIE0DU"} #cmr.umm_spec.models.common.CharacteristicType{:Name "l@cvq", :Description "Y<KN", :Value "R<0|>\\7p", :Unit "(]\\I", :DataType "2s80cZuCidxTSpNBCsWKAtMVNcglMG8HX"}], :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "qys-M-\"u", :LongName nil, :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "YGUD", :Description "E", :Value "[SeP3x-x5", :Unit "Wn=\\}@;/0r", :DataType "ElA8vvC2vhapyYtfamjUADpudXoBTmV"} #cmr.umm_spec.models.common.CharacteristicType{:Name "bQM~3p", :Description "LaCdxw(", :Value ",9r", :Unit "h4", :DataType "xnfQPuBCayfzQnRf2MPVxXcKOwPfw6zQvBXfzhctkRZvu"} #cmr.umm_spec.models.common.CharacteristicType{:Name "pw5gV", :Description "DYes}-OQ=", :Value "{#6aw3", :Unit "uqY1", :DataType "gXnBWQd2S"} #cmr.umm_spec.models.common.CharacteristicType{:Name "~?/.ub", :Description "P[", :Value "Y", :Unit "5bPe2", :DataType "LXCQUtougRJGxAoJv7Hdv0F1VyxPCFN5dgGKeaagxiwtJgbVHAjL3heLGAtjHZrvRsf2HtWl41GhVN"}], :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "jr2pVzFV~~", :LongName nil, :Characteristics nil, :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "@", :LongName "^c6g\\~", :Characteristics nil, :Technique "Zw^%>Mj"} #cmr.umm_spec.models.common.SensorType{:ShortName "ijP", :LongName "8", :Characteristics nil, :Technique nil}], :OperationalModes nil} #cmr.umm_spec.models.common.InstrumentType{:ShortName "&0k+R", :LongName "kWS9dkL", :Characteristics nil, :Technique nil, :NumberOfSensors 19, :Sensors nil, :OperationalModes nil}]} #cmr.umm_spec.models.common.PlatformType{:Type "c", :ShortName "0,!lg.AztM)8vd[^fZ5c)#3iFncMHvXJ[U9J@x0+DeMF\"PvO0NrY/.UZL/DCcB%!]3 CC--", :LongName "EetT(I!XP/zc' tS@'%5Uvw5Iw7u#TqBy1&=Aa53Mw+k.fZmz-e2,[2J9C*(t2qb(n!VmN/\" tF^pC.b]Jg@fWBqw0#SCi J%di9Ib]UygPlSP1FNE4Nl$3HY6yBcZ26/(6C[kxOsp80 @q&cG9*m\"lS^D)MkOJ-/xIu^Km*RwyEP@FS\"#6nr+=S!,aSl/-Wx4lx5!T4*BAmW!&.#QAhH&N5ICd9p*&o@PjH)\"P^3Vlo9cEN&vQ,r2C*!duC@L+oySh&ZwKQJ2 H.S4sGD.GhS1Nm,aaU+f)lFSef9q[q2.eNN(Fvy*jNaUxU Nv3 D\"^[/MU@3/TeA*xkNH2X0*A*AZa$KVWf)Kav8eotuTts#Ha1C2*fT23)fmMgm-/rH6ZDu(Txm/#MzakTMYvWdND\"(cpb(kQaqAL,#Q\"7#noERiVEs/ W49OY!0r7=$v0!7W6R+%WcGrdZDvkGj.8opQPS]jUuD5WjMEIN#'II2Dj&J/Jg87rLT09-xD'7og-^h#SNk]YVHKn)eB[%[6Wpyqswt7,5ffq\"4EwhfVkk=G^UZ8n5h8kdV(bi[.-4@B00Q%wG/wtLu.Df)FQF+1y2AXS#l$ fe9a *3Usjw(&qQQ1'..0KI/]Q]4g!xH9kYd.(f,ZrjNG#sS3y8]Ts@I*0t@p2ywt&3'0k!voWwA-C VU/(vT28iuv4XCC+7H!Ije1V7nN[QDr]X@dDUEo^52vVJZ6!47N!^ml#f[bIr8h58hiufLi[7ZW-sJPadvtPh96fA+JT0xoxzsJOHv\"'R RzwiEtcnyKNT#SO--Pm7o6qqkKSxApXJA2sLeo)w-OU(Pf9bC6(Aob53D(W09Q(7=]o]C1'uT(cLA]H&2=ZgaJ/isWN!Q7E7sqJuVZVwGQP^HZfG*p1bRBm1mv9n7TEm8171(c'-FXWE#$kj!)6SUPZ.aXf guTf=C6(0+iWKGi-bva&!&*Oq$HwEf7iQu&Q5Tct", :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "3", :Description "*@U}=6", :Value "32b&y[*\"", :Unit "cJPG", :DataType "pyscll2xSYwss4dC"} #cmr.umm_spec.models.common.CharacteristicType{:Name "~:-zG", :Description "*#@", :Value "tp4bPRiJ", :Unit "!<OL?e+a#", :DataType "U02jwOQb5LqXN69we7MD"} #cmr.umm_spec.models.common.CharacteristicType{:Name "Vy3!\"o", :Description "elhx", :Value "?kj)[Z9:|p", :Unit "X2", :DataType "yveugSIkiddNHfbspGvxXneGAj6EnD7epgc8luq95"} #cmr.umm_spec.models.common.CharacteristicType{:Name "p3ALfK(\\", :Description "sK^FE", :Value "ZBBl$D", :Unit "(|%<Yl@I", :DataType "WbFwuEl5WtuM3J2B0gUCRl89Z3njZLXhBJHMFnxDFKRdBbl9MI7GWyZFm5iyxGRuyqyq7H3286"}], :Instruments [#cmr.umm_spec.models.common.InstrumentType{:ShortName "e=$`cwq`u", :LongName nil, :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "H7e", :Description "@g1y``", :Value "u^>-|,P#?", :Unit "yRv", :DataType "maIiMzHbaXhKi6EC3F4OORjh1a3LxbklwA8sW12IpOEuw6F4x5ojWQuF55NtA0YnEe8L7f4aQhk"} #cmr.umm_spec.models.common.CharacteristicType{:Name "a;t;-", :Description "$x7?P", :Value "u[lHK^Q'", :Unit "@~c#oD+ZAS", :DataType "igciNt1glRUEG0LKUzjnV7kJj5glcjuBJS"} #cmr.umm_spec.models.common.CharacteristicType{:Name "X", :Description "q\\", :Value "%8.8\"0@", :Unit ">eQ$KN", :DataType "hjh86TzgHwdGZUkIyEjLRYdFpE1jOnHOf0frjOnljRmg5fnXHL4yXYIjJm"} #cmr.umm_spec.models.common.CharacteristicType{:Name "W8[`&", :Description ">U`Yl8)-=.", :Value "AF", :Unit "76e", :DataType "YM9IBTz9F2k1RDREj9FIH3dGUlfvmSPFlcWWJi6vHl0SZc1dyCl9rZ17B5mbC6"} #cmr.umm_spec.models.common.CharacteristicType{:Name "/", :Description "n", :Value "9eH?x=,U&Y", :Unit "o", :DataType "e3Rkh6hwrbhd7zHv5ohM1g2RrS2nm1X6SOaiALpHRgw"}], :Technique nil, :NumberOfSensors 44, :Sensors [#cmr.umm_spec.models.common.SensorType{:ShortName "3pps=", :LongName nil, :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "C", :Description "dda.{v", :Value "zP", :Unit "xe&bMJ", :DataType "O96L0y24nRenKaJsGQEy8"} #cmr.umm_spec.models.common.CharacteristicType{:Name "d}(A#", :Description "F", :Value "hK", :Unit "r\"XvX-!}W", :DataType "LTPYkQgdiNVp7MbAwqv61RIauSY1xVAiiSAZ4CbgnvAnGqg2JAWCRoRZtO5iHQBG7I04ssHST"}], :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "%=fyrw6C3", :LongName "y+}k", :Characteristics nil, :Technique "+"} #cmr.umm_spec.models.common.SensorType{:ShortName "E", :LongName nil, :Characteristics nil, :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "@L<g{O", :LongName nil, :Characteristics nil, :Technique nil} #cmr.umm_spec.models.common.SensorType{:ShortName "r$w)KBc?C", :LongName nil, :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "#uzgXc6KG5", :Description "_(Ra)|d9j", :Value "H{,XF", :Unit "6n2h", :DataType "oSUZ9DZIwUNleQR5ApZ0ODxmSy3tr42bBflRu5b3JGQj4Y5M0"} #cmr.umm_spec.models.common.CharacteristicType{:Name "!q(", :Description "z", :Value "I3>b))", :Unit "98RIt&", :DataType "X9Tr6zOT8VjjvySe7qIBKX73hplQOeWhI5TUdNqzMHbvlZ3qg6shJ"} #cmr.umm_spec.models.common.CharacteristicType{:Name "cNoXj\"", :Description "wpfc>\"j6KG", :Value "j", :Unit "t@z#", :DataType "882jLyTT4IO8cdh2Jd6Ls9SySm1raTfDa5MZVaoAntQQQZmfJuRs9BtifdA5j"}], :Technique nil}], :OperationalModes nil}]} #cmr.umm_spec.models.common.PlatformType{:Type "[(cV!_wU", :ShortName "&cm*FNLxIkRts$%fu%Wule gp5wy4C'!sITrp", :LongName nil, :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "}sE)CaeNx", :Description ";DSI]", :Value "N", :Unit ",@W,U+[Ae", :DataType "BMmtRnn8zfkubDg"} #cmr.umm_spec.models.common.CharacteristicType{:Name "r)H\\r", :Description "rJw`0BT", :Value "HP[&+z`>", :Unit "(_A]", :DataType "YyLXYZHH3dGtAQgKXqvc672qjxwsZf1KPbhw7Tax1GgefmRrp7sIBvwmQYkciiv6AgLonQ"}], :Instruments [#cmr.umm_spec.models.common.InstrumentType{:ShortName "ci", :LongName "c", :Characteristics nil, :Technique "-xs", :NumberOfSensors 25, :Sensors nil, :OperationalModes nil} #cmr.umm_spec.models.common.InstrumentType{:ShortName "O2(Lr\"#]", :LongName nil, :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "g]'zJ/I.H", :Description "'q}", :Value "I", :Unit "g[Do", :DataType "wA5shWpiXB2bGpJ4LjChlS4Oz2mQ004ncPY3VsHLZtv1cKjATUOi5G5A1qUcPvK1bEM"}], :Technique nil, :NumberOfSensors nil, :Sensors nil, :OperationalModes nil}]} #cmr.umm_spec.models.common.PlatformType{:Type nil, :ShortName "N^Zq+pgZ!z3x,0'/y^N64ySplXI88JnxBnkP=pC$!K3", :LongName nil, :Characteristics nil, :Instruments [#cmr.umm_spec.models.common.InstrumentType{:ShortName "w\\;", :LongName nil, :Characteristics nil, :Technique nil, :NumberOfSensors nil, :Sensors nil, :OperationalModes nil} #cmr.umm_spec.models.common.InstrumentType{:ShortName "iG8", :LongName "0_;cc2QN:b", :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "-E3", :Description "}s", :Value "e", :Unit "}", :DataType "4j08"} #cmr.umm_spec.models.common.CharacteristicType{:Name "f?j[C5", :Description "'F;)", :Value "x`=e'bdE7", :Unit "p=", :DataType "2GvMFXWdHX913UO4mtS1kTTtpiWpeNlVXVeXWp7l6JhGMXrYHu4NlapuLSXwYRDzoY2R8JpNXoS"} #cmr.umm_spec.models.common.CharacteristicType{:Name "1", :Description "N5m", :Value "x'+}", :Unit ":rZ)Q`Zl&", :DataType "eEogaN3rlBAj0p95fKiKlLyRTwoBmyGlfOzDBbCmrP20ce"} #cmr.umm_spec.models.common.CharacteristicType{:Name "Lr", :Description "wtU.e,9\"W", :Value "->S[p", :Unit "il^Lt", :DataType "dksiEhFZTVr5WnA5rM6xGjhqFOfx7W1XOAFgsFBIwgE3lF1VmvsONEnOjGBkD1CwICJI5cdriHdM7"} #cmr.umm_spec.models.common.CharacteristicType{:Name "EqtU", :Description "/mUPY I{", :Value "B84<=", :Unit "\\/iw>En", :DataType "eSkx3jeh0rTJu2ySyjpP3tBC9DOcJugi1wTpGvpTTivBK4W"}], :Technique "J2", :NumberOfSensors 35, :Sensors nil, :OperationalModes nil} #cmr.umm_spec.models.common.InstrumentType{:ShortName "Y<", :LongName "JFVamT3qv_", :Characteristics [#cmr.umm_spec.models.common.CharacteristicType{:Name "Z^", :Description "C:5z", :Value "PUeoq5( ", :Unit "`ue$h~d:/9", :DataType "FlrvkAJNfFaQGLiZJoWu5Z2wvfsZBSy9Xdx9Hu"} #cmr.umm_spec.models.common.CharacteristicType{:Name "9X{d", :Description "'^?TZ", :Value "<8&s`~H]^_", :Unit "rt3K", :DataType "yhnxjtVOukGKxpOlgHYDSjGYx68fDfOzZujSXIxh3PopFNOwh1jnkKJQUicsM8"} #cmr.umm_spec.models.common.CharacteristicType{:Name "p", :Description "%/@qFw+#*}", :Value "Xw_y8:'", :Unit "$#(z]|\"", :DataType "CFTBpi2ab86ALP5jlx5YNl8ZH4OGZi9"} #cmr.umm_spec.models.common.CharacteristicType{:Name "M-L", :Description "S#", :Value "40SOe", :Unit "j!>1y%q?'H", :DataType "5uFBD3Lokoj1K2F1Fv2f3ec2M4JW0zI79WrR29YtnrQiovaWPdlXdyullQW9j"}], :Technique "@`n,", :NumberOfSensors -38, :Sensors nil, :OperationalModes ["-~!"]}]}], :Projects nil, :Version nil, :PaleoTemporalCoverage nil, :TemporalExtents [#cmr.umm_spec.models.common.TemporalExtentType{:TemporalRangeType "=ONnI", :PrecisionOfSeconds 45, :EndsAtPresentFlag true, :RangeDateTimes [#cmr.umm_spec.models.common.RangeDateTimeType{:BeginningDateTime #=(cmr.common.joda-time/date-time 1207250604927 "UTC"), :EndingDateTime nil} #cmr.umm_spec.models.common.RangeDateTimeType{:BeginningDateTime #=(cmr.common.joda-time/date-time 2897592714441 "UTC"), :EndingDateTime nil} #cmr.umm_spec.models.common.RangeDateTimeType{:BeginningDateTime #=(cmr.common.joda-time/date-time 3171377527036 "UTC"), :EndingDateTime nil} #cmr.umm_spec.models.common.RangeDateTimeType{:BeginningDateTime #=(cmr.common.joda-time/date-time 1065792830172 "UTC"), :EndingDateTime nil} #cmr.umm_spec.models.common.RangeDateTimeType{:BeginningDateTime #=(cmr.common.joda-time/date-time 3926005415156 "UTC"), :EndingDateTime nil}], :SingleDateTimes nil, :PeriodicDateTimes nil} #cmr.umm_spec.models.common.TemporalExtentType{:TemporalRangeType "z7T_4:+", :PrecisionOfSeconds 15, :EndsAtPresentFlag nil, :RangeDateTimes nil, :SingleDateTimes [#=(cmr.common.joda-time/date-time 4268299118218 "UTC") #=(cmr.common.joda-time/date-time 360866244278 "UTC") #=(cmr.common.joda-time/date-time 453027532869 "UTC")], :PeriodicDateTimes nil} #cmr.umm_spec.models.common.TemporalExtentType{:TemporalRangeType "Bms", :PrecisionOfSeconds 15, :EndsAtPresentFlag nil, :RangeDateTimes nil, :SingleDateTimes [#=(cmr.common.joda-time/date-time 4082612919196 "UTC") #=(cmr.common.joda-time/date-time 1613556534665 "UTC") #=(cmr.common.joda-time/date-time 3448585075763 "UTC") #=(cmr.common.joda-time/date-time 3637119372924 "UTC") #=(cmr.common.joda-time/date-time 4492214294269 "UTC")], :PeriodicDateTimes nil}], :MetadataAssociations nil, :DataLanguage nil}
;         metadata-format :iso-smap]
;     (is (= (expected-conversion/convert failing-value metadata-format)
;            (xml-round-trip failing-value metadata-format)))))


(comment

  (println (core/generate-metadata :collection :iso-smap user/failing-value))

  (is (= (expected-conversion/convert user/failing-value :iso-smap)
         (xml-round-trip user/failing-value :iso-smap)))

  ;; random XML gen
  (def metadata-format :dif)
  (def metadata-format :iso19115)
  (def metadata-format :echo10)
  (def metadata-format :dif)
{'fraction_non_alphanumeric': 0.17238753053024136, 'fraction_numerical': 0.05139585576594795, 'mean_word_length': 6.9511380246398, 'pattern_counts': {'":': 2, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 47}, 'pii_count': 0, 'substrings_counts': 4, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2650374', 'n_tokens_mistral': 17215, 'n_tokens_neox': 16028, 'n_words': 2286}