<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0" xml:lang="en">
  <teiHeader>
    <fileDesc>
      <titleStmt>
        <title>xarray: N-D labeled Arrays and Datasets in Python</title>
        <author>Stephan Hoyer</author>
        <author>Joe Hamman</author>
      </titleStmt>
      <publicationStmt>
        <p>Tag layer of the DHSS Meta-Tagging Project. The article text is reproduced from the
           staged copy named in sourceDesc and is not altered; the tags are held separately in
           standOff so that overlapping and nested spans are preserved.</p>
      </publicationStmt>
      <sourceDesc>
        <bibl>
          <title>xarray: N-D labeled Arrays and Datasets in Python</title>
          <date>2017</date>
          <publisher>Journal of Open Research Software</publisher>
          <idno type="DOI">10.5334/jors.148</idno>
          
          <idno type="record">hoyer2017-xarray-labeled-arrays-datasets-python</idno>
          <note type="staged-file">hoyer2017-xarray-labeled-arrays-datasets-python.txt, the project's staged copy</note>
          <note type="text-sha1">71fc769aac2ee47505983c27d71b7c6affc6dd1e</note>
          <note type="rights">cc-by</note>
        </bibl>
      </sourceDesc>
    </fileDesc>
    <profileDesc>
      <textClass><keywords><term>earth-science</term></keywords></textClass>
      <particDesc>
        <person xml:id="paper"><p>the paper's own words</p></person>
        <person xml:id="tagger"><p>the tag layer; a sentence written by the tagger about the
          paper, always anchored to a quotation but not itself a quotation</p></person>
      </particDesc>
    </profileDesc>
    <revisionDesc>
      <change when="2026-10-06"
              who="build_paper_edition.py">145 spans located by searching the stored text for the quote's exact words, allowing any whitespace between them</change>
    </revisionDesc>
  </teiHeader>
  <standOff>
    <spanGrp type="tags">
      <span xml:id="t0" from="#a1" to="#a2" type="object_of_study" ana="#object_of_study" resp="#paper">xarray&#x27;s data model, architecture, capabilities, quality controls, availability, and reuse potential</span>
      <span xml:id="t1" from="#a9" to="#a10" type="research_question" ana="#research_question" resp="#paper">how to make labeled N-dimensional scientific arrays support metadata-aware analysis, interoperability, serialization, and out-of-core computation</span>
      <span xml:id="t2" from="#a1" to="#a2" type="contribution" ana="#contribution" resp="#paper">the xarray Python package, combining a pandas-inspired API with the self-describing Common Data Model for arbitrary-rank labeled arrays</span>
      <span xml:id="t3" from="#a1" to="#a2" type="claim_type" ana="#claim_type" resp="#paper">method</span>
      <span xml:id="t4" from="#a7" to="#a8" type="phenomenon" ana="#phenomenon" resp="#paper">metadata-aware manipulation of labeled multidimensional scientific data</span>
      <span xml:id="t5" from="#a17" to="#a18" type="method" ana="#method" resp="#paper">system-or-tool-building<term>system-or-tool-building</term></span>
      <span xml:id="t6" from="#a11" to="#a12" type="mechanisms" ana="#mechanisms[0]" resp="#tagger" cert="0.95">Every operation consumes and preserves labels so data and metadata stay aligned.<term>label consistency</term></span>
      <span xml:id="t7" from="#a29" to="#a30" type="mechanisms" ana="#mechanisms[1]" resp="#tagger" cert="0.95">Dimension names replace positional axes for indexing and aggregation.<term>named dimensions</term></span>
      <span xml:id="t8" from="#a21" to="#a22" type="mechanisms" ana="#mechanisms[2]" resp="#tagger" cert="0.95">Ancillary coordinate variables build on pandas Index for fast lookup and alignment.<term>coordinate indexing</term></span>
      <span xml:id="t9" from="#a31" to="#a32" type="mechanisms" ana="#mechanisms[3]" resp="#tagger" cert="0.95">Arithmetic loops over distinct named dimensions without dummy size-one axes.<term>dimension-name broadcasting</term></span>
      <span xml:id="t10" from="#a33" to="#a34" type="mechanisms" ana="#mechanisms[4]" resp="#tagger" cert="0.95">Database-like joins combine xarray objects along coordinates shared between them.<term>coordinate alignment</term></span>
      <span xml:id="t11" from="#a41" to="#a42" type="mechanisms" ana="#mechanisms[5]" resp="#tagger" cert="0.95">Multiple serialization formats are exposed by integrating their libraries.<term>third-party I/O integration</term></span>
      <span xml:id="t12" from="#a43" to="#a44" type="mechanisms" ana="#mechanisms[6]" resp="#tagger" cert="0.95">Dask-backed structures execute parallel and streaming computations outside memory.<term>dask backing</term></span>
      <span xml:id="t13" from="#a45" to="#a46" type="mechanisms" ana="#mechanisms[7]" resp="#tagger" cert="0.95">The unit suite is run automatically on Linux and Windows services.<term>continuous integration</term></span>
      <span xml:id="t14" from="#a49" to="#a50" type="mechanisms" ana="#mechanisms[8]" resp="#tagger" cert="0.95">Composition, subclassing, and accessor interfaces add domain methods without putting them in the core.<term>composition and accessors</term></span>
      <span xml:id="t15" from="#a3" to="#a4" type="limitations" ana="#limitations[0]" resp="#tagger" cert="0.95">Pandas Panel has a fixed three-dimensional rank and lacks features available to DataFrame and Series.</span>
      <span xml:id="t16" from="#a9" to="#a10" type="limitations" ana="#limitations[1]" resp="#tagger" cert="0.95">Unlabeled arrays do not meaningfully represent associated metadata, leaving alignment to users or domain packages.</span>
      <span xml:id="t17" from="#a21" to="#a22" type="limitations" ana="#limitations[2]" resp="#tagger" cert="0.95">Names and attributes are not interpreted by xarray and are propagated only in unambiguous cases.</span>
      <span xml:id="t18" from="#a25" to="#a26" type="limitations" ana="#limitations[3]" resp="#tagger" cert="0.95">DataArrays in a Dataset are presumed to share a common coordinate system.</span>
      <span xml:id="t19" from="#a41" to="#a42" type="limitations" ana="#limitations[4]" resp="#tagger" cert="0.95">OPeNDAP and GRIB serialization backends are read-only.</span>
      <span xml:id="t20" from="#a47" to="#a48" type="limitations" ana="#limitations[5]" resp="#tagger" cert="0.95">The pure-Python implementation relies on compiled dependencies for speed.</span>
      <span xml:id="t21" from="#a49" to="#a50" type="limitations" ana="#limitations[6]" resp="#tagger" cert="0.95">Domain-specific functionality is intentionally left to third-party libraries.</span>
      <span xml:id="t22" from="#a51" to="#a52" type="limitations" ana="#limitations[7]" resp="#tagger" cert="0.95">Development and support depend on a volunteer team.</span>
      <span xml:id="t23" from="#a45" to="#a46" type="controls" ana="#controls[0]" resp="#tagger" cert="0.95">over 1,500 unit tests<note>eliminates: regressions in core and optional-dependency functionality · outcome: held</note></span>
      <span xml:id="t24" from="#a45" to="#a46" type="controls" ana="#controls[1]" resp="#tagger" cert="0.95">TravisCI and Appveyor<note>eliminates: platform-specific failures missed by a single operating system · outcome: held</note></span>
      <span xml:id="t25" from="#a45" to="#a46" type="controls" ana="#controls[2]" resp="#tagger" cert="0.95">sample data distributed with the source code<note>eliminates: examples that users cannot reproduce · outcome: held</note></span>
      <span xml:id="t26" from="#a1" to="#a2" type="concepts" ana="#concepts[0]" resp="#paper" cert="0.95">xarray<term>xarray</term></span>
      <span xml:id="t27" from="#a1" to="#a2" type="concepts" ana="#concepts[1]" resp="#paper" cert="0.95">Python package<term>Python package</term></span>
      <span xml:id="t28" from="#a1" to="#a2" type="concepts" ana="#concepts[2]" resp="#paper" cert="0.95">N-dimensional labeled arrays<term>N-dimensional labeled arrays</term></span>
      <span xml:id="t29" from="#a1" to="#a2" type="concepts" ana="#concepts[3]" resp="#paper" cert="0.95">Common Data Model<term>Common Data Model</term></span>
      <span xml:id="t30" from="#a3" to="#a4" type="concepts" ana="#concepts[4]" resp="#paper" cert="0.95">pandas<term>pandas</term></span>
      <span xml:id="t31" from="#a3" to="#a4" type="concepts" ana="#concepts[5]" resp="#paper" cert="0.95">Panel<term>Panel</term></span>
      <span xml:id="t32" from="#a7" to="#a8" type="concepts" ana="#concepts[6]" resp="#paper" cert="0.95">Scientific data<term>Scientific data</term></span>
      <span xml:id="t33" from="#a9" to="#a10" type="concepts" ana="#concepts[7]" resp="#paper" cert="0.95">Unlabeled, N-dimensional arrays<term>Unlabeled, N-dimensional arrays</term></span>
      <span xml:id="t34" from="#a9" to="#a10" type="concepts" ana="#concepts[8]" resp="#paper" cert="0.95">metadata<term>metadata</term></span>
      <span xml:id="t35" from="#a13" to="#a14" type="concepts" ana="#concepts[9]" resp="#paper" cert="0.95">network Common Data Form<term>network Common Data Form</term></span>
      <span xml:id="t36" from="#a13" to="#a14" type="concepts" ana="#concepts[10]" resp="#paper" cert="0.95">collection of self-describing, machine-independent binary data formats and software tools<term>collection of self-describing, machine-independent binary data formats and software tools</term></span>
      <span xml:id="t37" from="#a15" to="#a16" type="concepts" ana="#concepts[11]" resp="#paper" cert="0.95">dimensions, variables, and attributes<term>dimensions, variables, and attributes</term></span>
      <span xml:id="t38" from="#a15" to="#a16" type="concepts" ana="#concepts[12]" resp="#paper" cert="0.95">netCDF dataset<term>netCDF dataset</term></span>
      <span xml:id="t39" from="#a19" to="#a20" type="concepts" ana="#concepts[13]" resp="#paper" cert="0.95">DataArray<term>DataArray</term></span>
      <span xml:id="t40" from="#a23" to="#a24" type="concepts" ana="#concepts[14]" resp="#paper" cert="0.95">Dataset<term>Dataset</term></span>
      <span xml:id="t41" from="#a23" to="#a24" type="concepts" ana="#concepts[15]" resp="#paper" cert="0.95">DataFrame<term>DataFrame</term></span>
      <span xml:id="t42" from="#a23" to="#a24" type="concepts" ana="#concepts[16]" resp="#paper" cert="0.95">dict-like container<term>dict-like container</term></span>
      <span xml:id="t43" from="#a21" to="#a22" type="concepts" ana="#concepts[17]" resp="#paper" cert="0.95">Dimensions<term>Dimensions</term></span>
      <span xml:id="t44" from="#a21" to="#a22" type="concepts" ana="#concepts[18]" resp="#paper" cert="0.95">ancillary variables<term>ancillary variables</term></span>
      <span xml:id="t45" from="#a21" to="#a22" type="concepts" ana="#concepts[19]" resp="#paper" cert="0.95">Names and attributes<term>Names and attributes</term></span>
      <span xml:id="t46" from="#a21" to="#a22" type="concepts" ana="#concepts[20]" resp="#paper" cert="0.95">coordinates<term>coordinates</term></span>
      <span xml:id="t47" from="#a25" to="#a26" type="concepts" ana="#concepts[21]" resp="#paper" cert="0.95">varying/dependent quantities<term>varying/dependent quantities</term></span>
      <span xml:id="t48" from="#a29" to="#a30" type="concepts" ana="#concepts[22]" resp="#paper" cert="0.95">named dimensions<term>named dimensions</term></span>
      <span xml:id="t49" from="#a29" to="#a30" type="concepts" ana="#concepts[23]" resp="#paper" cert="0.95">positional ordering of dimensions<term>positional ordering of dimensions</term></span>
      <span xml:id="t50" from="#a31" to="#a32" type="concepts" ana="#concepts[24]" resp="#paper" cert="0.95">dimension names<term>dimension names</term></span>
      <span xml:id="t51" from="#a31" to="#a32" type="concepts" ana="#concepts[25]" resp="#paper" cert="0.95">dummy dimensions of size one<term>dummy dimensions of size one</term></span>
      <span xml:id="t52" from="#a33" to="#a34" type="concepts" ana="#concepts[26]" resp="#paper" cert="0.95">Alignment<term>Alignment</term></span>
      <span xml:id="t53" from="#a33" to="#a34" type="concepts" ana="#concepts[27]" resp="#paper" cert="0.95">common coordinates<term>common coordinates</term></span>
      <span xml:id="t54" from="#a35" to="#a36" type="concepts" ana="#concepts[28]" resp="#paper" cert="0.95">Split-apply-combine<term>Split-apply-combine</term></span>
      <span xml:id="t55" from="#a37" to="#a38" type="concepts" ana="#concepts[29]" resp="#paper" cert="0.95">xarray plotting functionality<term>xarray plotting functionality</term></span>
      <span xml:id="t56" from="#a37" to="#a38" type="concepts" ana="#concepts[30]" resp="#paper" cert="0.95">thin wrapper<term>thin wrapper</term></span>
      <span xml:id="t57" from="#a39" to="#a40" type="concepts" ana="#concepts[31]" resp="#paper" cert="0.95">Missing Data<term>Missing Data</term></span>
      <span xml:id="t58" from="#a41" to="#a42" type="concepts" ana="#concepts[32]" resp="#paper" cert="0.95">serialization and I/O<term>serialization and I/O</term></span>
      <span xml:id="t59" from="#a41" to="#a42" type="concepts" ana="#concepts[33]" resp="#paper" cert="0.95">third-party libraries<term>third-party libraries</term></span>
      <span xml:id="t60" from="#a43" to="#a44" type="concepts" ana="#concepts[34]" resp="#paper" cert="0.95">Out-of-core computation<term>Out-of-core computation</term></span>
      <span xml:id="t61" from="#a43" to="#a44" type="concepts" ana="#concepts[35]" resp="#paper" cert="0.95">dask<term>dask</term></span>
      <span xml:id="t62" from="#a43" to="#a44" type="concepts" ana="#concepts[36]" resp="#paper" cert="0.95">parallel and streaming computation<term>parallel and streaming computation</term></span>
      <span xml:id="t63" from="#a45" to="#a46" type="concepts" ana="#concepts[37]" resp="#paper" cert="0.95">large test suite<term>large test suite</term></span>
      <span xml:id="t64" from="#a45" to="#a46" type="concepts" ana="#concepts[38]" resp="#paper" cert="0.95">TravisCI<term>TravisCI</term></span>
      <span xml:id="t65" from="#a45" to="#a46" type="concepts" ana="#concepts[39]" resp="#paper" cert="0.95">Appveyor<term>Appveyor</term></span>
      <span xml:id="t66" from="#a45" to="#a46" type="concepts" ana="#concepts[40]" resp="#paper" cert="0.95">sample data<term>sample data</term></span>
      <span xml:id="t67" from="#a47" to="#a48" type="concepts" ana="#concepts[41]" resp="#paper" cert="0.95">compiled dependencies<term>compiled dependencies</term></span>
      <span xml:id="t68" from="#a49" to="#a50" type="concepts" ana="#concepts[42]" resp="#paper" cert="0.95">core scientific Python libraries<term>core scientific Python libraries</term></span>
      <span xml:id="t69" from="#a5" to="#a6" type="concepts" ana="#concepts[43]" resp="#paper" cert="0.95">domain-specific packages<term>domain-specific packages</term></span>
      <span xml:id="t70" from="#a11" to="#a12" type="concepts" ana="#concepts[44]" resp="#paper" cert="0.95">consistency of labels<term>consistency of labels</term></span>
      <span xml:id="t71" from="#a19" to="#a20" type="concepts" ana="#concepts[45]" resp="#paper" cert="0.95">labeled, multi-dimensional array<term>labeled, multi-dimensional array</term></span>
      <span xml:id="t72" from="#a21" to="#a22" type="concepts" ana="#concepts[46]" resp="#paper" cert="0.95">core metadata-aware operations<term>core metadata-aware operations</term></span>
      <span xml:id="t73" from="#a49" to="#a50" type="concepts" ana="#concepts[47]" resp="#paper" cert="0.95">domain-specific functionality<term>domain-specific functionality</term></span>
      <span xml:id="t74" from="#a49" to="#a50" type="concepts" ana="#concepts[48]" resp="#paper" cert="0.95">composition<term>composition</term></span>
      <span xml:id="t75" from="#a49" to="#a50" type="concepts" ana="#concepts[49]" resp="#paper" cert="0.95">high-level accessor interface<term>high-level accessor interface</term></span>
      <span xml:id="t76" from="#a51" to="#a52" type="concepts" ana="#concepts[50]" resp="#paper" cert="0.95">team of volunteers<term>team of volunteers</term></span>
      <span xml:id="t77" from="#a5" to="#a6" type="unhoused_relations" ana="#unhoused_relations[0]" resp="#tagger" cert="0.95">xarray → core scientific Python packages<note>xarray builds on and interoperates with core scientific Python packages.</note></span>
      <span xml:id="t78" from="#a5" to="#a6" type="unhoused_relations" ana="#unhoused_relations[1]" resp="#tagger" cert="0.95">xarray → domain-specific packages<note>xarray interfaces with domain-specific packages.</note></span>
      <span xml:id="t79" from="#a11" to="#a12" type="unhoused_relations" ana="#unhoused_relations[2]" resp="#tagger" cert="0.95">xarray → consistency of labels<note>Every xarray operation relies on and maintains label consistency.</note></span>
      <span xml:id="t80" from="#a19" to="#a20" type="unhoused_relations" ana="#unhoused_relations[3]" resp="#tagger" cert="0.95">DataArray → labeled, multi-dimensional array<note>DataArray implements a labeled multidimensional array.</note></span>
      <span xml:id="t81" from="#a21" to="#a22" type="unhoused_relations" ana="#unhoused_relations[4]" resp="#tagger" cert="0.95">Dimensions → core metadata-aware operations<note>Dimensions enable xarray&#x27;s metadata-aware operations.</note></span>
      <span xml:id="t82" from="#a31" to="#a32" type="unhoused_relations" ana="#unhoused_relations[5]" resp="#tagger" cert="0.95">dimension names → dummy dimensions of size one<note>Dimension-name broadcasting eliminates the need for dummy size-one dimensions.</note></span>
      <span xml:id="t83" from="#a43" to="#a44" type="unhoused_relations" ana="#unhoused_relations[6]" resp="#tagger" cert="0.95">dask → parallel and streaming computation<note>Dask backing supports parallel and streaming computation beyond memory.</note></span>
      <span xml:id="t84" from="#a41" to="#a42" type="unhoused_relations" ana="#unhoused_relations[7]" resp="#tagger" cert="0.95">serialization and I/O → third-party libraries<note>xarray serialization and I/O integrate third-party libraries.</note></span>
      <span xml:id="t85" from="#a45" to="#a46" type="unhoused_relations" ana="#unhoused_relations[8]" resp="#tagger" cert="0.95">large test suite → TravisCI<note>The unit-test suite is executed automatically on TravisCI.</note></span>
      <span xml:id="t86" from="#a47" to="#a48" type="unhoused_relations" ana="#unhoused_relations[9]" resp="#tagger" cert="0.95">xarray → compiled dependencies<note>The pure-Python xarray implementation relies on compiled dependencies for speed.</note></span>
      <span xml:id="t87" from="#a49" to="#a50" type="unhoused_relations" ana="#unhoused_relations[10]" resp="#tagger" cert="0.95">high-level accessor interface → domain-specific functionality<note>The accessor interface lets users implement domain-specific methods on xarray objects.</note></span>
      <span xml:id="t88" from="#a1" to="#a2" type="senses" ana="#senses[0]" resp="#tagger" cert="0.95">xarray as a pandas-inspired, netCDF-grounded labeled-array toolkit</span>
      <span xml:id="t89" from="#a7" to="#a8" type="senses" ana="#senses[1]" resp="#tagger" cert="0.95">scientific labels as timestamps, coordinates, or experiment identifiers</span>
      <span xml:id="t90" from="#a17" to="#a18" type="senses" ana="#senses[2]" resp="#tagger" cert="0.95">netCDF as both a self-describing data model and portable serialization basis</span>
      <span xml:id="t91" from="#a19" to="#a20" type="senses" ana="#senses[3]" resp="#tagger" cert="0.95">DataArray as one labeled multidimensional array</span>
      <span xml:id="t92" from="#a23" to="#a24" type="senses" ana="#senses[4]" resp="#tagger" cert="0.95">Dataset as aligned DataArrays sharing a coordinate system</span>
      <span xml:id="t93" from="#a21" to="#a22" type="senses" ana="#senses[5]" resp="#tagger" cert="0.95">dimensions as named axes and coordinates as ancillary index variables</span>
      <span xml:id="t94" from="#a33" to="#a34" type="senses" ana="#senses[6]" resp="#tagger" cert="0.95">alignment as database-like joining on common coordinates</span>
      <span xml:id="t95" from="#a43" to="#a44" type="senses" ana="#senses[7]" resp="#tagger" cert="0.95">out-of-core as dask-backed parallel or streaming work beyond memory</span>
      <span xml:id="t96" from="#a45" to="#a46" type="senses" ana="#senses[8]" resp="#tagger" cert="0.95">quality control as cross-platform automated unit testing plus reproducible sample data</span>
      <span xml:id="t97" from="#a49" to="#a50" type="senses" ana="#senses[9]" resp="#tagger" cert="0.95">reuse as a domain-agnostic core extended through third-party composition and accessors</span>
      <span xml:id="t98" from="#a3" to="#a4" type="claim_relations" ana="#claim_relations[0]" resp="#tagger" cert="0.95">builds-on → pandas<note>note: The labeled-array structures and analytics are strongly inspired by pandas.</note></span>
      <span xml:id="t99" from="#a17" to="#a18" type="claim_relations" ana="#claim_relations[1]" resp="#tagger" cert="0.95">builds-on → netCDF<note>note: NetCDF explicitly forms the basis of the xarray model.</note></span>
      <span xml:id="t100" from="#a49" to="#a50" type="claim_relations" ana="#claim_relations[2]" resp="#tagger" cert="0.95">extends → core scientific Python libraries<note>note: The modular design builds upon and extends core libraries without embedding domains.</note></span>
      <span xml:id="t101" from="#a5" to="#a6" type="claim_relations" ana="#claim_relations[3]" resp="#tagger" cert="0.95">complements → domain-specific packages<note>note: xarray interfaces with domain-specific packages while retaining a domain-agnostic core.</note></span>
      <span xml:id="t102" from="#a1" to="#a2" type="concept_edges" ana="#concept_edges[0]" resp="#tagger" cert="0.95">xarray —is-a→ Python package<note>the relation itself is separately evidenced · strength of the relation: 1 · note: Flat categorical classification. · the relation stated: xarray is a Python package.</note><term>xarray</term><term>Python package</term></span>
      <span xml:id="t103" from="#a3" to="#a4" type="concept_edges" ana="#concept_edges[1]" resp="#tagger" cert="0.95">xarray —contrasted-with→ Panel<note>the relation itself is separately evidenced · strength of the relation: 0.95 · note: Direct while-contrast and stated suitability difference. · the relation stated: xarray&#x27;s arbitrary-rank labeled arrays contrast with pandas Panel&#x27;s fixed three-dimensional rank.</note><term>xarray</term><term>Panel</term></span>
      <span xml:id="t104" from="#a13" to="#a14" type="concept_edges" ana="#concept_edges[2]" resp="#tagger" cert="0.95">network Common Data Form —is-a→ collection of self-describing, machine-independent binary data formats and software tools<note>the relation itself is separately evidenced · strength of the relation: 1 · note: Explicit categorical definition. · the relation stated: The network Common Data Form is a collection of self-describing binary formats and software tools.</note><term>network Common Data Form</term><term>collection of self-describing, machine-independent binary data formats and software tools</term></span>
      <span xml:id="t105" from="#a15" to="#a16" type="concept_edges" ana="#concept_edges[3]" resp="#tagger" cert="0.95">dimensions, variables, and attributes —part-of→ netCDF dataset<note>the relation itself is separately evidenced · strength of the relation: 1 · note: Categorical containment stated by &#x27;contains&#x27;. · the relation stated: Dimensions, variables, and attributes are contained in each netCDF dataset.</note><term>dimensions, variables, and attributes</term><term>netCDF dataset</term></span>
      <span xml:id="t106" from="#a23" to="#a24" type="concept_edges" ana="#concept_edges[4]" resp="#tagger" cert="0.95">Dataset —same-as→ DataFrame<note>the relation itself is separately evidenced · strength of the relation: 0.9 · note: Scoped multidimensional equivalence, so below full identity strength. · the relation stated: Dataset is xarray&#x27;s multidimensional equivalent of a DataFrame.
Audit 2026-09-28: DOUBTFUL - read against its span and kept, but the Dataset is the multi-dimensional EQUIVALENT of a DataFrame; same-as overstates.</note><term>Dataset</term><term>DataFrame</term></span>
      <span xml:id="t107" from="#a23" to="#a24" type="concept_edges" ana="#concept_edges[5]" resp="#tagger" cert="0.95">Dataset —is-a→ dict-like container<note>the relation itself is separately evidenced · strength of the relation: 1 · note: Explicit categorical classification. · the relation stated: Dataset is a dict-like container of aligned DataArrays.</note><term>Dataset</term><term>dict-like container</term></span>
      <span xml:id="t108" from="#a21" to="#a22" type="concept_edges" ana="#concept_edges[6]" resp="#tagger" cert="0.95">Names and attributes —contrasted-with→ coordinates<note>the relation itself is separately evidenced · strength of the relation: 0.95 · about this quote: DOUBTFUL, found by an audit that read the edge against its span: weak contrast. The edge is kept live; a reader should weigh it with this in mind. · note: Explicit in-contrast comparison. · the relation stated: Names and attributes are not interpreted generally, in contrast to coordinates persisted through transformations.</note><term>Names and attributes</term><term>coordinates</term></span>
      <span xml:id="t109" from="#a25" to="#a26" type="concept_edges" ana="#concept_edges[7]" resp="#tagger" cert="0.95">coordinates —distinct-from→ varying/dependent quantities<note>the relation itself is separately evidenced · strength of the relation: 0.95 · note: Explicit unlike distinction. · the relation stated: Coordinates denote constant or independent quantities, unlike varying or dependent data quantities.</note><term>coordinates</term><term>varying/dependent quantities</term></span>
      <span xml:id="t110" from="#a29" to="#a30" type="concept_edges" ana="#concept_edges[8]" resp="#tagger" cert="0.95">named dimensions —contrasted-with→ positional ordering of dimensions<note>the relation itself is separately evidenced · strength of the relation: 0.95 · note: Direct instead-of contrast. · the relation stated: Named dimensions are used instead of relying on positional dimension ordering.</note><term>named dimensions</term><term>positional ordering of dimensions</term></span>
      <span xml:id="t111" from="#a37" to="#a38" type="concept_edges" ana="#concept_edges[9]" resp="#tagger" cert="0.95">xarray plotting functionality —is-a→ thin wrapper<note>the relation itself is separately evidenced · strength of the relation: 1 · note: Explicit categorical classification. · the relation stated: xarray plotting functionality is a thin wrapper around Matplotlib.</note><term>xarray plotting functionality</term><term>thin wrapper</term></span>
      <span xml:id="t112" from="#a1" to="#a2" type="content_tags" ana="#content_tags.findings[0]" resp="#tagger" cert="0.95">xarray combines a pandas-inspired API with a self-describing scientific-data model.</span>
      <span xml:id="t113" from="#a3" to="#a4" type="content_tags" ana="#content_tags.findings[1]" resp="#tagger" cert="0.95">Pandas Panel&#x27;s fixed rank is unsuitable for arbitrary-rank array applications.</span>
      <span xml:id="t114" from="#a11" to="#a12" type="content_tags" ana="#content_tags.findings[2]" resp="#tagger" cert="0.95">Every xarray operation relies on and maintains label consistency.</span>
      <span xml:id="t115" from="#a17" to="#a18" type="content_tags" ana="#content_tags.findings[3]" resp="#tagger" cert="0.95">NetCDF supplies xarray&#x27;s data-model basis and portable serialization format.</span>
      <span xml:id="t116" from="#a19" to="#a20" type="content_tags" ana="#content_tags.findings[4]" resp="#tagger" cert="0.95">DataArray represents a labeled multidimensional array.</span>
      <span xml:id="t117" from="#a23" to="#a24" type="content_tags" ana="#content_tags.findings[5]" resp="#tagger" cert="0.95">Dataset is a dictionary-like container of aligned DataArrays and an in-memory netCDF representation.</span>
      <span xml:id="t118" from="#a29" to="#a30" type="content_tags" ana="#content_tags.findings[6]" resp="#tagger" cert="0.95">Named dimensions replace positional axis arguments for xarray indexing.</span>
      <span xml:id="t119" from="#a31" to="#a32" type="content_tags" ana="#content_tags.findings[7]" resp="#tagger" cert="0.95">Dimension-name broadcasting removes the need to insert dummy size-one dimensions.</span>
      <span xml:id="t120" from="#a43" to="#a44" type="content_tags" ana="#content_tags.findings[8]" resp="#tagger" cert="0.95">Dask backing supports parallel and streaming computation on data too large for memory.</span>
      <span xml:id="t121" from="#a45" to="#a46" type="content_tags" ana="#content_tags.findings[9]" resp="#tagger" cert="0.95">The test suite contains more than 1,500 unit tests run on Linux and Windows continuous integration.</span>
      <span xml:id="t122" from="#a49" to="#a50" type="content_tags" ana="#content_tags.findings[10]" resp="#tagger" cert="0.95">The core data structures are extensible through composition, subclassing, and high-level accessors.</span>
      <span xml:id="t123" from="#a1" to="#a2" type="content_tags" ana="#content_tags.definitions[0]" resp="#tagger" cert="0.95">an open-source Python project providing labeled N-dimensional array structures and analytics<term>xarray</term></span>
      <span xml:id="t124" from="#a13" to="#a14" type="content_tags" ana="#content_tags.definitions[1]" resp="#tagger" cert="0.95">self-describing, machine-independent formats and tools for array scientific data<term>network Common Data Form</term></span>
      <span xml:id="t125" from="#a15" to="#a16" type="content_tags" ana="#content_tags.definitions[2]" resp="#tagger" cert="0.95">the principal netCDF structure containing named dimensions, variables, and attributes<term>dataset</term></span>
      <span xml:id="t126" from="#a19" to="#a20" type="content_tags" ana="#content_tags.definitions[3]" resp="#tagger" cert="0.95">xarray&#x27;s labeled multidimensional array implementation<term>DataArray</term></span>
      <span xml:id="t127" from="#a23" to="#a24" type="content_tags" ana="#content_tags.definitions[4]" resp="#tagger" cert="0.95">a dictionary-like container of aligned DataArrays and in-memory netCDF representation<term>Dataset</term></span>
      <span xml:id="t128" from="#a21" to="#a22" type="content_tags" ana="#content_tags.definitions[5]" resp="#tagger" cert="0.95">names used in place of positional axis arguments<term>Dimensions</term></span>
      <span xml:id="t129" from="#a21" to="#a22" type="content_tags" ana="#content_tags.definitions[6]" resp="#tagger" cert="0.95">ancillary variables used for label-based indexing and alignment<term>Coordinates</term></span>
      <span xml:id="t130" from="#a33" to="#a34" type="content_tags" ana="#content_tags.definitions[7]" resp="#tagger" cert="0.95">database-like joins along common coordinates<term>Alignment</term></span>
      <span xml:id="t131" from="#a35" to="#a36" type="content_tags" ana="#content_tags.definitions[8]" resp="#tagger" cert="0.95">N-dimensional grouped operations following the split-apply-combine strategy<term>Split-apply-combine</term></span>
      <span xml:id="t132" from="#a43" to="#a44" type="content_tags" ana="#content_tags.definitions[9]" resp="#tagger" cert="0.95">parallel or streaming work on data that does not fit into memory<term>Out-of-core computation</term></span>
      <span xml:id="t133" from="#a43" to="#a44" type="content_tags" ana="#content_tags.quantities[0]" resp="#tagger" cert="0.95">100s of GB or TBs — scale of out-of-memory datasets supported through dask</span>
      <span xml:id="t134" from="#a45" to="#a46" type="content_tags" ana="#content_tags.quantities[1]" resp="#tagger" cert="0.95">over 1,500 unit tests — size of the xarray test suite</span>
      <span xml:id="t135" from="#a17" to="#a18" type="content_tags" ana="#content_tags.quantities[2]" resp="#tagger" cert="0.95">two main data structures — DataArray and Dataset in the xarray model</span>
      <span xml:id="t136" from="#a25" to="#a26" type="content_tags" ana="#content_tags.quantities[3]" resp="#tagger" cert="0.95">any number of dimensions — rank permitted for DataArrays and coordinates</span>
      <span xml:id="t137" from="#a7" to="#a8" type="content_tags" ana="#content_tags.variables[0]" resp="#tagger" cert="0.95">timestamps<term>timestamps</term></span>
      <span xml:id="t138" from="#a7" to="#a8" type="content_tags" ana="#content_tags.variables[1]" resp="#tagger" cert="0.95">coordinates<term>coordinates</term></span>
      <span xml:id="t139" from="#a21" to="#a22" type="content_tags" ana="#content_tags.variables[2]" resp="#tagger" cert="0.95">dimension names<term>dimension names</term></span>
      <span xml:id="t140" from="#a21" to="#a22" type="content_tags" ana="#content_tags.variables[3]" resp="#tagger" cert="0.95">attrs<term>attrs</term></span>
      <span xml:id="t141" from="#a25" to="#a26" type="content_tags" ana="#content_tags.variables[4]" resp="#tagger" cert="0.95">data variables<term>data variables</term></span>
      <span xml:id="t142" from="#a27" to="#a28" type="content_tags" ana="#content_tags.variables[5]" resp="#tagger" cert="0.95">time, y, and x<term>time, y, and x</term></span>
      <span xml:id="t143" from="#a27" to="#a28" type="content_tags" ana="#content_tags.variables[6]" resp="#tagger" cert="0.95">Temperature and precipitation<term>Temperature and precipitation</term></span>
      <span xml:id="t144" from="#a27" to="#a28" type="content_tags" ana="#content_tags.variables[7]" resp="#tagger" cert="0.95">latitude and longitude<term>latitude and longitude</term></span>
    </spanGrp>
  </standOff>
  <text>
    <body>
        <p><anchor xml:id="a0"/> xarray: N-D labeled Arrays and Datasets in Python</p>
        <p>Abstract</p>
        <p><anchor xml:id="a1"/>xarray is an open source project and Python package that provides a toolkit and data structures for N-dimensional labeled arrays. Our approach combines an application programing interface (API) inspired by pandas with the Common Data Model for self-described scientific data. Key features of the xarray package include label-based indexing and arithmetic, interoperability with the core scientific Python packages (e.g., pandas, NumPy, Matplotlib), out-of-core computation on datasets that don’t fit into memory, a wide range of serialization and input/output (I/O) options, and advanced multi-dimensional data manipulation tools such as group-by and resampling. xarray, as a data model and analytics toolkit, has been widely adopted in the geoscience community but is also used more broadly for multi-dimensional data analysis in physics, machine learning and finance.<anchor xml:id="a2"/></p>
        <p>Python</p>
        <p>pandas</p>
        <p>netCDF</p>
        <p>multidimensional</p>
        <p>data</p>
        <p>data handling</p>
        <p>data analysis</p>
        <p>Metrics</p>
        <p>(1) Overview</p>
        <p>Introduction</p>
        <p>Python has emerged as a leading programing language for both the physical sciences and data sciences. At the core of modern scientific computing and analysis in Python are the NumPy [14] and SciPy [22] packages, which provide a robust N-dimensional array object and the fundamental operations required for science and engineering applications. Much of the success of Python in data science and business analytics is due to pandas [16], which introduced intuitive and fast tabular data analysis tools to Python, inspired by R’s data.frame [19]. The pandas DataFrame and Series objects provide unparalleled analysis tools for data alignment, resampling, grouping, pivoting, and aggregation in Python.</p>
        <p><anchor xml:id="a3"/>xarray implements data structures and an analytics toolkit for multi-dimensional labeled arrays strongly inspired by pandas. While pandas includes a data structure called the Panel for three dimensional data, its fixed rank design make it unsuitable for applications that require arbitrary rank arrays. Additionally, many of the features that make the pandas DataFrame and Series objects so useful, are not fully available on the Panel. Our approach with xarray adopts Unidata’s self-describing Common Data Model on which the network Common Data Form (netCDF) is built [20, 7]. NetCDF provides a well-defined data model for labeled N-dimensional array-oriented scientific data analysis.<anchor xml:id="a4"/></p>
        <p><anchor xml:id="a5"/>xarray builds on top of, and seamlessly interoperates with, the core scientific Python packages, such as NumPy, SciPy, Matplotlib [13], and pandas. xarray provides a range of backends for serialization and input/output (IO), including the Pickle, netCDF, OPeNDAP (read-only), GRIB1/2 (read-only), and HDF file formats. Leveraging the dask parallel computing library [21], xarray can optionally perform efficient parallel, out-of-core analysis on datasets that are too large to fit into memory. Finally, xarray interfaces with existing domain-specific packages such as UV-CDAT [25], Iris [17], and Cartopy [18].<anchor xml:id="a6"/></p>
        <p>Purpose: Your data has labels; you should use them</p>
        <p><anchor xml:id="a7"/>Scientific data is inherently labeled. For example, time series data includes timestamps that label individual periods or points in time, spatial data has coordinates (e.g. longitude, latitude, elevation), and model or laboratory experiments are often identified by unique identifiers. Figure 1 provides an example of a labeled dataset. In this case the data is a map of global air temperature from a numeric weather model. The labels on this particular dataset are time (e.g. “2016-05-01”), longitude (x-axis), and latitude (y-axis).<anchor xml:id="a8"/></p>
        <p>An example of a multidimensional labeled array. This figure (map) is showing the global surface air temperature for May 1, 2016 from ERA-Interim Reanalyis [11]. The map is labeled with the array&#x27;s coordinates: longitude and latitude.</p>
        <p><anchor xml:id="a9"/>Unlabeled, N-dimensional arrays of numbers (e.g., NumPy’s ndarray) are the most widely used data structure in scientific computing. However, they lack a meaningful representation of the metadata associated with their data. Implementing such functionality is left to individual users and domain-specific packages. As a result, programmers frequently encounter pitfalls in the form of questions like “is the time axis of my array in the first or third index position?” or “does my array of timestamps still align with my data after resampling?”.<anchor xml:id="a10"/></p>
        <p><anchor xml:id="a11"/>The core motivation for developing xarray was to provide labeled data tools for N-dimensional arrays that render such questions moot. Every operation in xarray both relies on and maintains the consistency of labels.<anchor xml:id="a12"/></p>
        <p>NetCDF</p>
        <p><anchor xml:id="a13"/>The network Common Data Form is a collection of self-describing, machine-independent binary data formats and software tools. These data formats and tools facilitate the creation, access, and sharing of scientific data stored in N-dimensional arrays, along with metadata describing the contents of each array [20]. NetCDF has become very popular in the geoscience community, and there are existing libraries for reading and writing netCDF in many programming languages, including C, Fortran, Python, Java, Matlab, and Julia.<anchor xml:id="a14"/></p>
        <p><anchor xml:id="a15"/>The principal data structure in the netCDF data model is the dataset. Each netCDF dataset contains dimensions, variables, and attributes, each of which are identified by a hierarchy of unique names. The dataset and variable objects may contain attributes that describe the contents, units, history, or other metadata of the object. Standardized conventions, such as the Climate and Forecast (CF) Conventions [12], allow for the associations of coordinate variables with dimensions.<anchor xml:id="a16"/></p>
        <p>Implementation and architecture</p>
        <p><anchor xml:id="a17"/>NetCDF forms the basis of the xarray data model and provides a natural and portable serialization format. Building on netCDF, xarray features two main data structures: the DataArray and the Dataset. The API for these data structures is summarized in the following sections and in Figure 2.<anchor xml:id="a18"/></p>
        <p>An overview of xarray’s main data structures. Types are annotated using Python 3 style type hints [23]. “Mapping of” denotes an ordered mapping with values of the given type.</p>
        <p>DataArray</p>
        <p><anchor xml:id="a19"/>The DataArray is xarray’s implementation of a labeled, multi-dimensional array. It has several key properties:<anchor xml:id="a20"/></p>
        <p>data: N-dimensional array (NumPy or dask) holding the array&#x27;s values,</p>
        <p>coords: dict-like container of arrays (coordinates) that label each point (e.g., 1-dimensional arrays of numbers, datetime objects or strings),</p>
        <p>dims: dimension names for each axis [e.g., (‘time’, ‘latitude’, ‘longitude’)],</p>
        <p>attrs: OrderedDict holding arbitrary metadata (e.g. units or descriptions), and</p>
        <p>name: an arbitrary name for the array.</p>
        <p><anchor xml:id="a21"/>xarray uses dims and coords to enable its core metadata-aware operations. Dimensions provide names that xarray uses instead of the axis argument found in many NumPy functions. Coordinates are ancillary variables used to enable fast label based indexing and alignment, building on the functionality of the pandas Index. DataArray objects also can have a name and can hold arbitrary metadata in the form of their attrs property, which can be used to further describe data (e.g. by providing units). Names and attributes are strictly for users and user-written code; in general xarray makes no attempt to interpret them, and propagates them only in unambiguous cases. In contrast, xarray does interpret and persist coordinates in operations that transform xarray objects.<anchor xml:id="a22"/></p>
        <p>Dataset</p>
        <p><anchor xml:id="a23"/>The Dataset is xarray’s multi-dimensional equivalent of a DataFrame. It is a dict-like container of labeled arrays (DataArrays) with aligned dimensions. It is designed as an in-memory representation of a netCDF dataset. In addition to the dict-like interface of the dataset itself, which can be used to access any DataArray in a Dataset, datasets have four key properties:<anchor xml:id="a24"/></p>
        <p>data_vars: OrderedDict of DataArray objects corresponding to data variables,</p>
        <p>coords: OrderedDict of DataArray objects intended to label points used in data_vars (e.g., 1-dimensional arrays of numbers, datetime objects or strings),</p>
        <p>dims: dictionary mapping from dimension names to the fixed length of each dimension (e.g., {‘x’: 6, ‘y’: 6, ‘time’: 8}), and</p>
        <p>attrs: OrderedDict to hold arbitrary metadata pertaining to the dataset.</p>
        <p><anchor xml:id="a25"/>DataArray objects inside a Dataset may have any number of dimensions but are presumed to share a common coordinate system. Coordinates can also have any number of dimensions but denote constant/independent quantities, unlike the varying/dependent quantities that belong in data. Figure 3 illustrates these concepts for an example Dataset containing meteorological data.<anchor xml:id="a26"/></p>
        <p><anchor xml:id="a27"/>An example of how a dataset (netCDF or xarray) for a weather forecast might be structured. This dataset has three dimensions, time, y, and x, each of which is also a one-dimensional coordinate. Temperature and precipitation are three-dimensional data variables. Also included in the dataset are two-dimensional coordinates latitude and longitude, having dimensions y and x, and reference time, a zero-dimensional (scalar) coordinate.<anchor xml:id="a28"/></p>
        <p>Core xarray Features</p>
        <p>xarray includes a powerful and growing feature set. The following list highlights some of the key features available in xarray. The xarray documentation [2] includes a complete description of available features and their usage.</p>
        <p><anchor xml:id="a29"/>Label-based indexing: Similarly to pandas objects, xarray objects support both integer- and label-based lookups along each dimension. However, xarray objects also have named dimensions, so you can optionally use dimension names instead of relying on the positional ordering of dimensions.<anchor xml:id="a30"/></p>
        <p><anchor xml:id="a31"/>Arithmetic: arithmetic between xarray objects vectorizes based on dimension names, automatically looping (broadcasting) over each distinct dimension. This eliminates the need to insert dummy dimensions of size one to facilitate broadcasting, a common pattern with NumPy.<anchor xml:id="a32"/></p>
        <p>Aggregation: calculation of statistics (e.g. sum) along a dimension of an xarray object can be done by dimension name instead of an integer axis number.</p>
        <p><anchor xml:id="a33"/>Alignment: xarray supports database-like join operations for combining xarray objects along common coordinates.<anchor xml:id="a34"/></p>
        <p><anchor xml:id="a35"/>Split-apply-combine: xarray includes N-dimensional grouped operations implementing the split-apply-combine strategy [24].<anchor xml:id="a36"/></p>
        <p>Resampling and rolling window operations: Utilizing the efficient resampling methods from pandas and rolling window operations from Bottleneck [15], xarray offers a robust set of resampling and rolling window operations along a single dimension.</p>
        <p><anchor xml:id="a37"/>Plotting: xarray plotting functionality is a thin wrapper around the popular Matplotlib library. xarray uses the syntax and function names from Matplotlib whenever possible, resulting in a seamless transition between the two.<anchor xml:id="a38"/></p>
        <p><anchor xml:id="a39"/>Missing Data: xarray smoothly handles missing data in all operations, including arithmetic, alignment and aggregation.<anchor xml:id="a40"/></p>
        <p>Interactivity with pandas: xarray objects seamlessly to convert to and from pandas objects to interact with the rest of the PyData ecosystem.</p>
        <p><anchor xml:id="a41"/>Serialization and I/O: xarray supports direct serialization and I/O to several file formats including pickle, netCDF, OPeNDAP (read-only), GRIB1/2 (read-only), and HDF by integrating with third-party libraries. Additional serialization formats for 1-dimensional data are available through pandas.<anchor xml:id="a42"/></p>
        <p><anchor xml:id="a43"/>Out-of-core computation: xarray’s data structures can be backed by dask [21] instead of NumPy to support parallel and streaming computation on data that does not fit into memory, up to 100s of GB or TBs in size. Such large datasets (“big data”) are increasingly prevalent in science.<anchor xml:id="a44"/></p>
        <p>Quality control</p>
        <p><anchor xml:id="a45"/>xarray is provided with a large test suite comprised of over 1,500 unit tests. These tests cover the core xarray functionality as well as features facilitated by optional dependencies. The unit tests are executed automatically on the TravisCI (Linux) [5] and Appveyor (Windows) [1] continuous integration systems. A selection of sample data is also distributed with the source code, allowing users to reproduce any examples in the xarray documentation.<anchor xml:id="a46"/></p>
        <p>(2) Availability</p>
        <p>Operating system</p>
        <p>Linux, Windows and Mac OS X.</p>
        <p>Programming language</p>
        <p>Python, versions 2.7, 3.4 and later.</p>
        <p>Additional system requirements</p>
        <p>None.</p>
        <p>Dependencies</p>
        <p><anchor xml:id="a47"/>xarray is implemented in pure Python and relies on compiled dependencies for speed.<anchor xml:id="a48"/></p>
        <p>NumPy: 1.7 or later</p>
        <p>pandas: 0.15.0 or later</p>
        <p>netcdf4-python: (optional) used for reading and writing netCDF files</p>
        <p>SciPy: (optional) used as a fallback for reading/writing netCDF3</p>
        <p>Pydap: (optional) used as a fallback for accessing OPeNDAP</p>
        <p>h5netcdf: (optional) an alternative library for reading and writing netCDF4 files that does not use the netCDF-C libraries</p>
        <p>PyNIO: (optional) for reading GRIB1/2 and other geoscience specific file formats</p>
        <p>Bottleneck: (optional) speeds up NaN-skipping and rolling window aggregations by a large factor</p>
        <p>cyordereddict: (optional) speeds up most internal operations with xarray data structures</p>
        <p>Dask: (optional) required for out-of-core parallel computation</p>
        <p>Matplotlib: (optional) required for plotting</p>
        <p>Cartopy: (optional) required for plotting maps</p>
        <p>seaborn: (optional) additional plotting functionality</p>
        <p>List of contributors</p>
        <p>Alex Kleeman, The Climate Corporation</p>
        <p>Alistair Miles, Wellcome Trust Centre for Human Genetics, University of Oxford</p>
        <p>Andreas Hilboll, Institute of Environmental Physics, University of Bremen</p>
        <p>Anna Kuznetsova, The Climate Corporation</p>
        <p>Antony Lee, Department of Physics, University of California, Berkeley</p>
        <p>Bas Hoonhout, Deltares, The Netherlands</p>
        <p>Benjamin Root, Atmospheric and Environmental Research, Inc.</p>
        <p>Benoit Bovy, Department of Astrophysics, Geophysics and Oceanography, University of Lige</p>
        <p>Chun-Wei Yuan, Institute for Health Metrics and Evaluation, University of Washington</p>
        <p>Christoph Deil, Max Planck Institute for Nuclear Physics</p>
        <p>Clark Fitzgerald, Department of Statistics, University of California, Davis</p>
        <p>Dean Pospisil, Institute for Learning and Brain Sciences, University of Washington</p>
        <p>Edward Richards, Scripps Institution of Oceanography, University of California, San Diego</p>
        <p>Erik Welch, Continuum Analytics</p>
        <p>Eugene Brevdo, Google Research</p>
        <p>Fabien Maussion, Institute of Atmospheric and Cryospheric Sciences, University of Innsbruck</p>
        <p>Filipe Fernandes, Universidade de So Paulo</p>
        <p>Guido Imperiale, Legal &amp; General</p>
        <p>Hauser Mathias, Institute for Atmospheric and Climate Science, ETH Zurich</p>
        <p>Igor Babuschkin, School of Physics and Astronomy, University of Manchester</p>
        <p>Jeffrey Gerard, The Climate Corporation</p>
        <p>Jeremy McGibbon, Department of Atmospheric Sciences, University of Washington</p>
        <p>Jonathan Chambers, UCL Energy Institute, London UK</p>
        <p>Julia Signell, Department of Civil and Environmental Engineering, Princeton University</p>
        <p>Joseph Hamman, National Center for Atmospheric Research</p>
        <p>Johnnie Gray, University College London</p>
        <p>Jonathan Helmus, Environmental Science Division, Argonne National Laboratory</p>
        <p>Kelsey Jordahl, Planet Labs</p>
        <p>Maciek Swat, University of Pennsylvania</p>
        <p>Marco Zhlke, Brockmann Consult GmbH</p>
        <p>Markel Garca-Dez, Catalan Institute of Climate Sciences</p>
        <p>Markus Gonser</p>
        <p>Maximilian Roos, Sixty Capital</p>
        <p>Mike Graham, Edgestream Partners</p>
        <p>Nikolay Koldunov, Climate Service Center Germany</p>
        <p>Peter Cable, Raytheon</p>
        <p>Phillip J. Wolfram, Fluid and Solid Mechanics (T-3), Theoretical Division, Los Alamos National Laboratory</p>
        <p>Rafael Guedes, MetOcean Solutions Ltd</p>
        <p>Robin Wilson, Geography &amp; Environment, University of Southampton, UK</p>
        <p>Ryan Abernathey, Department of Earth and Environmental Sciences, Columbia University</p>
        <p>Scott Sinclair, Satellite Applications and Hydrology Group, Dept. Civil Engineering, University of KwaZulu-Natal</p>
        <p>Sébastien Celles, Thermal Science and Energy Department, Poitiers Institute of Technology (IUT)</p>
        <p>Spencer A. Hill, Program in Atmospheric and Oceanic Sciences, Princeton University</p>
        <p>Stefan Pfenninger, Department of Environmental Systems Science, ETH Zrich</p>
        <p>Stephan Hoyer, Google Research</p>
        <p>Steven E. Pav, Gilgamath Consulting</p>
        <p>Takeshi Kanmae, National Institute of Polar Research, Japan</p>
        <p>Thomas Kluyver, Computational Modeling Group, University of Southampton</p>
        <p>Todd Small, The Climate Corporation</p>
        <p>Valliappa Lakshmanan, Google</p>
        <p>Yves Delley, Department of Physics, ETH Zurich</p>
        <p>Software location</p>
        <p>Archive</p>
        <p>Name: Zenodo</p>
        <p>Persistent identifier: https://doi.org/10.5281/zenodo.264282</p>
        <p>License: Apache, v2.0</p>
        <p>Publisher: Zenodo</p>
        <p>Version published: 0.9.1</p>
        <p>Date published: January 30, 2017</p>
        <p>Code repository</p>
        <p>Name: GitHub</p>
        <p>Identifier: http://github.com/pydata/xarray</p>
        <p>License: Apache, v2.0</p>
        <p>Date published: January 30, 2017</p>
        <p>Language</p>
        <p>English.</p>
        <p>(3) Reuse potential</p>
        <p><anchor xml:id="a49"/>xarray was written in a modular, objected-oriented way, to build upon and extend the core scientific Python libraries in a domain-agnostic fashion. The xarray documentation is complete with a wide range of examples and a number of tutorials that use real-world datasets that are available in the xarray repository. We have intentionally avoided including domain-specific functionality in the library, leaving that to third party libraries. It has been widely adopted in the geoscience community [e.g. 6, 10, 9], but has also been used in physics [e.g. 3], time series analytics [8], and finance. The core xarray data structures (the DataArray and the Dataset) are extensible through subclassing or the preferred approach of composition. We also provide an extensible high-level accessor interface to allow users to implement domain specific methods on xarray data objects.<anchor xml:id="a50"/></p>
        <p><anchor xml:id="a51"/>xarray is developed and supported by a team of volunteers. The primary avenue for user support is StackOverflow [4], with the “xarray-python” tag. Additionally, we use GitHub for a bug tracker (https://github.com/pydata/xarray/issues) and maintain the “xarray” mailing list on Google Groups (https://groups.google.com/forum/#!forum/xarray).<anchor xml:id="a52"/></p>
        <p>Acknowledgements</p>
        <p>Initial development of xarray was supported by The Climate Corporation. We thank Matthew Rocklin and Jim Crist for their assistance integrating xarray with Dask, and Todd Small, Francisco Alvarez and Fabien Maussion for their feedback on early drafts of this manuscript.</p>
        <p>Competing Interests</p>
        <p>The authors have no competing interests to declare.<anchor xml:id="a53"/></p>
    </body>
  </text>
</TEI>
