{"id":32177745,"url":"https://github.com/cnes/pangeo-pyinterp","last_synced_at":"2026-02-21T18:03:39.576Z","repository":{"id":40633450,"uuid":"194056459","full_name":"CNES/pangeo-pyinterp","owner":"CNES","description":"Python library for optimized interpolation.","archived":false,"fork":false,"pushed_at":"2026-01-30T15:33:34.000Z","size":10503,"stargazers_count":133,"open_issues_count":2,"forks_count":17,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-01-31T02:47:25.700Z","etag":null,"topics":["axes","fill","gauss-seidel","grid","interpolation","latitudes","longitudes","python-library","rtree","undefined-values","unstructured-grids"],"latest_commit_sha":null,"homepage":"https://cnes.github.io/pangeo-pyinterp/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CNES.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-06-27T08:37:37.000Z","updated_at":"2026-01-30T15:33:38.000Z","dependencies_parsed_at":"2023-02-19T17:15:56.679Z","dependency_job_id":"b7d05690-1db7-4f99-9bce-44b84b468fcf","html_url":"https://github.com/CNES/pangeo-pyinterp","commit_stats":{"total_commits":1048,"total_committers":6,"mean_commits":"174.66666666666666","dds":0.1507633587786259,"last_synced_commit":"2cef7bfb8cefd8e850631f474ec8bd94ccac119a"},"previous_names":[],"tags_count":59,"template":false,"template_full_name":null,"purl":"pkg:github/CNES/pangeo-pyinterp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Fpangeo-pyinterp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Fpangeo-pyinterp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Fpangeo-pyinterp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Fpangeo-pyinterp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CNES","download_url":"https://codeload.github.com/CNES/pangeo-pyinterp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CNES%2Fpangeo-pyinterp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29689644,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T15:51:39.154Z","status":"ssl_error","status_checked_at":"2026-02-21T15:49:03.425Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axes","fill","gauss-seidel","grid","interpolation","latitudes","longitudes","python-library","rtree","undefined-values","unstructured-grids"],"created_at":"2025-10-21T20:25:13.472Z","updated_at":"2026-02-21T18:03:39.571Z","avatar_url":"https://github.com/CNES.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"###############\npangeo-pyinterp\n###############\n\n|Build Status| |Downloads| |Platforms|\n|Latest Release Date| |License| |Binder|\n\nPython library for optimized geo-referenced interpolation.\n\nAbout\n=====\n\nThe motivation of this project is to provide tools for interpolating\ngeo-referenced data used in the field of geosciences. Other libraries cover this\nproblem, but written entirely in Python, the performance of these projects was\nnot quite sufficient for our needs. That is why this project started.\n\nWith this library, you can interpolate `2D\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/grids.html#core-grids-aliases\u003e`_,\n`3D\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/grids.html#core-grids-aliases\u003e`_,\nor `4D\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/grids.html#core-grids-aliases\u003e`_\nfields using ``n-variate`` and ``bicubic`` `interpolators\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/regular_grid.html\u003e`_\nand `unstructured grids\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/unstructured_grid.html\u003e`_.\nYou can also apply for a data `binning\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/statistics.html#binning-containers\u003e`_ on the\nbivariate area by simple or linear binning.\n\nThe library core is written in C++ using the `Boost C++ Libraries\n\u003chttps://www.boost.org/\u003e`_, `Eigen3 \u003chttp://eigen.tuxfamily.org/\u003e`_ and\n`nanobind \u003chttps://github.com/wjakob/nanobind/\u003e`_ libraries.\n\nThis software also uses `CMake \u003chttps://cmake.org/\u003e`_ to configure the project\nand `Googletest \u003chttps://github.com/google/googletest\u003e`_ to perform unit testing\nof the library kernel.\n\nFill undefined values\n=====================\n\nThe undefined values in the grids do not allow interpolation of values located\nin the neighborhood. This behavior is a concern when you need to interpolate\nvalues near the mask of some fields. The library provides utilities to fill the\nundefined values:\n\n* `fft_inpaint \u003chttps://cnes.github.io/pangeo-pyinterp/api/_generated/pyinterp.fill.fft_inpaint.html#pyinterp.fill.fft_inpaint\u003e`_\n  to fill all undefined values in a grid using the FFT Inpainting method.\n* `loess \u003chttps://cnes.github.io/pangeo-pyinterp/api/_generated/pyinterp.fill.loess.html#pyinterp.fill.loess\u003e`_\n  to fill the undefined values on the boundary between the defined/undefined\n  values using local regression.\n* `gauss_seidel \u003chttps://cnes.github.io/pangeo-pyinterp/api/_generated/pyinterp.fill.gauss_seidel.html#pyinterp.fill.gauss_seidel\u003e`_\n  to fill all undefined values in a grid using the Gauss-Seidel method by\n  relaxation.\n* `multi_grid \u003chttps://cnes.github.io/pangeo-pyinterp/api/_generated/pyinterp.fill.multigrid.html#pyinterp.fill.multigrid\u003e`_\n  to fill all undefined values in a grid using the Multi-Grid method.\n\nGeographic indexers\n===================\n\nN-Dimensional Grids\n-------------------\n\nN-dimensional grid is a grid defined by a matrix, in a 2D space, by a cube in a\n3D space, etc. Each dimension of the grid is associated with a vector\ncorresponding to its coordinates or axes. Axes used to locate a pixel in the\ngrid from the coordinates of a point. These axes are either:\n\n* *regular*: a vector of 181 latitudes spaced a degree from -90 to 90 degrees;\n* *irregular*: a vector of 109 latitudes irregularly spaced from -90 to\n  89.940374 degrees.\n\nThese objects are manipulated by the class `pyinterp.Axis\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/_generated/pyinterp.Axis.html#pyinterp.Axis\u003e`_,\nwhich will choose, according to Axis definition, the best implementation. This\nobject will allow you to find the two indexes framing a given value. This\noperating mode allows better performance when searching for a regular axis (a\nsimple calculation will enable you to see the index of a point immediately). In\ncontrast, in the case of an irregular axis, the search will be performed using a\nbinary search.\n\nFinally, this class can define a circular axis from a vector to correctly\nlocate a value on the circle. This type of Axis will is used for handling\nlongitudes.\n\nTemporal Axes\n-------------\n\nThe `pyinterp.TemporalAxis\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/_generated/pyinterp.TemporalAxis.html#pyinterp.TemporalAxis\u003e`_\nclass handles temporal axes, i.e., axes defined by 64-bit integer vectors, which\nis the encoding used by `numpy\n\u003chttps://docs.scipy.org/doc/numpy/reference/arrays.datetime.html\u003e`_ to control\ndates. This class allows you to process dates using integer arithmetic to ensure\nthat no information is lost during calculations. These objects are used by\nspatiotemporal grids to perform temporal interpolations.\n\nUnstructured Grids\n------------------\n\nIn the case of unstructured grids, the index used is a *R\\*Tree*. These trees\nhave better performance than the *KDTree* generally found in Python library\nimplementations.\n\nThe tree used here is the implementation provided by the `C++ Boost library\n\u003chttps://www.boost.org/doc/libs/1_70_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree.html\u003e`_.\n\nAn adaptation has been introduced to address spherical equatorial coordinates\neffectively. Although the Boost library allows these coordinates to manipulate\nnatively, the performance is lower than in the case of Cartesian space. Thus, we\nhave chosen to implement a conversion of Longitude Latitude Altitude (*LLA*)\ncoordinates into Earth-Centered, Earth-Fixed (*ECEF*) coordinates transparently\nfor the user to ensure that we can preserve excellent performance. The\ndisadvantage of this implementation is that it requires fairly more memory, as\none more element gets used to index the value of the Cartesian space.\n\nThe management of the `LLA\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/_generated/pyinterp.geometry.geographic.Coordinates.ecef_to_lla.html#pyinterp.geometry.geographic.Coordinates.ecef_to_lla\u003e`_/`ECEF\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/_generated/pyinterp.geometry.geographic.Coordinates.lla_to_ecef.html#pyinterp.geometry.geographic.Coordinates.lla_to_ecef\u003e`_\ncoordinate conversion is managed to use the `Vermeille, H.\n\u003chttps://doi.org/10.1007/s00190-002-0273-6\u003e`_ algorithm. It has an excellent\nperformance with the accuracy of 1e-8 meters for altitude.\n\nGeohash\n-------\n\nGeohashing is a geocoding method used to encode geographic coordinates\n(latitude and longitude) into a short string of digits and letters delineating\nan area on a map, which is called a cell, with varying resolutions. The more\ncharacters in the string, the more precise the location.\n\nGeohashes use Base-32 alphabet encoding (characters can be ``0`` to ``9`` and\n``A`` to ``Z``, excl ``A``, ``I``, ``L`` and ``O``).\n\nThe geohash is a compact way of representing a location, and is useful for\nstoring a location in a database, or for indexing a location in a database.\n\nGeometry\n========\n\nThis library provides Python bindings to `Boost Geometry\n\u003chttps://www.boost.org/doc/libs/release/libs/geometry/doc/html/index.html\u003e`_\nconcepts and algorithms for both `geographic\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/geometry.html#geographic-system\u003e`_\nand `Cartesian\n\u003chttps://cnes.github.io/pangeo-pyinterp/api/geometry.html#cartesian-system\u003e`_\ncoordinate spaces. The geometry module offers a comprehensive set of geometric\nprimitives including points, linestrings, polygons, rings, segments, and\nbounding boxes. For each coordinate space (``cartesian`` and ``geographic``),\ndedicated algorithms are provided for common geometric operations such as:\n\n* Computing areas and perimeters of geometries\n* Calculating distances and azimuths between points\n* Determining centroids and closest points\n* Performing buffer and envelope operations\n* Converting between coordinate spaces\n\nIn the geographic space, additional features include support for multiple\ngeodetic strategies (Andoyer, Karney, Thomas, Vincenty) for precise calculations\non a spheroid, and coordinate transformations (LLA/ECEF, geographic to Cartesian\nconversions).\n\n.. |Build Status| image:: https://github.com/CNES/pangeo-pyinterp/actions/workflows/ci.yaml/badge.svg\n    :target: https://github.com/CNES/pangeo-pyinterp/actions\n.. |Downloads| image:: https://img.shields.io/conda/dn/conda-forge/pyinterp.svg?service=github\n    :target: image:: https://anaconda.org/conda-forge/pyinterp\n.. |Platforms| image:: https://img.shields.io/conda/pn/conda-forge/pyinterp.svg?service=github\n    :target: https://anaconda.org/conda-forge/pyinterp\n.. |Latest Release Date| image:: https://anaconda.org/conda-forge/pyinterp/badges/latest_release_date.svg?service=github\n    :target: https://github.com/CNES/pangeo-pyinterp/commits/master\n.. |License| image:: https://anaconda.org/conda-forge/pyinterp/badges/license.svg?service=github\n    :target: https://opensource.org/licenses/BSD-3-Clause\n.. |Binder| image:: https://mybinder.org/badge_logo.svg\n    :target: https://mybinder.org/v2/gh/CNES/pangeo-pyinterp/master?urlpath=lab/tree/notebooks/auto_examples/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnes%2Fpangeo-pyinterp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcnes%2Fpangeo-pyinterp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnes%2Fpangeo-pyinterp/lists"}