Repository: OCHA-DAP/ocha-anticipy (language: python)

Issue:
Rename package
Rename the package, new name still TBD


Discussion / hints:

Fix patch:
diff --git a/.github/workflows/publish-to-pypi.yaml b/.github/workflows/publish-to-pypi.yaml
index 6b2fba06..29cb4ab2 100644
--- a/.github/workflows/publish-to-pypi.yaml
+++ b/.github/workflows/publish-to-pypi.yaml
@@ -25,6 +25,7 @@ jobs:
     - name: Build a binary wheel and a source tarball
       run: python -m build --sdist --wheel --outdir dist/ .
     - name: Publish to Test PyPI
+      if: ${{ !startsWith(github.ref, 'refs/tags') }}
       uses: pypa/gh-action-pypi-publish@master
       with:
         password: ${{ secrets.TEST_PYPI_API_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 9d59dcbd..bf3bbcaf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -71,7 +71,7 @@ instance/
 # Sphinx documentation
 docs/build/
 docs/source/modules.rst
-docs/source/aatoolbox*.rst
+docs/source/ochanticipy*.rst
 
 # PyBuilder
 target/
@@ -138,4 +138,4 @@ dmypy.json
 .DS_Store
 
 # build files
-src/aatoolbox/_version.py
+src/ochanticipy/_version.py
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index e5336f61..bdc79178 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,13 +1,21 @@
 Changelog
 =========
 
-All notable changes to ``aa-toolbox`` will be documented in this file.
+All notable changes to OCHA AnticiPy will be documented in this file.
 
 The format is based on `Keep a
 Changelog <https://keepachangelog.com/en/1.0.0/>`__, and this project
 adheres to `Semantic
 Versioning <https://semver.org/spec/v2.0.0.html>`__.
 
+[Unreleased]
+------------
+
+Changed
+-------
+
+- Renamed from AA Toolbox to OCHA AnticiPy
+
 [0.5.0] - 2022-12-02
 --------------------
 
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index afe62bf2..a3eacb20 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -19,7 +19,7 @@ In your virtual environment, please install all packages from
 
    pip install -r requirements/requirements-dev.txt
 
-``aa-toolbox`` makes use of
+OCHA AnticiPy makes use of
 `geopandas <https://geopandas.org/en/stable/>`__, which depends on
 `Fiona <https://github.com/Toblerity/Fiona>`__, so you will need to
 have `GDAL <https://github.com/Toblerity/Fiona#installation>`__
@@ -41,7 +41,7 @@ To run the tests and view coverage, execute:
 
 .. code:: shell
 
-   python -m pytest --cov=aatoolbox
+   python -m pytest --cov=ochanticipy
 
 Directly running pytest may
 [produce errors](https://stackoverflow.com/questions/40718770/pytest-running-with-another-version-of-python).
@@ -94,7 +94,7 @@ Module order
 """"""""""""
 
 The ordering of the ``api.rst`` documentation should match the ordering
-specified in the ``__all__`` list ``src/aatoolbox/__init__.py``.
+specified in the ``__all__`` list ``src/ochanticipy/__init__.py``.
 
 Build and view
 ^^^^^^^^^^^^^^
@@ -161,13 +161,13 @@ Versioning is handled by
 `setuptools_scm <https://github.com/pypa/setuptools_scm>`__, and the
 configuration for this can be found in ``pyproject.toml``
 
-The ``aa-toolbox`` package is built and published to
-`PyPI <https://pypi.org/project/aa-toolbox/>`__ whenever a new tag is
+The OCHA AnticiPy package is built and published to
+`PyPI <https://pypi.org/project/ocha-anticipy/>`__ whenever a new tag is
 pushed. With each new commit, a development version is pushed to
-`TestPyPI <https://test.pypi.org/project/aa-toolbox>`__ and is available
+`TestPyPI <https://test.pypi.org/project/ocha-anticipy>`__ and is available
 to install for testing purposes by running:
 
 .. code:: shell
 
    pip install --index-url https://test.pypi.org/simple/
-   --extra-index-url https://pypi.org/simple aa-toolbox==$VERSION
+   --extra-index-url https://pypi.org/simple ocha-anticipy==$VERSION
diff --git a/README.md b/README.md
index 4f13e7d4..79dfc38b 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,17 @@
-# aa-toolbox: Toolbox for anticipatory action
+# OCHA AnticiPy: Access data for anticipating humanitarian risk
 
-[![license](https://img.shields.io/github/license/OCHA-DAP/pa-aa-toolbox.svg)](https://github.com/OCHA-DAP/pa-aa-toolbx/blob/main/LICENSE)
-[![Test Status](https://github.com/OCHA-DAP/pa-aa-toolbox/workflows/tests/badge.svg)](https://github.com/OCHA-DAP/pa-aa-toolbox/actions?query=workflow%3Atests)
-[![PyPI Status](https://github.com/OCHA-DAP/pa-aa-toolbox/workflows/PyPI/badge.svg)](https://github.com/OCHA-DAP/pa-aa-toolbox/actions?query=workflow%3APyPI)
-[![Documentation Status](https://readthedocs.org/projects/aa-toolbox/badge/?version=latest)](https://aa-toolbox.readthedocs.io/en/latest/?badge=latest)
-[![Coverage Status](https://codecov.io/gh/OCHA-DAP/pa-aa-toolbox/branch/main/graph/badge.svg?token=JpWZc5js4y)](https://codecov.io/gh/OCHA-DAP/pa-aa-toolbox)
+[![license](https://img.shields.io/github/license/OCHA-DAP/ocha-anticipy.svg)](https://github.com/OCHA-DAP/pa-aa-toolbx/blob/main/LICENSE)
+[![Test Status](https://github.com/OCHA-DAP/ocha-anticipy/workflows/tests/badge.svg)](https://github.com/OCHA-DAP/ocha-anticipy/actions?query=workflow%3Atests)
+[![PyPI Status](https://github.com/OCHA-DAP/ocha-anticipy/workflows/PyPI/badge.svg)](https://github.com/OCHA-DAP/ocha-anticipy/actions?query=workflow%3APyPI)
+[![Documentation Status](https://readthedocs.org/projects/ocha-anticipy/badge/?version=latest)](https://ocha-anticipy.readthedocs.io/en/latest/?badge=latest)
+[![Coverage Status](https://codecov.io/gh/OCHA-DAP/ocha-anticipy/branch/main/graph/badge.svg?token=JpWZc5js4y)](https://codecov.io/gh/OCHA-DAP/ocha-anticipy)
 [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)
 [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
 [![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)
 
-The [anticipatory action](https://centre.humdata.org/anticipatory-action/)
-(AA) toolbox is a Python package to support development of AA frameworks, by
-simplifying the downloading and processing of commonly used datasets.
+OCHA AnticiPy is a Python library for simple downloading and processing
+of data related to the anticipation of humanitarian risk,
+from climate observations and forecasts to food insecurity.
 
 The datasets that we currently support are:
 
@@ -23,23 +23,28 @@ The datasets that we currently support are:
 - USGS NDVI (normalized difference vegetation index)
 
 For more information, please see the
-[documentation](https://aa-toolbox.readthedocs.io/en/latest/).
+[documentation](https://ocha-anticipy.readthedocs.io/en/latest/).
 
 ## Installing
 
 Install and update using [pip](https://pip.pypa.io/en/stable/getting-started/):
 
 ```shell
-pip install -U aa-toolbox
+pip install ocha-anticipy
 ```
 
 ## A Simple Example
 
-Download the admin boundary CODs for Nepal, and retrieve provinces
-as a GeoDataFrame:
+OCHA AnticiPy downloads data to the directory referenced by the
+environment variable `OAP_DATA_DIR`. Before beginning, please make
+sure that this environment variable is defined and points to where you would
+like the data to go.
+
+Next, you can simply download the admin boundary CODs for Nepal,
+and retrieve provinces as a GeoDataFrame:
 
 ```python
-from aatoolbox import create_country_config, CodAB
+from ochanticipy import create_country_config, CodAB
 
 country_config = create_country_config('npl')
 codab = CodAB(country_config=country_config)
@@ -50,12 +55,12 @@ provinces = codab.load(admin_level=1)
 ## Contributing
 
 For guidance on setting up a development environment, see the
-[contributing guidelines](https://github.com/OCHA-DAP/pa-aa-toolbox/blob/main/CONTRIBUTING.rst)
+[contributing guidelines](https://github.com/OCHA-DAP/ocha-anticipy/blob/main/CONTRIBUTING.rst)
 
 ## Links
 
-- [Documentation](https://aa-toolbox.readthedocs.io/en/latest/)
-- [Changes](https://github.com/OCHA-DAP/pa-aa-toolbox/blob/main/CHANGELOG.rst)
-- [PyPI Releases](https://pypi.org/project/aa-toolbox/)
-- [Source Code](https://github.com/OCHA-DAP/pa-aa-toolbox)
-- [Issue Tracker](https://github.com/OCHA-DAP/pa-aa-toolbox/issues)
+- [Documentation](https://ocha-anticipy.readthedocs.io/en/latest/)
+- [Changes](https://github.com/OCHA-DAP/ocha-anticipy/blob/main/CHANGELOG.rst)
+- [PyPI Releases](https://pypi.org/project/ocha-anticipy/)
+- [Source Code](https://github.com/OCHA-DAP/ocha-anticipy)
+- [Issue Tracker](https://github.com/OCHA-DAP/ocha-anticipy/issues)
diff --git a/docs/source/api.rst b/docs/source/api.rst
index af5e2d1b..42714eba 100644
--- a/docs/source/api.rst
+++ b/docs/source/api.rst
@@ -4,10 +4,10 @@ AA Toolbox API
 Configuration
 -------------
 
-.. autoclass:: aatoolbox.CountryConfig
+.. autoclass:: ochanticipy.CountryConfig
 
-.. autofunction:: aatoolbox.create_country_config
-.. autofunction:: aatoolbox.create_custom_country_config
+.. autofunction:: ochanticipy.create_country_config
+.. autofunction:: ochanticipy.create_custom_country_config
 
 Data sources
 ------------
@@ -15,101 +15,101 @@ Data sources
 CHIRPS
 ^^^^^^
 
-.. automodule:: aatoolbox.datasources.chirps.chirps
+.. automodule:: ochanticipy.datasources.chirps.chirps
 
 Daily
 """""
 
-.. autoclass:: aatoolbox.ChirpsDaily
+.. autoclass:: ochanticipy.ChirpsDaily
    :inherited-members:
 
 Monthly
 """""""
 
-.. autoclass:: aatoolbox.ChirpsMonthly
+.. autoclass:: ochanticipy.ChirpsMonthly
    :inherited-members:
 
 Common Operational Datasets
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. automodule:: aatoolbox.datasources.codab.codab
-.. autoclass:: aatoolbox.CodAB
+.. automodule:: ochanticipy.datasources.codab.codab
+.. autoclass:: ochanticipy.CodAB
    :members:
 
 FEWS NET
 ^^^^^^^^
 
-.. automodule:: aatoolbox.datasources.fewsnet.fewsnet
-.. autoclass:: aatoolbox.FewsNet
+.. automodule:: ochanticipy.datasources.fewsnet.fewsnet
+.. autoclass:: ochanticipy.FewsNet
    :members:
 
 GloFAS
 ^^^^^^
 
-.. automodule:: aatoolbox.datasources.glofas.glofas
+.. automodule:: ochanticipy.datasources.glofas.glofas
 
 Reanalysis
 """"""""""
 
-.. autoclass:: aatoolbox.GlofasReanalysis
+.. autoclass:: ochanticipy.GlofasReanalysis
    :inherited-members:
 
 Forecast
 """"""""
 
-.. autoclass:: aatoolbox.GlofasForecast
+.. autoclass:: ochanticipy.GlofasForecast
    :inherited-members:
 
 Reforecast
 """"""""""
 
-.. autoclass:: aatoolbox.GlofasReforecast
+.. autoclass:: ochanticipy.GlofasReforecast
    :inherited-members:
 
 IRI
 ^^^
 
-.. automodule:: aatoolbox.datasources.iri.iri_seasonal_forecast
+.. automodule:: ochanticipy.datasources.iri.iri_seasonal_forecast
 
 Probability forecast
 """"""""""""""""""""
 
-.. autoclass:: aatoolbox.IriForecastProb
+.. autoclass:: ochanticipy.IriForecastProb
    :inherited-members:
 
 Dominant forecast
 """""""""""""""""
 
-.. autoclass:: aatoolbox.IriForecastDominant
+.. autoclass:: ochanticipy.IriForecastDominant
    :inherited-members:
 
 NDVI (USGS eMODIS)
 ^^^^^^^^^^^^^^^^^^
 
-.. automodule:: aatoolbox.datasources.usgs.ndvi_products
+.. automodule:: ochanticipy.datasources.usgs.ndvi_products
 
 Smoothed
 """"""""
 
-.. autoclass:: aatoolbox.UsgsNdviSmoothed
+.. autoclass:: ochanticipy.UsgsNdviSmoothed
    :inherited-members:
 
 Percent of median
 """""""""""""""""
 
-.. autoclass:: aatoolbox.UsgsNdviPctMedian
+.. autoclass:: ochanticipy.UsgsNdviPctMedian
    :inherited-members:
 
 Median anomaly
 """"""""""""""
 
-.. autoclass:: aatoolbox.UsgsNdviMedianAnomaly
+.. autoclass:: ochanticipy.UsgsNdviMedianAnomaly
    :inherited-members:
 
 Difference from previous year
 """""""""""""""""""""""""""""
 
-.. autoclass:: aatoolbox.UsgsNdviYearDifference
+.. autoclass:: ochanticipy.UsgsNdviYearDifference
    :inherited-members:
 
 Utilities
@@ -118,25 +118,25 @@ Utilities
 GeoboundingBox
 ^^^^^^^^^^^^^^
 
-.. automodule:: aatoolbox.utils.geoboundingbox
-.. autoclass:: aatoolbox.GeoBoundingBox
+.. automodule:: ochanticipy.utils.geoboundingbox
+.. autoclass:: ochanticipy.GeoBoundingBox
    :members:
 
 Raster module
 ^^^^^^^^^^^^^
 
-.. automodule:: aatoolbox.utils.raster
+.. automodule:: ochanticipy.utils.raster
 
 Data arrays
 """""""""""
 
-.. autoclass:: aatoolbox.utils.raster.AatRasterArray
+.. autoclass:: ochanticipy.utils.raster.AatRasterArray
    :members:
    :inherited-members: RasterArray
 
 Datasets
 """"""""
 
-.. autoclass:: aatoolbox.utils.raster.AatRasterDataset
+.. autoclass:: ochanticipy.utils.raster.AatRasterDataset
    :members:
    :inherited-members: RasterDataset
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 3775b14b..fb81776e 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -17,9 +17,9 @@
 
 # -- Project information -----------------------------------------------------
 
-project = "AA Toolbox"
-author = "Centre for Humanitarian Data Predictive Analytics Team"
-copyright = "2022, Centre for Humanitarian Data Predictive Analytics Team"
+project = "OCHA AnticiPy"
+author = "Data Science Team, UN OCHA Centre for Humanitarian Data"
+copyright = "2023, UN OCHA Centre for Humanitarian Data"
 
 # -- General configuration ---------------------------------------------------
 
@@ -42,7 +42,7 @@
 exclude_patterns = []  # type: list
 
 # API doc settings
-apidoc_module_dir = "../../src/aatoolbox"
+apidoc_module_dir = "../../src/ochanticipy"
 apidoc_output_dir = "."
 
 # -- Options for HTML output -------------------------------------------------
diff --git a/docs/source/config.rst b/docs/source/config.rst
index 84bd02f5..b552ee33 100644
--- a/docs/source/config.rst
+++ b/docs/source/config.rst
@@ -35,7 +35,7 @@ for Nepal, which has the ISO3 "NPL":
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config
+    from ochanticipy import create_country_config
     country_config = create_country_config(iso3="npl")
 
 Custom Country Configuration
@@ -49,7 +49,7 @@ file and passing the filename to the custom constructor:
 
 .. code-block:: python
 
-    from aatoolbox import create_custom_country_config
+    from ochanticipy import create_custom_country_config
 
     filename = "/path/to/filename"
     country_config = create_custom_country_config(filename=filename)
diff --git a/docs/source/datasources.rst b/docs/source/datasources.rst
index 1629a34c..786ae817 100644
--- a/docs/source/datasources.rst
+++ b/docs/source/datasources.rst
@@ -1,7 +1,7 @@
 Data Sources
 ============
 
-AA Toolbox supports the following data sources:
+OCHA AnticiPy supports the following data sources:
 
 .. toctree::
    :maxdepth: 1
diff --git a/docs/source/datasources/chirps.rst b/docs/source/datasources/chirps.rst
index f7561832..fab366b4 100644
--- a/docs/source/datasources/chirps.rst
+++ b/docs/source/datasources/chirps.rst
@@ -16,7 +16,7 @@ CHPclim (CHC in-house climatology), 0.05° resolution satellite imagery, and in-
 data to create gridded rainfall time series for trend analysis and seasonal drought
 monitoring. More information are available `here <https://www.nature.com/articles/sdata201566>`_.
 
-Through the AA toolbox, it is possible to have access to daily and monthly data.
+Through OCHA AnticiPy, it is possible to have access to daily and monthly data.
 
 The data is downloaded from `IRI's maproom
 <http://iridl.ldeo.columbia.edu/SOURCES/.UCSB/.CHIRPS/.v2p0>`_ as the platform allows
@@ -35,7 +35,7 @@ we will use Burkina Faso, which corresponds to the ISO3 code "bfa":
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config
+    from ochanticipy import create_country_config
     country_config = create_country_config(iso3="bfa")
 
 Another required input is the geographic area of interest. A simple
@@ -44,7 +44,7 @@ administrative boundaries. As a first step, you need to download them:
 
 .. code-block:: python
 
-    from aatoolbox import CodAB
+    from ochanticipy import CodAB
     codab = CodAB(country_config=country_config)
     codab.download()
     admin0 = codab.load(admin_level=0)
@@ -53,7 +53,7 @@ Next, an instance of the class GeoBoundingBox needs to be created:
 
 .. code-block:: python
 
-    from aatoolbox import GeoBoundingBox
+    from ochanticipy import GeoBoundingBox
     geo_bounding_box = GeoBoundingBox.from_shape(admin0)
 
 You can then choose start and end date of the dataset to be considered in your
@@ -72,7 +72,7 @@ In the following example, monthly data ranging from February 2001 to March
 
 .. code-block:: python
 
-    from aatoolbox import ChirpsMonthly
+    from ochanticipy import ChirpsMonthly
 
     start_date = datetime.date(year=2001, month=2, day=1)
     end_date = datetime.date(year=2006, month=3, day=31)
@@ -92,7 +92,7 @@ available data:
 
 .. code-block:: python
 
-    from aatoolbox import ChirpsDaily
+    from ochanticipy import ChirpsDaily
 
     start_date = datetime.date(year=2007, month=10, day=23)
 
diff --git a/docs/source/datasources/codab.rst b/docs/source/datasources/codab.rst
index 00726c2e..fa238517 100644
--- a/docs/source/datasources/codab.rst
+++ b/docs/source/datasources/codab.rst
@@ -24,14 +24,14 @@ for the country you would like to use:
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config
+    from ochanticipy import create_country_config
     country_config = create_country_config(iso3="npl")
 
 Next you need to instantiate the CodAB class with the country config:
 
 .. code-block:: python
 
-    from aatoolbox import CodAB
+    from ochanticipy import CodAB
     codab = CodAB(country_config=country_config)
 
 Upon first use, you will need to downlaod the COD AB data:
@@ -59,7 +59,7 @@ The full code snippet is below in case you would like to copy it:
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config, CodAB
+    from ochanticipy import create_country_config, CodAB
     country_config = create_country_config(iso3="npl")
     codab = CodAB(country_config=country_config)
     codab.download()
diff --git a/docs/source/datasources/fewsnet.rst b/docs/source/datasources/fewsnet.rst
index f4003f68..b33cd406 100644
--- a/docs/source/datasources/fewsnet.rst
+++ b/docs/source/datasources/fewsnet.rst
@@ -34,14 +34,14 @@ for the country you would like to use:
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config
+    from ochanticipy import create_country_config
     country_config = create_country_config(iso3="eth")
 
 Next you need to instantiate the FEWS NET class with the country config:
 
 .. code-block:: python
 
-    from aatoolbox import FewsNet
+    from ochanticipy import FewsNet
     fewsnet = FewsNet(country_config=country_config)
 
 Upon first use, you will need to downlaod the FEWS NET data.
@@ -74,7 +74,7 @@ The full code snippet is below in case you would like to copy it:
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config, FewsNet
+    from ochanticipy import create_country_config, FewsNet
     country_config = create_country_config(iso3="eth")
     fewsnet = FewsNet(country_config=country_config)
     fewsnet.download(pub_year=2021, pub_month=6)
diff --git a/docs/source/datasources/glofas.rst b/docs/source/datasources/glofas.rst
index 317830bd..8079ffdb 100644
--- a/docs/source/datasources/glofas.rst
+++ b/docs/source/datasources/glofas.rst
@@ -231,7 +231,7 @@ You can initialize a built-in country config as follows:
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config
+    from ochanticipy import create_country_config
 
     country_config = create_country_config(iso3="bgd")
 
@@ -243,7 +243,7 @@ and extract a geo bounding box:
 
 .. code-block:: python
 
-    from aatoolbox import CodAB, GeoBoundingBox
+    from ochanticipy import CodAB, GeoBoundingBox
 
     codab = CodAB(country_config=country_config)
     codab.download()
@@ -266,7 +266,7 @@ the same results when run on a different day.
 
     from datetime import date
 
-    from aatoolbox import GlofasForecast
+    from ochanticipy import GlofasForecast
 
     glofas_forecast = GlofasForecast(
         country_config=country_config,
@@ -333,7 +333,7 @@ The full codde snippet is below:
 
     from datetime import date
 
-    from aatoolbox import create_country_config, CodAB, \
+    from ochanticipy import create_country_config, CodAB, \
         GeoBoundingBox, GlofasForecast
 
     codab = CodAB(country_config=country_config)
diff --git a/docs/source/datasources/iri_seasonal_forecast.rst b/docs/source/datasources/iri_seasonal_forecast.rst
index 60c5e8a9..98cb7fe0 100644
--- a/docs/source/datasources/iri_seasonal_forecast.rst
+++ b/docs/source/datasources/iri_seasonal_forecast.rst
@@ -15,13 +15,14 @@ found `here <https://iri.columbia
 .edu/our-expertise/climate/forecasts/seasonal-climate-forecasts/methodology
 />`_.
 
-Currently in AA toolbox, only the tercile precipitation forecast has been
+Currently in OCHA AnticiPy, only the tercile precipitation forecast has been
 implemented.
 
 The tercile precipitation forecast is published in two formats. One only
 indicates the dominant tercile probability while the other format indicates
-the probability for each tercile. Both formats are implemented in the AA
-toolbox.
+the probability for each tercile. Both formats are implemented in
+OCHA AnticiPy.
+
 
 The data is downloaded from `IRI's maproom
 <https://iridl.ldeo.columbia.edu/maproom/Global/Forecasts/NMME_Seasonal_Forecasts/Precipitation_ELR.html>`_
@@ -43,7 +44,7 @@ Burkina Faso, which has the ISO3 "bfa":
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config
+    from ochanticipy import create_country_config
     country_config = create_country_config(iso3="bfa")
 
 The IRI class also requires a geographic area as input. A simple
@@ -52,7 +53,7 @@ administrative boundaries. The first step is to download them:
 
 .. code-block:: python
 
-    from aatoolbox import CodAB
+    from ochanticipy import CodAB
     codab = CodAB(country_config=country_config)
     codab.download()
     admin0 = codab.load(admin_level=0)
@@ -61,14 +62,14 @@ Next, create a GeoBoundingBox for input to IRI:
 
 .. code-block:: python
 
-    from aatoolbox import GeoBoundingBox
+    from ochanticipy import GeoBoundingBox
     geo_bounding_box = GeoBoundingBox.from_shape(admin0)
 
 Now we're ready to get the IRI data:
 
 .. code-block:: python
 
-    from aatoolbox import IriForecastDominant
+    from ochanticipy import IriForecastDominant
 
     iri_dominant = IriForecastDominant(country_config=country_config,
                                        geo_bounding_box=geo_bounding_box)
@@ -81,7 +82,7 @@ tercile:
 
 .. code-block:: python
 
-    from aatoolbox import IriForecastProb
+    from ochanticipy import IriForecastProb
 
     iri_prob = IriForecastProb(country_config=country_config,
                                geo_bounding_box=geo_bounding_box)
@@ -93,7 +94,7 @@ The full code snippet is below in case you would like to copy it:
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config, CodAB, GeoBoundingBox, \
+    from ochanticipy import create_country_config, CodAB, GeoBoundingBox, \
                           IriForecastDominant, IriForecastProb
 
     country_config = create_country_config(iso3="bfa")
diff --git a/docs/source/datasources/usgs_ndvi.rst b/docs/source/datasources/usgs_ndvi.rst
index 1bcf98b0..f2e05479 100644
--- a/docs/source/datasources/usgs_ndvi.rst
+++ b/docs/source/datasources/usgs_ndvi.rst
@@ -77,7 +77,7 @@ Once you have created the config you can load it:
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config
+    from ochanticipy import create_country_config
     country_config = create_country_config(iso3="eth")
 
 Next you need to instantiate the USGS NDVI class with the country config. For this
@@ -87,7 +87,7 @@ sample of data from a few dekads, corresponding to the dates in January:
 
 .. code-block:: python
 
-    from aatoolbox import UsgsNdviSmoothed
+    from ochanticipy import UsgsNdviSmoothed
     ndvi_smooth = UsgsNdviSmoothed(
         country_config=country_config,
         start_date="2021-01-01",
@@ -123,7 +123,7 @@ config, and use this to calculate basic statistics for the dekads we've loaded.
 
 .. code-block:: python
 
-    from aatoolbox import CodAB
+    from ochanticipy import CodAB
 
     eth_cod = CodAB(country_config=country_config)
     # assuming you've downloaded the file already
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 62de243a..b0174fbb 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -1,11 +1,11 @@
-Welcome to AA Toolbox
-=====================
+Welcome to OCHA AnticiPy
+========================
 
-Welcome to AA Toolbox's documentation.
+Welcome to OCHA AnticiPy's documentation.
 
-The `anticipatory action <https://centre.humdata.org/anticipatory-action/>`_
-(AA) toolbox is a Python package to support development of AA frameworks, by
-simplifying the downloading and processing of commonly used datasets.
+OCHA AnticiPy is a Python library for simple downloading and processing
+of data related to the anticipation of humanitarian risk,
+from climate observations and forecasts to food insecurity.
 
 Get set up
 and start downloading data using :doc:`quickstart`.
@@ -16,7 +16,7 @@ the :doc:`api` section.
 User Guide
 ----------
 
-The following links provide background information on the AA Toolbox,
+The following links provide background information on OCHA AnticiPy,
 how to get started,
 and detailed guides on the individual data sources plus any
 additional functionality.
diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst
index 39d0feb3..e7933ab9 100644
--- a/docs/source/introduction.rst
+++ b/docs/source/introduction.rst
@@ -1,16 +1,16 @@
 Introduction
 ============
 
-`Anticipatory action <https://centre.humdata.org/anticipatory-action/>`_
-(AA) means shifting humanitarian response to be deployed ahead of a crisis.
-Knowing when to provide humanitarian aid involves understanding the
-risk that a potential shock may occur. Gaining this understanding often
-requires in-depth analysis of decades of historical data relating to
-the shock of interest as well as any related indicators.
+Humanitarians are increasingly recognizing the importance of estimating the
+risk and predicting the occurrence of shocks and disasters,
+whether it is through reducing the vulnerability and exposure of affected
+populations to likely hazards, or acting in anticipation of predictable shocks.
+This requires a wide array of data, from historical observations, to existing model forecasts
+and related covariates.
 
-This is where the AA Toolbox comes in. The goal of the toolbox is to to
-support development of AA frameworks by simplifying the downloading and
-processing of commonly used datasets.
+This is where OCHA AnticiPy comes in, providing a simple interface for downloading and
+processing a range of data relevant for anticipatory action and
+disaster risk reduction in humanitarian response.
 
 Datasets currently supported are:
 
@@ -22,10 +22,10 @@ Datasets currently supported are:
 - USGS NDVI (normalized difference vegetation index)
 
 At the `Centre for Humanitarian Data <https://centre.humdata.org/>`_,
-we've now used AA Toolbox to develop
-some of our own AA frameworks. See the links below for more info:
-
-* `Drought in Burkina Faso <https://github.com/OCHA-DAP/pa-aa-bfa-drought>`_
-* `Cholera in DRC <https://github.com/OCHA-DAP/pa-aa-cod-infectious-disease>`_
-  (this repository is private, please `contact us <mailto:centrehumdata@un.org>`_
-  if you would like more information)
+we've now used OCHA Anticipy to develop
+some of our own
+`anticipatory action
+<https://www.unocha.org/our-work/humanitarian-financing/anticipatory-action>`_
+frameworks, such as for
+`drought in Burkina Faso
+<https://github.com/OCHA-DAP/pa-aa-bfa-drought>`_.
diff --git a/docs/source/quickstart.rst b/docs/source/quickstart.rst
index a5c8e923..d0d5ad93 100644
--- a/docs/source/quickstart.rst
+++ b/docs/source/quickstart.rst
@@ -9,22 +9,22 @@ There are two main steps to get up and running:
 Setup environment variables
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-AA Toolbox downloads data to the directory referenced by the
-environment variable `AA_DATA_DIR`. Before beginning, please make
+OCHA AnticiPy downloads data to the directory referenced by the
+environment variable `OAP_DATA_DIR`. Before beginning, please make
 sure that this environment variable is defined and points to where you would
 like the data to go.
 
-Install AA Toolbox
+Install OCHA AnticiPy
 ^^^^^^^^^^^^^^^^^^
 
-AA Toolbox supports Python 3.7 and newer. It can be installed in your Python
+OCHA AnticiPy supports Python 3.7 and newer. It can be installed in your Python
 environment using the following command:
 
 .. code-block:: sh
 
-    $ pip install aa-toolbox
+    $ pip install ocha-anticipy
 
-AA Toolbox should now be installed.
+OCHA AnticiPy should now be installed.
 
 Usage Examples
 --------------
@@ -40,7 +40,7 @@ and load the provinces as a GeoDataFrame.
 
 .. code-block:: python
 
-    from aatoolbox import create_country_config, CodAB
+    from ochanticipy import create_country_config, CodAB
 
     nepal_config = create_country_config(iso3='npl')
 
@@ -51,19 +51,19 @@ and load the provinces as a GeoDataFrame.
 
 What does this code do?
 
-1.  First we import the :func:`~aatoolbox.create_country_config` function and
-    the :class:`~aatoolbox.CodAB` class. The function will be used to setup
+1.  First we import the :func:`~ochanticipy.create_country_config` function and
+    the :class:`~ochanticipy.CodAB` class. The function will be used to setup
     the country of interest, and an instance of the CodAB class will
     be used to download the data.
 2.  Next we create a country configuration object specific to Nepal
     by providing as input its ISO3 (which is 'npl'), using the
-    :func:`~aatoolbox.create_country_config` function.
-3.  We then create an instance of the :class:`~aatoolbox.CodAB` class
+    :func:`~ochanticipy.create_country_config` function.
+3.  We then create an instance of the :class:`~ochanticipy.CodAB` class
     using the Nepal-specific country configuration instance.
 4.  From the CodAB instance, we are then able to call `download()`, which
     downloads the COD
     administrative boundaries for Nepal. These are placed in the directory where
-    the environment variable named ``AA_DATA_DIR`` points to.
+    the environment variable named ``OAP_DATA_DIR`` points to.
 5.  Finally, we can use the CodAB instance to load a specific administrative
     boundary level. In this case we are loading level 1 which corresponds
     to provinces in Nepal.
diff --git a/docs/source/utilities.rst b/docs/source/utilities.rst
index ad2132a9..925a29fc 100644
--- a/docs/source/utilities.rst
+++ b/docs/source/utilities.rst
@@ -1,7 +1,7 @@
 Utilities
 =========
 
-AA Toolbox provides the following utilities:
+OCHA AnticiPy provides the following utilities:
 
 .. toctree::
    :maxdepth: 1
diff --git a/docs/source/utilities/raster.rst b/docs/source/utilities/raster.rst
index 72271a87..6fcead19 100644
--- a/docs/source/utilities/raster.rst
+++ b/docs/source/utilities/raster.rst
@@ -20,9 +20,9 @@ Accessor
 ^^^^^^^^
 
 To make the extension accessible, you only need to import
-``aatoolbox`` directly. Then, extension methods and properties
-are simply accessed using ``da.aat.method()`` or
-``da.aat.property`` on a data array or dataset.  As a simple
+``ochanticipy`` directly. Then, extension methods and properties
+are simply accessed using ``da.oap.method()`` or
+``da.oap.property`` on a data array or dataset.  As a simple
 example, we can create a data array that has
 incorrect coordinates (ascending latitude and descending
 longitude). Then we can use the extension to invert them to
@@ -32,14 +32,15 @@ the correct ordering.
 
     import xarray
     import numpy
-    import aatoolbox
+
+    import ochanticipy
 
     da = xarray.DataArray(
       numpy.arange(16).reshape(4,4),
       coords={"lat":numpy.array([87, 88, 89, 90]),
               "lon":numpy.array([70, 69, 68, 67])}
     )
-    da_inv = da.aat.invert_coordinates()
+    da_inv = da.oap.invert_coordinates()
 
     # check they have inverted
     da_inv.get_index("lon")
@@ -61,17 +62,17 @@ A full snippet of example code is available below.
 
 .. code-block:: python
 
-    import aatoolbox
+    import ochanticipy
     import datetime
 
     # load the administrative boundaries
-    country_config = aatoolbox.create_country_config(iso3="eth")
-    codab = aatoolbox.CodAB(country_config)
+    country_config = ochanticipy.create_country_config(iso3="eth")
+    codab = ochanticipy.CodAB(country_config)
     codab.download()
     codab_eth = codab.load(admin_level=2)
 
     # get geobounding box for CHIRPS downloading
-    geo_bounding_box = aatoolbox.GeoBoundingBox.from_shape(codab_eth)
+    geo_bounding_box = ochanticipy.GeoBoundingBox.from_shape(codab_eth)
 
     # load CHIRPs data for processing
     start_date = datetime.date(year=2001, month=2, day=1)
@@ -90,7 +91,7 @@ A full snippet of example code is available below.
 
     # compute raster statistics
 
-    chirps_monthly_data.aat.compute_raster_stats(
+    chirps_monthly_data.oap.compute_raster_stats(
       gdf=codab_eth,
       feature_col="ADM2_PCODE"
     )
@@ -103,8 +104,8 @@ a data array when using the raster module. This module
 builds on `rioxarray <https://corteva.github.io/rioxarray>_`
 extensions, and thus methods and attributes accessible
 via ``da.rio.method()``  or ``da.rio.property`` are
-also accessible using ``da.aat.method()`` or
-``da.aat.property``. However, original rioxarray properties
+also accessible using ``da.oap.method()`` or
+``da.oap.property``. However, original rioxarray properties
 should be accessed using ``da.rio.property``.
 
 Let's create a simple data array where we want to specify
@@ -115,7 +116,7 @@ names are not automatically detected.
 
     import xarray
     import numpy
-    import aatoolbox
+    import ochanticipy
 
     da = xarray.DataArray(
         numpy.arange(16).reshape(4,4),
@@ -125,11 +126,11 @@ names are not automatically detected.
 
 We can set the spatial dimensions using
 ``da.rio.set_spatial_dims()`` or call it directly
-from ``da.aat``.
+from ``da.oap``.
 
 .. code-block:: python
 
-  da_new = da.aat.set_spatial_dims(
+  da_new = da.oap.set_spatial_dims(
     x_dim="a",
     y_dim="b"
   )
@@ -143,18 +144,18 @@ accessing the properties.
   da_new.rio.x_dim
   #> 'a'
 
-  da_new.aat.x_dim
+  da_new.oap.x_dim
   #> MissingSpatialDimensionError: x dimension not found.
   #> 'rio.set_spatial_dims()' or using 'rename()' to change
   #> the dimension name to 'x' can address this.
 
-Even though the method was called using ``aat``, the property
+Even though the method was called using ``oap``, the property
 is not accessible through it. Users need to be careful about
-accessing rioxarray properties using the ``aat`` accessor.
+accessing rioxarray properties using the ``oap`` accessor.
 
 For best practice, rioxarray methods and properties should all
 be accessed using ``rio``. These properties are ``rio.x_dim``,
 ``rio.y_dim``, ``rio.shape``, ``rio.width``, ``rio.height``, and
 ``rio.crs``. This module's methods and properties should be
-accessed using the ``aat`` accessor. These properties are
-``aat.t_dim`` and ``aat.longitude_range``.
+accessed using the ``oap`` accessor. These properties are
+``oap.t_dim`` and ``oap.longitude_range``.
diff --git a/pyproject.toml b/pyproject.toml
index 9747b1d6..9b8aa540 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,7 +3,7 @@ requires = ["setuptools>=45", "wheel", "setuptools_scm>=6.2"]
 build-backend = "setuptools.build_meta"
 
 [tool.setuptools_scm]
-write_to = "src/aatoolbox/_version.py"
+write_to = "src/ochanticipy/_version.py"
 local_scheme = "no-local-version"
 version_scheme = "release-branch-semver"
 
diff --git a/requirements/requirements.txt b/requirements/requirements.txt
index f522cd30..cc678114 100644
--- a/requirements/requirements.txt
+++ b/requirements/requirements.txt
@@ -23,7 +23,7 @@ bokeh==2.4.3
 cattrs==22.2.0
     # via requests-cache
 cdsapi==0.5.1
-    # via aa-toolbox (setup.cfg)
+    # via ocha-anticipy (setup.cfg)
 certifi==2022.9.24
     # via
     #   fiona
@@ -35,11 +35,11 @@ cffi==1.15.1
     #   cryptography
     #   eccodes
 cfgrib==0.9.10.3
-    # via aa-toolbox (setup.cfg)
+    # via ocha-anticipy (setup.cfg)
 cftime==1.6.2
     # via
-    #   aa-toolbox (setup.cfg)
     #   netcdf4
+    #   ocha-anticipy (setup.cfg)
 chardet==5.0.0
     # via frictionless
 charset-normalizer==2.1.1
@@ -109,13 +109,13 @@ frictionless==4.40.8
 fsspec==2022.11.0
     # via dask
 geopandas==0.12.1
-    # via aa-toolbox (setup.cfg)
+    # via ocha-anticipy (setup.cfg)
 hdx-python-api==5.9.2
-    # via aa-toolbox (setup.cfg)
+    # via ocha-anticipy (setup.cfg)
 hdx-python-country==3.4.3
     # via
-    #   aa-toolbox (setup.cfg)
     #   hdx-python-api
+    #   ocha-anticipy (setup.cfg)
 hdx-python-utilities==3.4.8
     # via hdx-python-country
 heapdict==1.0.1
@@ -165,18 +165,18 @@ munch==2.5.0
 ndg-httpsclient==0.5.1
     # via hdx-python-api
 netcdf4==1.6.2
-    # via aa-toolbox (setup.cfg)
+    # via ocha-anticipy (setup.cfg)
 num2words==0.5.12
     # via quantulum3
 numpy==1.23.5
     # via
-    #   aa-toolbox (setup.cfg)
     #   bokeh
     #   cfgrib
     #   cftime
     #   dask
     #   eccodes
     #   netcdf4
+    #   ocha-anticipy (setup.cfg)
     #   pandas
     #   rasterio
     #   snuggs
@@ -218,8 +218,8 @@ pycparser==2.21
     # via cffi
 pydantic==1.10.2
     # via
-    #   aa-toolbox (setup.cfg)
     #   inflect
+    #   ocha-anticipy (setup.cfg)
 pygments==2.13.0
     # via rich
 pyopenssl==22.1.0
@@ -240,10 +240,10 @@ pyrsistent==0.19.2
     # via jsonschema
 python-dateutil==2.8.2
     # via
-    #   aa-toolbox (setup.cfg)
     #   frictionless
     #   hdx-python-utilities
     #   libhxl
+    #   ocha-anticipy (setup.cfg)
     #   pandas
 python-io-wrapper==0.3.1
     # via libhxl
@@ -255,27 +255,27 @@ pytz==2022.6
     # via pandas
 pyyaml==6.0
     # via
-    #   aa-toolbox (setup.cfg)
     #   bokeh
     #   dask
     #   distributed
     #   frictionless
+    #   ocha-anticipy (setup.cfg)
     #   tableschema-to-template
 quantulum3==0.7.11
     # via hdx-python-api
 rasterio==1.3.4
     # via
-    #   aa-toolbox (setup.cfg)
+    #   ocha-anticipy (setup.cfg)
     #   rioxarray
 ratelimit==2.2.1
     # via hdx-python-utilities
 requests==2.28.1
     # via
-    #   aa-toolbox (setup.cfg)
     #   cdsapi
     #   ckanapi
     #   frictionless
     #   libhxl
+    #   ocha-anticipy (setup.cfg)
     #   requests-cache
     #   requests-file
 requests-cache==0.9.7
@@ -287,7 +287,7 @@ rfc3986==2.0.0
 rich==12.6.0
     # via typer
 rioxarray==0.13.1
-    # via aa-toolbox (setup.cfg)
+    # via ocha-anticipy (setup.cfg)
 ruamel-yaml==0.17.21
     # via hdx-python-utilities
 shapely==1.8.5.post1
@@ -357,10 +357,10 @@ validators==0.20.0
 wheel==0.38.4
     # via libhxl
 wrapt==1.14.1
-    # via aa-toolbox (setup.cfg)
+    # via ocha-anticipy (setup.cfg)
 xarray[parallel]==2022.11.0
     # via
-    #   aa-toolbox (setup.cfg)
+    #   ocha-anticipy (setup.cfg)
     #   rioxarray
 xlrd==2.0.1
     # via hdx-python-utilities
diff --git a/setup.cfg b/setup.cfg
index f045140e..11afe28d 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,22 +1,23 @@
 [metadata]
-name = aa-toolbox
-version = attr: aatoolbox.__version__
-url = https://github.com/OCHA-DAP/pa-aa-toolbox
+name = ocha-anticipy
+version = attr: ochanticipy.__version__
+url = https://github.com/OCHA-DAP/ocha-anticipy
 project_urls =
-    Documentation = https://aa-toolbox.readthedocs.io/en/latest/
-    Changes = https://github.com/OCHA-DAP/pa-aa-toolbox/blob/main/CHANGELOG.rst
-    PyPI Releases = https://pypi.org/project/aa-toolbox/
-    Source Code = https://github.com/OCHA-DAP/pa-aa-toolbox/
-    Issue Tracker = https://github.com/OCHA-DAP/pa-aa-toolbox/issues/
+    Documentation = https://ocha-anticipy.readthedocs.io/en/latest/
+    Changes = https://github.com/OCHA-DAP/ocha-anticipy/blob/main/CHANGELOG.rst
+    PyPI Releases = https://pypi.org/project/ocha-anticipy/
+    Source Code = https://github.com/OCHA-DAP/ocha-anticipy/
+    Issue Tracker = https://github.com/OCHA-DAP/ocha-anticipy/issues/
 license = GPLv3
-author = Centre for Humanitarian Data Predictive Analytics Team
+author = Data Science Team, UN OCHA Centre for Humanitarian Data
 author_email = centrehumdata@un.org
-description = Toolbox for anticipatory action
+description = Access data for anticipating humanitarian risk
 long_description = file: README.md
 long_description_content_type = text/markdown
 classifiers =
-    Development Status :: 3 - Alpha
+    Development Status :: 5 - Production/Stable
     Intended Audience :: Developers
+    Intended Audience :: Science/Research
     License :: OSI Approved :: GNU General Public License v3 (GPLv3)
     Natural Language :: English
     Operating System :: OS Independent
diff --git a/src/aatoolbox/__init__.py b/src/aatoolbox/__init__.py
deleted file mode 100644
index 9f1721c9..00000000
--- a/src/aatoolbox/__init__.py
+++ /dev/null
@@ -1,55 +0,0 @@
-"""aa-toolbox: Toolbox for Anticipatory Action.
-
-The ``aatoolbox`` library contains modules designed to assist with
-downloading and processing the data required for disaster-related
-anticipatory action.
-"""
-from aatoolbox.config.countryconfig import (
-    CountryConfig,
-    create_country_config,
-    create_custom_country_config,
-)
-from aatoolbox.datasources.chirps.chirps import ChirpsDaily, ChirpsMonthly
-from aatoolbox.datasources.codab.codab import CodAB
-from aatoolbox.datasources.fewsnet.fewsnet import FewsNet
-from aatoolbox.datasources.glofas.forecast import (
-    GlofasForecast,
-    GlofasReforecast,
-)
-from aatoolbox.datasources.glofas.reanalysis import GlofasReanalysis
-from aatoolbox.datasources.iri.iri_seasonal_forecast import (
-    IriForecastDominant,
-    IriForecastProb,
-)
-from aatoolbox.datasources.usgs.ndvi_products import (
-    UsgsNdviMedianAnomaly,
-    UsgsNdviPctMedian,
-    UsgsNdviSmoothed,
-    UsgsNdviYearDifference,
-)
-from aatoolbox.utils import raster
-from aatoolbox.utils.geoboundingbox import GeoBoundingBox
-
-from ._version import version as __version__
-
-__all__ = (
-    "CountryConfig",
-    "create_country_config",
-    "create_custom_country_config",
-    "ChirpsDaily",
-    "ChirpsMonthly",
-    "CodAB",
-    "FewsNet",
-    "GlofasReanalysis",
-    "GlofasForecast",
-    "GlofasReforecast",
-    "IriForecastProb",
-    "IriForecastDominant",
-    "UsgsNdviSmoothed",
-    "UsgsNdviPctMedian",
-    "UsgsNdviMedianAnomaly",
-    "UsgsNdviYearDifference",
-    "GeoBoundingBox",
-    "raster",
-    "__version__",
-)
diff --git a/src/ochanticipy/__init__.py b/src/ochanticipy/__init__.py
new file mode 100644
index 00000000..534d5ea2
--- /dev/null
+++ b/src/ochanticipy/__init__.py
@@ -0,0 +1,56 @@
+"""OCHA AnticiPy: Access data for anticipating humanitarian risk.
+
+OCHA AnticiPy is a Python library for simple downloading and processing
+of data related to the anticipation of humanitarian risk,
+from climate observations and forecasts to food insecurity.
+"""
+
+from ochanticipy.config.countryconfig import (
+    CountryConfig,
+    create_country_config,
+    create_custom_country_config,
+)
+from ochanticipy.datasources.chirps.chirps import ChirpsDaily, ChirpsMonthly
+from ochanticipy.datasources.codab.codab import CodAB
+from ochanticipy.datasources.fewsnet.fewsnet import FewsNet
+from ochanticipy.datasources.glofas.forecast import (
+    GlofasForecast,
+    GlofasReforecast,
+)
+from ochanticipy.datasources.glofas.reanalysis import GlofasReanalysis
+from ochanticipy.datasources.iri.iri_seasonal_forecast import (
+    IriForecastDominant,
+    IriForecastProb,
+)
+from ochanticipy.datasources.usgs.ndvi_products import (
+    UsgsNdviMedianAnomaly,
+    UsgsNdviPctMedian,
+    UsgsNdviSmoothed,
+    UsgsNdviYearDifference,
+)
+from ochanticipy.utils import raster
+from ochanticipy.utils.geoboundingbox import GeoBoundingBox
+
+from ._version import version as __version__
+
+__all__ = (
+    "CountryConfig",
+    "create_country_config",
+    "create_custom_country_config",
+    "ChirpsDaily",
+    "ChirpsMonthly",
+    "CodAB",
+    "FewsNet",
+    "GlofasReanalysis",
+    "GlofasForecast",
+    "GlofasReforecast",
+    "IriForecastProb",
+    "IriForecastDominant",
+    "UsgsNdviSmoothed",
+    "UsgsNdviPctMedian",
+    "UsgsNdviMedianAnomaly",
+    "UsgsNdviYearDifference",
+    "GeoBoundingBox",
+    "raster",
+    "__version__",
+)
diff --git a/src/aatoolbox/config/__init__.py b/src/ochanticipy/config/__init__.py
similarity index 100%
rename from src/aatoolbox/config/__init__.py
rename to src/ochanticipy/config/__init__.py
diff --git a/src/aatoolbox/config/countries/bfa.yaml b/src/ochanticipy/config/countries/bfa.yaml
similarity index 100%
rename from src/aatoolbox/config/countries/bfa.yaml
rename to src/ochanticipy/config/countries/bfa.yaml
diff --git a/src/aatoolbox/config/countries/bgd.yaml b/src/ochanticipy/config/countries/bgd.yaml
similarity index 100%
rename from src/aatoolbox/config/countries/bgd.yaml
rename to src/ochanticipy/config/countries/bgd.yaml
diff --git a/src/aatoolbox/config/countries/cod.yaml b/src/ochanticipy/config/countries/cod.yaml
similarity index 100%
rename from src/aatoolbox/config/countries/cod.yaml
rename to src/ochanticipy/config/countries/cod.yaml
diff --git a/src/aatoolbox/config/countries/eth.yaml b/src/ochanticipy/config/countries/eth.yaml
similarity index 100%
rename from src/aatoolbox/config/countries/eth.yaml
rename to src/ochanticipy/config/countries/eth.yaml
diff --git a/src/aatoolbox/config/countries/mwi.yaml b/src/ochanticipy/config/countries/mwi.yaml
similarity index 100%
rename from src/aatoolbox/config/countries/mwi.yaml
rename to src/ochanticipy/config/countries/mwi.yaml
diff --git a/src/aatoolbox/config/countries/npl.yaml b/src/ochanticipy/config/countries/npl.yaml
similarity index 100%
rename from src/aatoolbox/config/countries/npl.yaml
rename to src/ochanticipy/config/countries/npl.yaml
diff --git a/src/aatoolbox/config/countryconfig.py b/src/ochanticipy/config/countryconfig.py
similarity index 99%
rename from src/aatoolbox/config/countryconfig.py
rename to src/ochanticipy/config/countryconfig.py
index 59137a0c..25018a87 100644
--- a/src/aatoolbox/config/countryconfig.py
+++ b/src/ochanticipy/config/countryconfig.py
@@ -4,7 +4,7 @@
 
 from pydantic import BaseModel, root_validator, validator
 
-from aatoolbox.utils.io import parse_yaml
+from ochanticipy.utils.io import parse_yaml
 
 
 class CodABConfig(BaseModel):
diff --git a/src/aatoolbox/config/pathconfig.py b/src/ochanticipy/config/pathconfig.py
similarity index 86%
rename from src/aatoolbox/config/pathconfig.py
rename to src/ochanticipy/config/pathconfig.py
index 0b79fb80..1468a447 100644
--- a/src/aatoolbox/config/pathconfig.py
+++ b/src/ochanticipy/config/pathconfig.py
@@ -4,14 +4,14 @@
 from dataclasses import dataclass
 from pathlib import Path
 
-_BASE_DIR_ENV = "AA_DATA_DIR"
+BASE_DIR_ENV = "OAP_DATA_DIR"
 
 
 @dataclass
 class PathConfig:
     """Global directory parameters."""
 
-    base_dir_env: str = _BASE_DIR_ENV
+    base_dir_env: str = BASE_DIR_ENV
     public: str = "public"
     private: str = "private"
     raw: str = "raw"
diff --git a/src/aatoolbox/datasources/__init__.py b/src/ochanticipy/datasources/__init__.py
similarity index 100%
rename from src/aatoolbox/datasources/__init__.py
rename to src/ochanticipy/datasources/__init__.py
diff --git a/src/aatoolbox/datasources/chirps/__init__.py b/src/ochanticipy/datasources/chirps/__init__.py
similarity index 100%
rename from src/aatoolbox/datasources/chirps/__init__.py
rename to src/ochanticipy/datasources/chirps/__init__.py
diff --git a/src/aatoolbox/datasources/chirps/chirps.py b/src/ochanticipy/datasources/chirps/chirps.py
similarity index 96%
rename from src/aatoolbox/datasources/chirps/chirps.py
rename to src/ochanticipy/datasources/chirps/chirps.py
index 935e8c29..8aa9b6cf 100644
--- a/src/aatoolbox/datasources/chirps/chirps.py
+++ b/src/ochanticipy/datasources/chirps/chirps.py
@@ -13,11 +13,11 @@
 import requests
 import xarray as xr
 
-from aatoolbox.config.countryconfig import CountryConfig
-from aatoolbox.datasources.datasource import DataSource
-from aatoolbox.utils.check_file_existence import check_file_existence
-from aatoolbox.utils.dates import get_date_from_user_input
-from aatoolbox.utils.geoboundingbox import GeoBoundingBox
+from ochanticipy.config.countryconfig import CountryConfig
+from ochanticipy.datasources.datasource import DataSource
+from ochanticipy.utils.check_file_existence import check_file_existence
+from ochanticipy.utils.dates import get_date_from_user_input
+from ochanticipy.utils.geoboundingbox import GeoBoundingBox
 
 logger = logging.getLogger(__name__)
 
@@ -375,8 +375,8 @@ class ChirpsMonthly(_Chirps):
 
     Examples
     --------
-    >>> from aatoolbox import create_country_config, CodAB, GeoBoundingBox
-    >>> from aatoolbox import ChirpsMonthly
+    >>> from ochanticipy import create_country_config, CodAB, GeoBoundingBox
+    >>> from ochanticipy import ChirpsMonthly
     >>> import datetime
     >>>
     >>> country_config = create_country_config(iso3="bfa")
@@ -475,7 +475,7 @@ def _get_url(self, year: str, month: str, day: str) -> str:
     @check_file_existence
     def _process(self, filepath: Path, ds, clobber: bool) -> Path:
         # fix dates
-        ds.aat.correct_calendar(inplace=True)
+        ds.oap.correct_calendar(inplace=True)
         ds = xr.decode_cf(ds)
         if "prcp" in list(ds.keys()):
             ds = ds.rename({"prcp": "precipitation"})
@@ -508,7 +508,7 @@ class ChirpsDaily(_Chirps):
 
     Examples
     --------
-    >>> from aatoolbox import create_country_config, CodAB, GeoBoundingBox,
+    >>> from ochanticipy import create_country_config, CodAB, GeoBoundingBox,
     ... ChirpsDaily
     >>> import datetime
     >>>
@@ -616,7 +616,7 @@ def _process(self, filepath: Path, ds, clobber: bool) -> Path:
                 ds.T.values, calendar="standard", has_year_zero=False
             )
         )
-        ds.aat.correct_calendar(inplace=True)
+        ds.oap.correct_calendar(inplace=True)
         if "prcp" in list(ds.keys()):
             ds = ds.rename({"prcp": "precipitation"})
         xr.Dataset.to_netcdf(ds, path=filepath)
diff --git a/src/aatoolbox/datasources/codab/__init__.py b/src/ochanticipy/datasources/codab/__init__.py
similarity index 100%
rename from src/aatoolbox/datasources/codab/__init__.py
rename to src/ochanticipy/datasources/codab/__init__.py
diff --git a/src/aatoolbox/datasources/codab/codab.py b/src/ochanticipy/datasources/codab/codab.py
similarity index 92%
rename from src/aatoolbox/datasources/codab/codab.py
rename to src/ochanticipy/datasources/codab/codab.py
index 78b2408a..8e08b2bc 100644
--- a/src/aatoolbox/datasources/codab/codab.py
+++ b/src/ochanticipy/datasources/codab/codab.py
@@ -5,10 +5,10 @@
 import geopandas as gpd
 from fiona.errors import DriverError
 
-from aatoolbox.config.countryconfig import CountryConfig
-from aatoolbox.datasources.datasource import DataSource
-from aatoolbox.utils.check_file_existence import check_file_existence
-from aatoolbox.utils.hdx_api import load_dataset_from_hdx
+from ochanticipy.config.countryconfig import CountryConfig
+from ochanticipy.datasources.datasource import DataSource
+from ochanticipy.utils.check_file_existence import check_file_existence
+from ochanticipy.utils.hdx_api import load_dataset_from_hdx
 
 logger = logging.getLogger(__name__)
 
@@ -50,7 +50,7 @@ def download(self, clobber: bool = False) -> Path:
 
         Examples
         --------
-        >>> from aatoolbox import create_country_config, CodAB
+        >>> from ochanticipy import create_country_config, CodAB
         >>> # Download COD administrative boundaries for Nepal
         >>> country_config = create_country_config(iso3="npl")
         >>> codab = CodAB(country_config=country_config)
@@ -93,7 +93,7 @@ def load(self, admin_level: int) -> gpd.GeoDataFrame:  # type: ignore
 
         Examples
         --------
-        >>> from aatoolbox import create_country_config, CodAB
+        >>> from ochanticipy import create_country_config, CodAB
         >>>
         >>> # Retrieve admin 2 boundaries for Nepal
         >>> country_config = create_country_config(iso3="npl")
@@ -136,7 +136,7 @@ def load_custom(self, custom_layer_number: int = 0) -> gpd.GeoDataFrame:
 
         Examples
         --------
-        >>> from aatoolbox import create_country_config, CodAB
+        >>> from ochanticipy import create_country_config, CodAB
         >>>
         >>> # Retrieve district boundaries for Nepal
         >>> country_config = create_country_config(iso3="npl")
diff --git a/src/aatoolbox/datasources/datasource.py b/src/ochanticipy/datasources/datasource.py
similarity index 96%
rename from src/aatoolbox/datasources/datasource.py
rename to src/ochanticipy/datasources/datasource.py
index cf651fd2..5e2d5f4b 100644
--- a/src/aatoolbox/datasources/datasource.py
+++ b/src/ochanticipy/datasources/datasource.py
@@ -1,9 +1,9 @@
-"""Base class for aatoolbox data source."""
+"""Base class for ochanticipy data source."""
 from abc import ABC, abstractmethod
 from pathlib import Path
 
-from aatoolbox.config.countryconfig import CountryConfig
-from aatoolbox.config.pathconfig import PathConfig
+from ochanticipy.config.countryconfig import CountryConfig
+from ochanticipy.config.pathconfig import PathConfig
 
 _GLOBAL_DIR = "glb"
 
diff --git a/src/aatoolbox/datasources/fewsnet/__init__.py b/src/ochanticipy/datasources/fewsnet/__init__.py
similarity index 100%
rename from src/aatoolbox/datasources/fewsnet/__init__.py
rename to src/ochanticipy/datasources/fewsnet/__init__.py
diff --git a/src/aatoolbox/datasources/fewsnet/fewsnet.py b/src/ochanticipy/datasources/fewsnet/fewsnet.py
similarity index 97%
rename from src/aatoolbox/datasources/fewsnet/fewsnet.py
rename to src/ochanticipy/datasources/fewsnet/fewsnet.py
index 491cb943..385f70bb 100644
--- a/src/aatoolbox/datasources/fewsnet/fewsnet.py
+++ b/src/ochanticipy/datasources/fewsnet/fewsnet.py
@@ -18,9 +18,9 @@
 import geopandas as gpd
 from hdx.location.country import Country
 
-from aatoolbox.datasources.datasource import DataSource
-from aatoolbox.utils.check_file_existence import check_file_existence
-from aatoolbox.utils.io import download_url, unzip
+from ochanticipy.datasources.datasource import DataSource
+from ochanticipy.utils.check_file_existence import check_file_existence
+from ochanticipy.utils.io import download_url, unzip
 
 logger = logging.getLogger(__name__)
 _BASE_URL_COUNTRY = (
@@ -114,7 +114,7 @@ def download(  # type: ignore
 
         Examples
         --------
-        >>> from aatoolbox import create_country_config, FewsNet
+        >>> from ochanticipy import create_country_config, FewsNet
         >>> # Download FEWS NET data for ETH published in 2021-06
         >>> country_config = create_country_config(iso3="eth")
         >>> fewsnet = FewsNet(country_config=country_config)
@@ -182,7 +182,7 @@ def load(  # type: ignore
 
         Examples
         --------
-        >>> from aatoolbox import create_country_config, FewsNet
+        >>> from ochanticipy import create_country_config, FewsNet
         >>> # Load FEWS NET data for ETH published in 2021-06 of medium-term
         ... projection period (ML1)
         >>> country_config = create_country_config(iso3="eth")
diff --git a/src/aatoolbox/datasources/glofas/__init__.py b/src/ochanticipy/datasources/glofas/__init__.py
similarity index 100%
rename from src/aatoolbox/datasources/glofas/__init__.py
rename to src/ochanticipy/datasources/glofas/__init__.py
diff --git a/src/aatoolbox/datasources/glofas/forecast.py b/src/ochanticipy/datasources/glofas/forecast.py
similarity index 95%
rename from src/aatoolbox/datasources/glofas/forecast.py
rename to src/ochanticipy/datasources/glofas/forecast.py
index a9f2f439..9b0f3b06 100644
--- a/src/aatoolbox/datasources/glofas/forecast.py
+++ b/src/ochanticipy/datasources/glofas/forecast.py
@@ -7,10 +7,10 @@
 import xarray as xr
 from dateutil import rrule
 
-from aatoolbox.config.countryconfig import CountryConfig
-from aatoolbox.datasources.glofas import glofas
-from aatoolbox.utils.check_file_existence import check_file_existence
-from aatoolbox.utils.geoboundingbox import GeoBoundingBox
+from ochanticipy.config.countryconfig import CountryConfig
+from ochanticipy.datasources.glofas import glofas
+from ochanticipy.utils.check_file_existence import check_file_existence
+from ochanticipy.utils.geoboundingbox import GeoBoundingBox
 
 logger = logging.getLogger(__name__)
 
@@ -132,7 +132,7 @@ class GlofasForecast(_GlofasForecastBase):
     for a lead time of 15 days.
 
     >>> from datetime import date
-    >>> from aatoolbox import create_country_config, CodAB, GeoBoundingBox,
+    >>> from ochanticipy import create_country_config, CodAB, GeoBoundingBox,
     ... GlofasForecast
     >>>
     >>> country_config = create_country_config(iso3="npl")
@@ -221,7 +221,7 @@ class GlofasReforecast(_GlofasForecastBase):
     Download, process and load all available GloFAS reforecast data
     for a lead time of 15 days.
 
-    >>> from aatoolbox import create_country_config, CodAB, GeoBoundingBox,
+    >>> from ochanticipy import create_country_config, CodAB, GeoBoundingBox,
     ... GlofasReforecast
     >>>
     >>> country_config = create_country_config(iso3="npl")
diff --git a/src/aatoolbox/datasources/glofas/glofas.py b/src/ochanticipy/datasources/glofas/glofas.py
similarity index 98%
rename from src/aatoolbox/datasources/glofas/glofas.py
rename to src/ochanticipy/datasources/glofas/glofas.py
index 93210d13..cdb6a9ed 100644
--- a/src/aatoolbox/datasources/glofas/glofas.py
+++ b/src/ochanticipy/datasources/glofas/glofas.py
@@ -12,10 +12,10 @@
 import xarray as xr
 from dateutil import rrule
 
-from aatoolbox.config.countryconfig import CountryConfig
-from aatoolbox.datasources.datasource import DataSource
-from aatoolbox.utils.dates import get_date_from_user_input
-from aatoolbox.utils.geoboundingbox import GeoBoundingBox
+from ochanticipy.config.countryconfig import CountryConfig
+from ochanticipy.datasources.datasource import DataSource
+from ochanticipy.utils.dates import get_date_from_user_input
+from ochanticipy.utils.geoboundingbox import GeoBoundingBox
 
 _MODULE_BASENAME = "glofas"
 _HYDROLOGICAL_MODEL = "lisflood"
diff --git a/src/aatoolbox/datasources/glofas/reanalysis.py b/src/ochanticipy/datasources/glofas/reanalysis.py
similarity index 91%
rename from src/aatoolbox/datasources/glofas/reanalysis.py
rename to src/ochanticipy/datasources/glofas/reanalysis.py
index a4636d4a..240d9306 100644
--- a/src/aatoolbox/datasources/glofas/reanalysis.py
+++ b/src/ochanticipy/datasources/glofas/reanalysis.py
@@ -7,10 +7,10 @@
 import xarray as xr
 from dateutil import rrule
 
-from aatoolbox.config.countryconfig import CountryConfig
-from aatoolbox.datasources.glofas import glofas
-from aatoolbox.utils.check_file_existence import check_file_existence
-from aatoolbox.utils.geoboundingbox import GeoBoundingBox
+from ochanticipy.config.countryconfig import CountryConfig
+from ochanticipy.datasources.glofas import glofas
+from ochanticipy.utils.check_file_existence import check_file_existence
+from ochanticipy.utils.geoboundingbox import GeoBoundingBox
 
 logger = logging.getLogger(__name__)
 
@@ -51,7 +51,7 @@ class GlofasReanalysis(glofas.Glofas):
     until the current date, set to Oct 22, 2022 for this example.
 
     >>> from datetime import date
-    >>> from aatoolbox import create_country_config, CodAB, GeoBoundingBox,
+    >>> from ochanticipy import create_country_config, CodAB, GeoBoundingBox,
     ... GlofasReanalysis
     >>>
     >>> country_config = create_country_config(iso3="bgd")
diff --git a/src/aatoolbox/datasources/iri/__init__.py b/src/ochanticipy/datasources/iri/__init__.py
similarity index 100%
rename from src/aatoolbox/datasources/iri/__init__.py
rename to src/ochanticipy/datasources/iri/__init__.py
diff --git a/src/aatoolbox/datasources/iri/iri_seasonal_forecast.py b/src/ochanticipy/datasources/iri/iri_seasonal_forecast.py
similarity index 95%
rename from src/aatoolbox/datasources/iri/iri_seasonal_forecast.py
rename to src/ochanticipy/datasources/iri/iri_seasonal_forecast.py
index 48893e9c..1d7f3eda 100644
--- a/src/aatoolbox/datasources/iri/iri_seasonal_forecast.py
+++ b/src/ochanticipy/datasources/iri/iri_seasonal_forecast.py
@@ -7,11 +7,11 @@
 import xarray as xr
 from typing_extensions import Literal
 
-import aatoolbox.utils.raster  # noqa: F401
-from aatoolbox.config.countryconfig import CountryConfig
-from aatoolbox.datasources.datasource import DataSource
-from aatoolbox.utils.check_file_existence import check_file_existence
-from aatoolbox.utils.geoboundingbox import GeoBoundingBox
+import ochanticipy.utils.raster  # noqa: F401
+from ochanticipy.config.countryconfig import CountryConfig
+from ochanticipy.datasources.datasource import DataSource
+from ochanticipy.utils.check_file_existence import check_file_existence
+from ochanticipy.utils.geoboundingbox import GeoBoundingBox
 
 logger = logging.getLogger(__name__)
 
@@ -212,8 +212,8 @@ def _download(
     @check_file_existence
     def _process(self, filepath: Path, ds, clobber: bool) -> Path:
         # fix dates
-        ds.aat.set_time_dim(t_dim="F", inplace=True)
-        ds.aat.correct_calendar(inplace=True)
+        ds.oap.set_time_dim(t_dim="F", inplace=True)
+        ds.oap.correct_calendar(inplace=True)
         ds = xr.decode_cf(ds)
 
         # IRI accepts -180 to 180 longitudes and 0 to 360
@@ -242,7 +242,7 @@ class IriForecastProb(_IriForecast):
 
     Examples
     --------
-    >>> from aatoolbox import create_country_config, \
+    >>> from ochanticipy import create_country_config, \
     ...     GeoBoundingBox, IriForecastProb
     >>> country_config = create_country_config(iso3="bfa")
     >>> geo_bounding_box = GeoBoundingBox(lat_max=13.0,
@@ -284,7 +284,7 @@ class IriForecastDominant(_IriForecast):
 
     Examples
     --------
-    >>> from aatoolbox import create_country_config, \
+    >>> from ochanticipy import create_country_config, \
     ...     GeoBoundingBox, IriForecastDominant
     >>> country_config = create_country_config(iso3="bfa")
     >>> geo_bounding_box = GeoBoundingBox(lat_max=13.0,
diff --git a/src/aatoolbox/datasources/usgs/__init__.py b/src/ochanticipy/datasources/usgs/__init__.py
similarity index 100%
rename from src/aatoolbox/datasources/usgs/__init__.py
rename to src/ochanticipy/datasources/usgs/__init__.py
diff --git a/src/aatoolbox/datasources/usgs/ndvi_base.py b/src/ochanticipy/datasources/usgs/ndvi_base.py
similarity index 97%
rename from src/aatoolbox/datasources/usgs/ndvi_base.py
rename to src/ochanticipy/datasources/usgs/ndvi_base.py
index 059bb201..740e9cce 100644
--- a/src/aatoolbox/datasources/usgs/ndvi_base.py
+++ b/src/ochanticipy/datasources/usgs/ndvi_base.py
@@ -30,10 +30,10 @@
 import xarray as xr
 from rasterio.errors import RasterioIOError
 
-import aatoolbox.utils.raster  # noqa: F401
-from aatoolbox.config.countryconfig import CountryConfig
-from aatoolbox.datasources.datasource import DataSource
-from aatoolbox.utils.dates import (
+import ochanticipy.utils.raster  # noqa: F401
+from ochanticipy.config.countryconfig import CountryConfig
+from ochanticipy.datasources.datasource import DataSource
+from ochanticipy.utils.dates import (
     compare_dekads_gt,
     compare_dekads_lt,
     dekad_to_date,
@@ -150,7 +150,7 @@ def download(self, clobber: bool = False) -> Path:
 
         Examples
         --------
-        >>> from aatoolbox import create_country_config, \
+        >>> from ochanticipy import create_country_config, \
         ...  CodAB, UsgsNdviSmoothed
         >>>
         >>> # Retrieve admin 2 boundaries for Burkina Faso
@@ -184,7 +184,7 @@ def process(  # type: ignore
         NDVI data is clipped to the provided
         ``geometries``, usually a geopandas
         dataframes ``geometry`` feature. ``kwargs``
-        are passed on to ``aat.computer_raster_stats()``.
+        are passed on to ``oap.computer_raster_stats()``.
         The ``feature_col`` is used to define
         the unique processed file.
 
@@ -200,10 +200,10 @@ def process(  # type: ignore
             GeoDataFrame with row per area for stats computation.
             If ``pd.DataFrame`` is passed, geometry column must
             have the name ``geometry``. Passed to
-            ``aat.compute_raster_stats()``.
+            ``oap.compute_raster_stats()``.
         feature_col : str
             Column in ``gdf`` to use as row/feature identifier.
-            and dates. Passed to ``aat.compute_raster_stats()``.
+            and dates. Passed to ``oap.compute_raster_stats()``.
             The string is also used as a suffix to the
             processed file path for unique identication of
             analyses done on different files and columns.
@@ -218,7 +218,7 @@ def process(  # type: ignore
             value error will be raised.
         **kwargs
             Additional keyword arguments passed to
-            ``aat.computer_raster_stats()``.
+            ``oap.computer_raster_stats()``.
 
         Returns
         -------
@@ -227,7 +227,7 @@ def process(  # type: ignore
 
         Examples
         --------
-        >>> from aatoolbox import create_country_config, \
+        >>> from ochanticipy import create_country_config, \
         ...  CodAB, UsgsNdviSmoothed
         >>>
         >>> # Retrieve admin 2 boundaries for Burkina Faso
@@ -321,7 +321,7 @@ def load(self, feature_col: str) -> pd.DataFrame:  # type: ignore
 
         Examples
         --------
-        >>> from aatoolbox import create_country_config, \
+        >>> from ochanticipy import create_country_config, \
         ...  CodAB, UsgsNdviSmoothed
         >>>
         >>> # Retrieve admin 2 boundaries for Burkina Faso
@@ -588,7 +588,7 @@ def _process(
         data = [df_already_processed]
         for process_date in dates_to_process:
             da = self.load_raster(process_date)
-            stats = da.aat.compute_raster_stats(
+            stats = da.oap.compute_raster_stats(
                 gdf=gdf,
                 feature_col=feature_col,
                 stats_list=stats_list,
diff --git a/src/aatoolbox/datasources/usgs/ndvi_products.py b/src/ochanticipy/datasources/usgs/ndvi_products.py
similarity index 96%
rename from src/aatoolbox/datasources/usgs/ndvi_products.py
rename to src/ochanticipy/datasources/usgs/ndvi_products.py
index 18d2f221..96c8ce5b 100644
--- a/src/aatoolbox/datasources/usgs/ndvi_products.py
+++ b/src/ochanticipy/datasources/usgs/ndvi_products.py
@@ -13,8 +13,8 @@
 from datetime import date
 from typing import Tuple, Union
 
-from aatoolbox.config.countryconfig import CountryConfig
-from aatoolbox.datasources.usgs.ndvi_base import _UsgsNdvi
+from ochanticipy.config.countryconfig import CountryConfig
+from ochanticipy.datasources.usgs.ndvi_base import _UsgsNdvi
 
 logger = logging.getLogger(__name__)
 
@@ -49,7 +49,7 @@ class UsgsNdviSmoothed(_UsgsNdvi):
 
     Examples
     --------
-    >>> from aatoolbox import create_country_config, \
+    >>> from ochanticipy import create_country_config, \
     ...  CodAB, UsgsNdviSmoothed
     >>>
     >>> # Retrieve admin 2 boundaries for Burkina Faso
@@ -116,7 +116,7 @@ class UsgsNdviPctMedian(_UsgsNdvi):
 
     Examples
     --------
-    >>> from aatoolbox import create_country_config, \
+    >>> from ochanticipy import create_country_config, \
     ...  CodAB, UsgsNdviPctMedian
     >>>
     >>> # Retrieve admin 2 boundaries for Burkina Faso
@@ -186,7 +186,7 @@ class UsgsNdviMedianAnomaly(_UsgsNdvi):
 
     Examples
     --------
-    >>> from aatoolbox import create_country_config, \
+    >>> from ochanticipy import create_country_config, \
     ...  CodAB, UsgsNdviMedianAnomaly
     >>>
     >>> # Retrieve admin 2 boundaries for Burkina Faso
@@ -256,7 +256,7 @@ class UsgsNdviYearDifference(_UsgsNdvi):
 
     Examples
     --------
-    >>> from aatoolbox import create_country_config, \
+    >>> from ochanticipy import create_country_config, \
     ...  CodAB, UsgsNdviDifference
     >>>
     >>> # Retrieve admin 2 boundaries for Burkina Faso
diff --git a/src/aatoolbox/utils/__init__.py b/src/ochanticipy/utils/__init__.py
similarity index 100%
rename from src/aatoolbox/utils/__init__.py
rename to src/ochanticipy/utils/__init__.py
diff --git a/src/aatoolbox/utils/check_file_existence.py b/src/ochanticipy/utils/check_file_existence.py
similarity index 97%
rename from src/aatoolbox/utils/check_file_existence.py
rename to src/ochanticipy/utils/check_file_existence.py
index f2832c19..bef00355 100644
--- a/src/aatoolbox/utils/check_file_existence.py
+++ b/src/ochanticipy/utils/check_file_existence.py
@@ -4,7 +4,7 @@
 
 import wrapt
 
-from aatoolbox.datasources.datasource import DataSource
+from ochanticipy.datasources.datasource import DataSource
 
 logger = logging.getLogger(__name__)
 
diff --git a/src/aatoolbox/utils/dates.py b/src/ochanticipy/utils/dates.py
similarity index 100%
rename from src/aatoolbox/utils/dates.py
rename to src/ochanticipy/utils/dates.py
diff --git a/src/aatoolbox/utils/geoboundingbox.py b/src/ochanticipy/utils/geoboundingbox.py
similarity index 100%
rename from src/aatoolbox/utils/geoboundingbox.py
rename to src/ochanticipy/utils/geoboundingbox.py
diff --git a/src/aatoolbox/utils/hdx_api.py b/src/ochanticipy/utils/hdx_api.py
similarity index 98%
rename from src/aatoolbox/utils/hdx_api.py
rename to src/ochanticipy/utils/hdx_api.py
index 43aa145d..efc6e7a9 100644
--- a/src/aatoolbox/utils/hdx_api.py
+++ b/src/ochanticipy/utils/hdx_api.py
@@ -7,7 +7,7 @@
 from hdx.api.configuration import Configuration
 from hdx.data.dataset import Dataset
 
-USER_AGENT = "aa-toolbox"
+USER_AGENT = "ocha-anticipy"
 
 logger = logging.getLogger(__name__)
 Configuration.create(
diff --git a/src/aatoolbox/utils/io.py b/src/ochanticipy/utils/io.py
similarity index 100%
rename from src/aatoolbox/utils/io.py
rename to src/ochanticipy/utils/io.py
diff --git a/src/aatoolbox/utils/raster.py b/src/ochanticipy/utils/raster.py
similarity index 90%
rename from src/aatoolbox/utils/raster.py
rename to src/ochanticipy/utils/raster.py
index d5cbe986..dd48786d 100644
--- a/src/aatoolbox/utils/raster.py
+++ b/src/ochanticipy/utils/raster.py
@@ -2,12 +2,12 @@
 Utilities to manipulate and analyze raster data.
 
 The raster module provides accessor utilities for xarray
-data arrays and datasets accessible using the `aat` accessor.
+data arrays and datasets accessible using the `oap` accessor.
 These functions are available just by importing directly
-the library using ``import aatoolbox``.
+the library using ``import ochanticipy``.
 
 Since rioxarray already extends xarray, this
-modules extensions inherit from the RasterArray and
+module's extensions inherit from the RasterArray and
 RasterDataset extensions respectively. This ensures
 cleaner code in the module as ``rio`` methods are
 available immediately, but also means a couple of
@@ -16,7 +16,7 @@
 The ``xarray.DataArray`` and ``xarray.Dataset``
 extensions here inherit from rioxarray base classes.
 Thus, methods that are identical for both objects
-are defined in a mixin class ``AatRasterMixin`` which
+are defined in a mixin class ``OapRasterMixin`` which
 can be inherited by the two respective extensions.
 """
 
@@ -36,8 +36,8 @@
 logger = logging.getLogger(__name__)
 
 
-class AatRasterMixin:
-    """AA toolbox mixin base class."""
+class OapRasterMixin:
+    """OCHA AnticiPy mixin base class."""
 
     # setting attributes to avoid mypy error, from SO
     # https://stackoverflow.com/questions/53120262/mypy-how-to-
@@ -78,7 +78,7 @@ def t_dim(self):
         """str: The dimension for time."""
         if self._t_dim is None:
             raise DimensionError(
-                "Time dimension not found. 'aat.set_time_dim()' or "
+                "Time dimension not found. 'oap.set_time_dim()' or "
                 "using 'rename()' to change the dimension name to "
                 f"'t' can address this.{_get_data_var_message(self._obj)}"
             )
@@ -94,7 +94,7 @@ def longitude_range(self):
         """
         if self._longitude_range is None:
             if self._x_dim is not None:
-                data_obj = self._get_obj_aat(inplace=False)
+                data_obj = self._get_obj_oap(inplace=False)
                 lon_max = data_obj.indexes[self.x_dim].max()
                 if lon_max > 180:
                     self._longitude_range = "360"
@@ -103,7 +103,7 @@ def longitude_range(self):
             else:
                 raise DimensionError(
                     "Longitude range not set due to missing 'x_dim'."
-                    "Use 'aat.set_spatial_dims()' to set the name of "
+                    "Use 'oap.set_spatial_dims()' to set the name of "
                     f"the x dimension. {_get_data_var_message(self._obj)}"
                 )
         return self._longitude_range
@@ -136,17 +136,17 @@ def set_time_dim(
         ...          "lon":numpy.array([5, 120, 199, 360]),
         ...          "F":numpy.array([10,11,12,13])}
         ... )
-        >>> da.aat.set_time_dim(t_dim="F", inplace=True)
-        >>> da.aat.t_dim
+        >>> da.oap.set_time_dim(t_dim="F", inplace=True)
+        >>> da.oap.t_dim
         'F'
         """
-        data_obj = self._get_obj_aat(inplace=inplace)
+        data_obj = self._get_obj_oap(inplace=inplace)
         if t_dim not in data_obj.dims:
             raise DimensionError(
                 "Time dimension ({t_dim}) not found."
                 f"{_get_data_var_message(data_obj)}"
             )
-        data_obj.aat._t_dim = t_dim
+        data_obj.oap._t_dim = t_dim
         return data_obj if not inplace else None
 
     def correct_calendar(
@@ -191,11 +191,11 @@ def correct_calendar(
         ...          "t":numpy.array([10,11,12,13])}
         ... )
         >>> da["t"].attrs["units"] = "months since 1960-01-01"
-        >>> da_crct = da.aat.correct_calendar()
+        >>> da_crct = da.oap.correct_calendar()
         >>> da_crct["t"].attrs["calendar"]
         '360_day'
         """
-        data_obj = self._get_obj_aat(inplace=inplace)
+        data_obj = self._get_obj_oap(inplace=inplace)
         if (
             "calendar" in data_obj[self.t_dim].attrs.keys()
             and data_obj[self.t_dim].attrs["calendar"] == "360"
@@ -256,13 +256,13 @@ def invert_coordinates(
         ...  coords={"lat":numpy.array([87, 88, 89, 90]),
         ...          "lon":numpy.array([70, 69, 68, 67])}
         ... )
-        >>> da.aat.invert_coordinates(inplace=True)
+        >>> da.oap.invert_coordinates(inplace=True)
         >>> da.get_index("lon")
         Int64Index([67, 68, 69, 70], dtype='int64', name='lon')
         >>> da.get_index("lat")
         Int64Index([90, 89, 88, 87], dtype='int64', name='lat')
         """
-        data_obj = self._get_obj_aat(inplace=inplace)
+        data_obj = self._get_obj_oap(inplace=inplace)
         lon_inv, lat_inv = self._check_coords_inverted()
 
         if lon_inv:
@@ -288,10 +288,10 @@ def _check_coords_inverted(self):
         ...  coords={"lat":numpy.array([90, 89, 88, 87]),
         ...          "lon":numpy.array([70, 69, 68, 67])}
         ... )
-        >>> da.aat._check_coords_inverted()
+        >>> da.oap._check_coords_inverted()
         (True, False)
         """
-        data_obj = self._get_obj_aat(inplace=False)
+        data_obj = self._get_obj_oap(inplace=False)
         lat = data_obj.get_index(self.y_dim)
         lon = data_obj.get_index(self.x_dim)
         return lon[0] > lon[-1], lat[0] < lat[-1]
@@ -344,15 +344,15 @@ def change_longitude_range(
         ...     "time": pandas.date_range("2014-09-06", periods=3)
         ...   }
         ... )
-        >>> ds_inv = ds.aat.change_longitude_range()
+        >>> ds_inv = ds.oap.change_longitude_range()
         >>> ds_inv.get_index("lon")
         Int64Index([-161, 0, 5, 120], dtype='int64', name='lon')
         >>> # invert coordinates back to original, in place
-        >>> ds_inv.aat.change_longitude_range(to_180_range=False, inplace=True)
+        >>> ds_inv.oap.change_longitude_range(to_180_range=False, inplace=True)
         >>> ds_inv.get_index("lon")
         Int64Index([0, 5, 120, 199], dtype='int64', name='lon')
         """
-        data_obj = self._get_obj_aat(inplace=inplace)
+        data_obj = self._get_obj_oap(inplace=inplace)
 
         if to_180_range and self.longitude_range == "360":
             logger.info("Converting longitude from 0 360 to -180 to 180.")
@@ -360,20 +360,20 @@ def change_longitude_range(
             data_obj[self.x_dim] = np.sort(
                 ((data_obj[self.x_dim] + 180) % 360) - 180
             )
-            data_obj.aat._longitude_range = "180"
+            data_obj.oap._longitude_range = "180"
 
         elif not to_180_range and self.longitude_range == "180":
             logger.info("Converting longitude from -180 to 180 to 0 to 360.")
 
             data_obj[self.x_dim] = np.sort(data_obj[self.x_dim] % 360)
-            data_obj.aat._longitude_range = "360"
+            data_obj.oap._longitude_range = "360"
 
         else:
             logger.info("Coordinates already in required range.")
 
         return data_obj if not inplace else None
 
-    def _get_obj_aat(self, inplace: bool) -> Union[xr.DataArray, xr.Dataset]:
+    def _get_obj_oap(self, inplace: bool) -> Union[xr.DataArray, xr.Dataset]:
         """
         Get object to modify.
 
@@ -403,15 +403,15 @@ def _get_obj_aat(self, inplace: bool) -> Union[xr.DataArray, xr.Dataset]:
         obj_copy.rio._width = self._width
         obj_copy.rio._height = self._height
         obj_copy.rio._crs = self._crs
-        obj_copy.aat._t_dim = self._t_dim
-        obj_copy.aat._longitude_range = self._longitude_range
+        obj_copy.oap._t_dim = self._t_dim
+        obj_copy.oap._longitude_range = self._longitude_range
 
         return obj_copy
 
 
-@xr.register_dataarray_accessor("aat")
-class AatRasterArray(AatRasterMixin, RasterArray):
-    """AA toolbox extension for xarray.DataArray."""
+@xr.register_dataarray_accessor("oap")
+class OapRasterArray(OapRasterMixin, RasterArray):
+    """OCHA AnticiPy extension for xarray.DataArray."""
 
     def __init__(self, xarray_object):
         super().__init__(xarray_object)
@@ -477,7 +477,7 @@ def compute_raster_stats(
         ...     coords={"y": [1.5, 0.5], "x": [0.5, 1.5, 2.5]},
         ... ).rio.write_crs("EPSG:4326")
         >>>
-        >>> da.aat.compute_raster_stats(
+        >>> da.oap.compute_raster_stats(
         ...     gdf=gdf,
         ...     feature_col="name"
         ... ) # doctest: +SKIP
@@ -488,7 +488,7 @@ def compute_raster_stats(
         if self._obj.rio.crs is None:
             raise MissingCRS("No CRS found, set CRS before computation.")
 
-        data_obj = self._get_obj_aat(inplace=False)
+        data_obj = self._get_obj_oap(inplace=False)
         df_list = []
 
         if stats_list is None:
@@ -564,9 +564,9 @@ def compute_raster_stats(
         return df_zonal_stats
 
 
-@xr.register_dataset_accessor("aat")
-class AatRasterDataset(AatRasterMixin, RasterDataset):
-    """AA toolbox extension for xarray.Dataset."""
+@xr.register_dataset_accessor("oap")
+class OapRasterDataset(OapRasterMixin, RasterDataset):
+    """OCHA AnticiPy extension for xarray.Dataset."""
 
     def __init__(self, xarray_object):
         super().__init__(xarray_object)
@@ -576,10 +576,10 @@ def get_raster_array(self, var_name: str) -> xr.DataArray:
 
         Accessing a component xarray.DataArray using the
         non-coordinate variable name loses and dimensions set
-        through ``rio`` or ``aat``. This includes ``x_dim``,
+        through ``rio`` or ``oap``. This includes ``x_dim``,
         ``y_dim``, and ``t_dim`` that have to be specifically
         set using ``rio.set_spatial_dims()`` or
-        ``aat.set_time_dim()`` respectively. For any dataset
+        ``oap.set_time_dim()`` respectively. For any dataset
         ``ds``, ``ds.get_raster_array("var")`` will retrieve
         the data array without losing the dimensions. Using
         ``ds["var"]`` will lose the dimensions.
@@ -611,16 +611,16 @@ def get_raster_array(self, var_name: str) -> xr.DataArray:
         ...     "F": pd.date_range("2014-09-06", periods=3)
         ...   }
         ... )
-        >>> ds.aat.set_time_dim("F", inplace=True)
-        >>> da = ds.aat.get_raster_array("temperature")
-        >>> da.aat.t_dim
+        >>> ds.oap.set_time_dim("F", inplace=True)
+        >>> da = ds.oap.get_raster_array("temperature")
+        >>> da.oap.t_dim
         'F'
         >>> # directly accessing array loses set dimensions
-        >>> ds['temperature'].aat.t_dim # doctest: +NORMALIZE_WHITESPACE
+        >>> ds['temperature'].oap.t_dim # doctest: +NORMALIZE_WHITESPACE
         Traceback (most recent call last):
             ...
         rioxarray.exceptions.DimensionError: Time dimension not found.
-            'aat.set_time_dim()' or using 'rename()' to change the
+            'oap.set_time_dim()' or using 'rename()' to change the
             dimension name to 't' can address this.
         Data variable: temperature
         """
@@ -636,7 +636,7 @@ def get_raster_array(self, var_name: str) -> xr.DataArray:
 
         # raster module attributes
         if self._t_dim is not None:
-            obj.aat.set_time_dim(self._t_dim, inplace=True)
+            obj.oap.set_time_dim(self._t_dim, inplace=True)
 
         return obj
 
@@ -657,7 +657,7 @@ def compute_raster_stats(
 
         kwargs : Any
             Keyword arguments passed to the array method
-            :meth:`~AatRasterArray.compute_raster_stats`
+            :meth:`~OapRasterArray.compute_raster_stats`
 
         Returns
         -------
@@ -687,7 +687,7 @@ def compute_raster_stats(
         ...     coords={"y": [1.5, 0.5], "x": [0.5, 1.5, 2.5]},
         ... ).rio.write_crs("EPSG:4326").to_dataset(name="data")
         >>>
-        >>> ds.aat.compute_raster_stats(
+        >>> ds.oap.compute_raster_stats(
         ...    var_names=["data"],
         ...    gdf=gdf,
         ...    feature_col="name"
@@ -702,7 +702,7 @@ def compute_raster_stats(
             var_names = [var_names]
 
         stats = [
-            self._obj[var].aat.compute_raster_stats(**kwargs)
+            self._obj[var].oap.compute_raster_stats(**kwargs)
             for var in var_names
         ]
         return stats
diff --git a/tox.ini b/tox.ini
index 7b2a7cb2..f0c804a4 100644
--- a/tox.ini
+++ b/tox.ini
@@ -13,7 +13,7 @@ recreate = true
 deps = -r requirements/tests.in
 commands =
     pytest \
-    --cov=aatoolbox \
+    --cov=ochanticipy \
     --no-cov-on-fail \
     --junitxml=.tox/test-results.xml \
     --cov-report=xml \


Test patch:
diff --git a/tests/datasources/conftest.py b/tests/datasources/conftest.py
index 945dec6e..79ca1ae1 100644
--- a/tests/datasources/conftest.py
+++ b/tests/datasources/conftest.py
@@ -1,7 +1,8 @@
 """Fixtures for all pipeline-related tests."""
 import pytest
 
-from aatoolbox import GeoBoundingBox, create_custom_country_config
+from ochanticipy import GeoBoundingBox, create_custom_country_config
+from ochanticipy.config.pathconfig import BASE_DIR_ENV
 
 CONFIG_FILE = "tests/datasources/fake_config.yaml"
 ISO3 = "abc"
@@ -10,13 +11,13 @@
 
 @pytest.fixture(autouse=True)
 def mock_aa_data_dir(tmp_path_factory, mocker):
-    """Mock out the AA_DATA_DIR environment variable."""
+    """Mock out the base directory environment variable."""
     mock_aa_data_dir_path = tmp_path_factory.mktemp(
         basename="test_aa_data_dir"
     )
     mocker.patch.dict(
-        "aatoolbox.config.pathconfig.os.environ",
-        {"AA_DATA_DIR": str(mock_aa_data_dir_path)},
+        "ochanticipy.config.pathconfig.os.environ",
+        {BASE_DIR_ENV: str(mock_aa_data_dir_path)},
     )
     return mock_aa_data_dir_path
 
diff --git a/tests/datasources/test_chirps.py b/tests/datasources/test_chirps.py
index ca49fab0..a3277f31 100644
--- a/tests/datasources/test_chirps.py
+++ b/tests/datasources/test_chirps.py
@@ -9,7 +9,7 @@
 import xarray as xr
 from xarray.coding.cftimeindex import CFTimeIndex
 
-from aatoolbox import ChirpsDaily, ChirpsMonthly, GeoBoundingBox
+from ochanticipy import ChirpsDaily, ChirpsMonthly, GeoBoundingBox
 
 DATASOURCE_BASE_DIR = "chirps"
 
@@ -39,7 +39,7 @@ def mock_chirps(mocker, mock_country_config):
 
     mocker.patch(
         (
-            "aatoolbox.datasources.chirps.chirps.ChirpsDaily"
+            "ochanticipy.datasources.chirps.chirps.ChirpsDaily"
             "._get_last_available_date"
         ),
         return_value=CURRENT_DATE,
@@ -47,7 +47,7 @@ def mock_chirps(mocker, mock_country_config):
 
     mocker.patch(
         (
-            "aatoolbox.datasources.chirps.chirps.ChirpsMonthly"
+            "ochanticipy.datasources.chirps.chirps.ChirpsMonthly"
             "._get_last_available_date"
         ),
         return_value=CURRENT_DATE,
@@ -84,7 +84,7 @@ def mock_xr_open_multiple_dataset(mocker):
     """Mock GeoPandas file reading function."""
     ds = xr.Dataset()
     return mocker.patch(
-        "aatoolbox.datasources.chirps.chirps.xr.open_mfdataset",
+        "ochanticipy.datasources.chirps.chirps.xr.open_mfdataset",
         return_value=ds,
     )
 
@@ -93,7 +93,7 @@ def mock_xr_open_multiple_dataset(mocker):
 def mock_dataset_to_netcdf(mocker):
     """Mock GeoPandas file writing function."""
     return mocker.patch(
-        "aatoolbox.datasources.chirps.chirps.xr.Dataset.to_netcdf",
+        "ochanticipy.datasources.chirps.chirps.xr.Dataset.to_netcdf",
     )
 
 
@@ -101,7 +101,7 @@ def mock_dataset_to_netcdf(mocker):
 def mock_download(mocker, mock_chirps):
     """Create mock for download method."""
     download_mock = mocker.patch(
-        "aatoolbox.datasources.chirps.chirps._Chirps._download"
+        "ochanticipy.datasources.chirps.chirps._Chirps._download"
     )
 
     def _mock_download(
@@ -125,7 +125,7 @@ def test_valid_arguments_class(mocker, mock_country_config):
     """Test for resolution and wrong dates in initialisation class."""
     mocker.patch(
         (
-            "aatoolbox.datasources.chirps.chirps.ChirpsDaily"
+            "ochanticipy.datasources.chirps.chirps.ChirpsDaily"
             "._get_last_available_date"
         ),
         return_value=CURRENT_DATE,
@@ -266,7 +266,7 @@ def test_process_monthly(
     ds["T"].attrs["units"] = "months since 1960-01-01"
 
     mock_xr_open_dataset = mocker.patch(
-        "aatoolbox.datasources.chirps.chirps.xr.open_dataset",
+        "ochanticipy.datasources.chirps.chirps.xr.open_dataset",
         return_value=ds,
     )
 
@@ -343,7 +343,7 @@ def test_process_daily(
     ds["T"].attrs["units"] = "julian_day"
 
     mock_xr_open_dataset = mocker.patch(
-        "aatoolbox.datasources.chirps.chirps.xr.open_dataset",
+        "ochanticipy.datasources.chirps.chirps.xr.open_dataset",
         return_value=ds,
     )
 
diff --git a/tests/datasources/test_codab.py b/tests/datasources/test_codab.py
index 02640fee..7186ea0a 100644
--- a/tests/datasources/test_codab.py
+++ b/tests/datasources/test_codab.py
@@ -1,7 +1,7 @@
 """Test COD AB methods."""
 import pytest
 
-from aatoolbox import CodAB
+from ochanticipy import CodAB
 
 DATASOURCE_BASE_DIR = "cod_ab"
 
@@ -10,14 +10,14 @@
 def downloader(mocker):
     """Mock the HDX download function."""
     return mocker.patch(
-        "aatoolbox.datasources.codab.codab.load_dataset_from_hdx"
+        "ochanticipy.datasources.codab.codab.load_dataset_from_hdx"
     )
 
 
 @pytest.fixture
 def gpd_read_file(mocker):
     """Mock GeoPandas file reading function."""
-    return mocker.patch("aatoolbox.datasources.codab.codab.gpd.read_file")
+    return mocker.patch("ochanticipy.datasources.codab.codab.gpd.read_file")
 
 
 def test_codab_download(mock_aa_data_dir, mock_country_config, downloader):
diff --git a/tests/datasources/test_datasource.py b/tests/datasources/test_datasource.py
index 8c1b609c..797948be 100644
--- a/tests/datasources/test_datasource.py
+++ b/tests/datasources/test_datasource.py
@@ -1,7 +1,7 @@
 """Tests for the DataSource class."""
 import pytest
 
-from aatoolbox.datasources.datasource import DataSource
+from ochanticipy.datasources.datasource import DataSource
 
 
 class DataSourceTesting(DataSource):
diff --git a/tests/datasources/test_fewsnet.py b/tests/datasources/test_fewsnet.py
index 1fb04936..99bdb1e9 100644
--- a/tests/datasources/test_fewsnet.py
+++ b/tests/datasources/test_fewsnet.py
@@ -4,8 +4,8 @@
 import pytest
 from conftest import ISO2
 
-from aatoolbox.config.countryconfig import FewsNetConfig
-from aatoolbox.datasources.fewsnet.fewsnet import FewsNet
+from ochanticipy.config.countryconfig import FewsNetConfig
+from ochanticipy.datasources.fewsnet.fewsnet import FewsNet
 
 DATASOURCE_BASE_DIR = "fewsnet"
 _PUB_YEAR = 2020
@@ -19,7 +19,7 @@ def mock_iso2(mocker, request):
     if request.node.get_closest_marker("nomockiso2"):
         return
     mocker.patch(
-        "aatoolbox.datasources.fewsnet.fewsnet.Country.get_iso2_from_iso3",
+        "ochanticipy.datasources.fewsnet.fewsnet.Country.get_iso2_from_iso3",
         return_value=ISO2.upper(),
     )
 
@@ -156,9 +156,9 @@ def _get_country_mock(
 def mock_fake_url(mocker):
     """Mock url and unzip call."""
     fakedownloadurl = mocker.patch(
-        "aatoolbox.datasources.fewsnet.fewsnet.download_url"
+        "ochanticipy.datasources.fewsnet.fewsnet.download_url"
     )
-    mocker.patch("aatoolbox.datasources.fewsnet.fewsnet.unzip")
+    mocker.patch("ochanticipy.datasources.fewsnet.fewsnet.unzip")
     return fakedownloadurl
 
 
@@ -172,17 +172,17 @@ def _mock_countryregion(country_data: bool, region_data: bool):
         else:
             if region_data:
                 return mocker.patch(
-                    "aatoolbox.datasources.fewsnet.fewsnet."
+                    "ochanticipy.datasources.fewsnet.fewsnet."
                     "FewsNet._download_country",
                     side_effect=zipfile.BadZipFile,
                 )
             else:
                 return mocker.patch(
-                    "aatoolbox.datasources.fewsnet.fewsnet."
+                    "ochanticipy.datasources.fewsnet.fewsnet."
                     "FewsNet._download_country",
                     side_effect=zipfile.BadZipFile,
                 ), mocker.patch(
-                    "aatoolbox.datasources.fewsnet.fewsnet."
+                    "ochanticipy.datasources.fewsnet.fewsnet."
                     "FewsNet._download_region",
                     side_effect=zipfile.BadZipFile,
                 )
@@ -193,7 +193,9 @@ def _mock_countryregion(country_data: bool, region_data: bool):
 @pytest.fixture
 def mock_gpd_read_file(mocker):
     """Mock GeoPandas file reading function."""
-    return mocker.patch("aatoolbox.datasources.fewsnet.fewsnet.gpd.read_file")
+    return mocker.patch(
+        "ochanticipy.datasources.fewsnet.fewsnet.gpd.read_file"
+    )
 
 
 def test_load(
diff --git a/tests/datasources/test_glofas.py b/tests/datasources/test_glofas.py
index 7058975b..c21e2f9c 100644
--- a/tests/datasources/test_glofas.py
+++ b/tests/datasources/test_glofas.py
@@ -3,7 +3,7 @@
 
 import pytest
 
-from aatoolbox import GlofasForecast, GlofasReanalysis, GlofasReforecast
+from ochanticipy import GlofasForecast, GlofasReanalysis, GlofasReforecast
 
 
 def test_reanalysis_dates(mock_country_config, geo_bounding_box):
diff --git a/tests/datasources/test_glofas_download.py b/tests/datasources/test_glofas_download.py
index 88485f39..7219144d 100644
--- a/tests/datasources/test_glofas_download.py
+++ b/tests/datasources/test_glofas_download.py
@@ -5,7 +5,7 @@
 
 import pytest
 
-from aatoolbox import (
+from ochanticipy import (
     GeoBoundingBox,
     GlofasForecast,
     GlofasReanalysis,
@@ -17,11 +17,11 @@
 def mock_retrieve(mocker):
     """Mock only the retrieve method of the Client."""
     mocker.patch(
-        "aatoolbox.datasources.glofas.glofas.cdsapi.Client.__init__",
+        "ochanticipy.datasources.glofas.glofas.cdsapi.Client.__init__",
         return_value=None,
     )
     return mocker.patch(
-        "aatoolbox.datasources.glofas.glofas.cdsapi.Client.retrieve"
+        "ochanticipy.datasources.glofas.glofas.cdsapi.Client.retrieve"
     )
 
 
@@ -43,7 +43,7 @@ def download(self, filepath):
             pass
 
     return mocker.patch(
-        "aatoolbox.datasources.glofas.glofas.cdsapi.api.Result",
+        "ochanticipy.datasources.glofas.glofas.cdsapi.api.Result",
         return_value=MockResult(),
     )
 
diff --git a/tests/datasources/test_glofas_process.py b/tests/datasources/test_glofas_process.py
index 292f3581..cd29623b 100644
--- a/tests/datasources/test_glofas_process.py
+++ b/tests/datasources/test_glofas_process.py
@@ -7,7 +7,7 @@
 import pytest
 import xarray as xr
 
-from aatoolbox import (
+from ochanticipy import (
     CountryConfig,
     GeoBoundingBox,
     GlofasForecast,
@@ -194,7 +194,7 @@ def mock_processed_data_reanalysis(
     ) -> xr.Dataset:
         """Create fake processed GloFAS reanalysis data."""
         mocker.patch(
-            "aatoolbox.datasources.glofas.reanalysis.xr.load_dataset",
+            "ochanticipy.datasources.glofas.reanalysis.xr.load_dataset",
             return_value=self.get_raw_data(),
         )
         return self.get_processed_data(country_config=mock_country_config)
@@ -210,7 +210,7 @@ def _mock_processed_dta_forecast(single_day: bool = False):
                 single_day=single_day
             )
             mocker.patch(
-                "aatoolbox.datasources.glofas.forecast.xr.load_dataset",
+                "ochanticipy.datasources.glofas.forecast.xr.load_dataset",
                 side_effect=[cf_raw, pf_raw],
             )
             return self.get_processed_data(
diff --git a/tests/datasources/test_iri.py b/tests/datasources/test_iri.py
index 22517412..859c55fe 100644
--- a/tests/datasources/test_iri.py
+++ b/tests/datasources/test_iri.py
@@ -6,7 +6,7 @@
 import xarray as xr
 from xarray.coding.cftimeindex import CFTimeIndex
 
-from aatoolbox import GeoBoundingBox, IriForecastDominant, IriForecastProb
+from ochanticipy import GeoBoundingBox, IriForecastDominant, IriForecastProb
 
 DATASOURCE_BASE_DIR = "iri"
 FAKE_IRI_AUTH = "FAKE_IRI_AUTH"
@@ -45,13 +45,13 @@ def mock_download(mocker, mock_iri):
     """
     download_mock = mocker.patch(
         (
-            "aatoolbox.datasources.iri.iri_seasonal_forecast"
+            "ochanticipy.datasources.iri.iri_seasonal_forecast"
             "._IriForecast._download"
         )
     )
 
     mocker.patch.dict(
-        "aatoolbox.datasources.iri.iri_seasonal_forecast.os.environ",
+        "ochanticipy.datasources.iri.iri_seasonal_forecast.os.environ",
         {"IRI_AUTH": FAKE_IRI_AUTH},
     )
 
@@ -110,10 +110,10 @@ def test_download_call_dominant(
 def mock_requests(mocker):
     """Mock requests in the download function."""
     requests_mock = mocker.patch(
-        "aatoolbox.datasources.iri.iri_seasonal_forecast.requests.get"
+        "ochanticipy.datasources.iri.iri_seasonal_forecast.requests.get"
     )
     mocker.patch.dict(
-        "aatoolbox.datasources.iri.iri_seasonal_forecast.os.environ",
+        "ochanticipy.datasources.iri.iri_seasonal_forecast.os.environ",
         {"IRI_AUTH": FAKE_IRI_AUTH},
     )
 
@@ -150,7 +150,7 @@ def test_process(mocker, mock_iri, mock_aa_data_dir, mock_country_config):
     # TODO: now created `load_raw` to be able to mock but would like
     #  to do it from xr.load_dataset directly
     mocker.patch(
-        "aatoolbox.datasources.iri.iri_seasonal_forecast."
+        "ochanticipy.datasources.iri.iri_seasonal_forecast."
         "_IriForecast._load_raw",
         return_value=ds,
     )
@@ -195,7 +195,7 @@ def test_process_if_download_not_called(mock_iri):
 def mock_xr_load_dataset(mocker):
     """Mock GeoPandas file reading function."""
     return mocker.patch(
-        "aatoolbox.datasources.iri.iri_seasonal_forecast.xr.load_dataset"
+        "ochanticipy.datasources.iri.iri_seasonal_forecast.xr.load_dataset"
     )
 
 
@@ -209,7 +209,7 @@ def test_iri_load(
     """Test that load_codab calls the HDX API to download."""
     mocker.patch(
         (
-            "aatoolbox.datasources.iri.iri_seasonal_forecast"
+            "ochanticipy.datasources.iri.iri_seasonal_forecast"
             "._IriForecast._download"
         )
     )
diff --git a/tests/datasources/test_ndvi.py b/tests/datasources/test_ndvi.py
index f3043956..ec7d1923 100644
--- a/tests/datasources/test_ndvi.py
+++ b/tests/datasources/test_ndvi.py
@@ -10,7 +10,7 @@
 import xarray as xr
 from shapely.geometry import Polygon
 
-from aatoolbox import (
+from ochanticipy import (
     UsgsNdviMedianAnomaly,
     UsgsNdviPctMedian,
     UsgsNdviSmoothed,
@@ -55,7 +55,7 @@ def mock_download(mocker, mock_ndvi):
     """
     download_mock = mocker.patch(
         (
-            "aatoolbox.datasources.usgs."
+            "ochanticipy.datasources.usgs."
             "ndvi_base._UsgsNdvi._download_ndvi_dekad"
         )
     )
@@ -78,7 +78,7 @@ def mock_determine_process_dates(mocker, mock_ndvi):
     download method and the returned filepath.
     """
     mocker.patch(
-        ("aatoolbox.datasources.usgs.ndvi_base._UsgsNdvi._load"),
+        ("ochanticipy.datasources.usgs.ndvi_base._UsgsNdvi._load"),
         return_value=pd.DataFrame(
             {
                 "year": [2019, 2020, 2020],
@@ -89,7 +89,7 @@ def mock_determine_process_dates(mocker, mock_ndvi):
     )
 
     mocker.patch(
-        "aatoolbox.datasources.usgs.ndvi_base._UsgsNdvi._get_raw_path",
+        "ochanticipy.datasources.usgs.ndvi_base._UsgsNdvi._get_raw_path",
         return_value=Path(tempfile.mkstemp()[1]),
     )
 
@@ -184,12 +184,12 @@ def test_process_and_load(
     # TODO: now created `load_raw` to be able to mock but would like
     #  to do it from xr.load_dataset directly
     mocker.patch(
-        "aatoolbox.datasources.usgs.ndvi_base.rioxarray.open_rasterio",
+        "ochanticipy.datasources.usgs.ndvi_base.rioxarray.open_rasterio",
         side_effect=[da((2019, 36)), da((2020, 1)), da((2020, 2))] * 6,
     )
 
     mocker.patch(
-        "aatoolbox.datasources.usgs.ndvi_base._UsgsNdvi._get_raw_path",
+        "ochanticipy.datasources.usgs.ndvi_base._UsgsNdvi._get_raw_path",
         return_value=Path(tempfile.mkstemp()[1]),
     )
 
diff --git a/tests/test_country_config.py b/tests/test_country_config.py
index 4a54c309..dc5a890d 100644
--- a/tests/test_country_config.py
+++ b/tests/test_country_config.py
@@ -4,8 +4,8 @@
 
 import pytest
 
-from aatoolbox import create_country_config
-from aatoolbox.config.countryconfig import FewsNetConfig
+from ochanticipy import create_country_config
+from ochanticipy.config.countryconfig import FewsNetConfig
 
 
 @pytest.fixture
@@ -16,7 +16,7 @@ def patcher(output_list: List[Dict] = None):
         if output_list is None:
             output_list = [{"iso3": "abc"}]
         return mocker.patch(
-            "aatoolbox.config.countryconfig.parse_yaml",
+            "ochanticipy.config.countryconfig.parse_yaml",
             side_effect=output_list,
         )
 
diff --git a/tests/utils/test_check_file_existence.py b/tests/utils/test_check_file_existence.py
index 255c8015..aca57182 100644
--- a/tests/utils/test_check_file_existence.py
+++ b/tests/utils/test_check_file_existence.py
@@ -4,7 +4,7 @@
 
 import pytest
 
-from aatoolbox.utils.check_file_existence import check_file_existence
+from ochanticipy.utils.check_file_existence import check_file_existence
 
 
 @check_file_existence
diff --git a/tests/utils/test_dates.py b/tests/utils/test_dates.py
index e859be92..2bf1c3da 100644
--- a/tests/utils/test_dates.py
+++ b/tests/utils/test_dates.py
@@ -4,7 +4,7 @@
 
 import pytest
 
-from aatoolbox.utils import dates
+from ochanticipy.utils import dates
 
 
 def test_get_date():
diff --git a/tests/utils/test_geoboundingbox.py b/tests/utils/test_geoboundingbox.py
index af2ad23c..49b280a3 100644
--- a/tests/utils/test_geoboundingbox.py
+++ b/tests/utils/test_geoboundingbox.py
@@ -3,7 +3,7 @@
 from geopandas import GeoSeries
 from shapely.geometry import Polygon
 
-from aatoolbox.utils.geoboundingbox import GeoBoundingBox
+from ochanticipy.utils.geoboundingbox import GeoBoundingBox
 
 
 def test_geoboundingbox_round_coords():
diff --git a/tests/utils/test_hdx_api.py b/tests/utils/test_hdx_api.py
index e6d5399d..d1c7cf5e 100644
--- a/tests/utils/test_hdx_api.py
+++ b/tests/utils/test_hdx_api.py
@@ -3,7 +3,7 @@
 
 import pytest
 
-from aatoolbox.utils.hdx_api import load_dataset_from_hdx
+from ochanticipy.utils.hdx_api import load_dataset_from_hdx
 
 
 @pytest.fixture(autouse=True)
@@ -15,7 +15,7 @@ def download(self, folder):
             return "", "resource_filepath"
 
     mock_dataset = mocker.patch(
-        "aatoolbox.utils.hdx_api.Dataset.read_from_hdx"
+        "ochanticipy.utils.hdx_api.Dataset.read_from_hdx"
     )
     # read_from_hdx creates an instance, need to mock the instance
     # method get_resources to return custom resources
@@ -23,7 +23,7 @@ def download(self, folder):
         MockResource({"name": "resource1"})
     ]
     # Also need to mock out shutil
-    mocker.patch("aatoolbox.utils.hdx_api.shutil")
+    mocker.patch("ochanticipy.utils.hdx_api.shutil")
 
 
 def test_returns_filepath(tmp_path):
diff --git a/tests/utils/test_raster.py b/tests/utils/test_raster.py
index daf395d3..dd98a393 100644
--- a/tests/utils/test_raster.py
+++ b/tests/utils/test_raster.py
@@ -12,7 +12,7 @@
 from rioxarray.exceptions import DimensionError, MissingCRS
 from shapely.geometry import Polygon
 
-import aatoolbox
+import ochanticipy
 
 
 def test_doctest_suite():
@@ -31,7 +31,7 @@ def test_doctest_suite():
     https://vladyslav-krylasov.medium.com/discover-unit-tests-and-doctests-in-one-run-c5504aea86bd
     """
     suite = unittest.TestSuite()
-    suite.addTest(doctest.DocTestSuite(aatoolbox.utils.raster))
+    suite.addTest(doctest.DocTestSuite(ochanticipy.utils.raster))
     runner = unittest.TextTestRunner(verbosity=2).run(suite)
     assert not runner.failures
 
@@ -123,10 +123,10 @@ def expected_3d(expected_2d):
 
 def test_compute_raster_stats_2d(da_2d, gdf, expected_2d):
     """Compute raster stats without time dimensions."""
-    result = da_2d.aat.compute_raster_stats(gdf, "name")
+    result = da_2d.oap.compute_raster_stats(gdf, "name")
     assert_frame_equal(result, expected_2d, check_dtype=False)
     expected_2d.insert(loc=6, column="95quant", value=[4.85, 5.85])
-    result_pct = da_2d.aat.compute_raster_stats(
+    result_pct = da_2d.oap.compute_raster_stats(
         gdf=gdf, feature_col="name", percentile_list=[95]
     )
     assert_frame_equal(result_pct, expected_2d, check_dtype=False)
@@ -134,15 +134,15 @@ def test_compute_raster_stats_2d(da_2d, gdf, expected_2d):
 
 def test_compute_raster_stats_3d(ds_3d, gdf, expected_3d):
     """Compute raster stats with time dimensions."""
-    result = ds_3d.aat.compute_raster_stats(
+    result = ds_3d.oap.compute_raster_stats(
         var_names=["val"], gdf=gdf, feature_col="name"
     )
     assert_frame_equal(result[0], expected_3d, check_dtype=False)
-    result_all_vars = ds_3d.aat.compute_raster_stats(
+    result_all_vars = ds_3d.oap.compute_raster_stats(
         gdf=gdf, feature_col="name"
     )
     assert_frame_equal(result_all_vars[0], expected_3d, check_dtype=False)
-    result_str = ds_3d.aat.compute_raster_stats(
+    result_str = ds_3d.oap.compute_raster_stats(
         var_names="val", gdf=gdf, feature_col="name"
     )
     assert_frame_equal(result_str[0], expected_3d, check_dtype=False)
@@ -152,28 +152,28 @@ def test_compute_raster_stats_da_assertions(da_3d, gdf):
     """Ensure error assertions working in compute raster stats."""
     with pytest.raises(MissingCRS):
         da_3d.rio._crs = False
-        da_3d.aat.compute_raster_stats(gdf=gdf, feature_col="name")
+        da_3d.oap.compute_raster_stats(gdf=gdf, feature_col="name")
 
 
 def test_set_time_dim(da_2d):
     """Ensure error assertions working in set time dim."""
     with pytest.raises(DimensionError):
-        da_2d.aat.set_time_dim("time")
+        da_2d.oap.set_time_dim("time")
 
 
 def test_correct_calendar_change(da_3d, caplog):
     """Ensure calendar logs change from 360 to 360_day."""
     caplog.set_level(logging.INFO)
-    da_3d[da_3d.aat.t_dim].attrs["calendar"] = "360"
-    da_3d.aat.correct_calendar()
+    da_3d[da_3d.oap.t_dim].attrs["calendar"] = "360"
+    da_3d.oap.correct_calendar()
     assert "Calendar attribute changed from '360' to '360_day'." in caplog.text
 
 
 def test_correct_calendar_add(da_3d, caplog):
     """Ensure calendar logs change from units to 360_day."""
     caplog.set_level(logging.INFO)
-    da_3d[da_3d.aat.t_dim].attrs["units"] = "months since 1960-01-01"
-    da_3d.aat.correct_calendar()
+    da_3d[da_3d.oap.t_dim].attrs["units"] = "months since 1960-01-01"
+    da_3d.oap.correct_calendar()
     assert (
         "Calendar attribute '360_day' added, "
         "equivalent of 'units' 'months since'." in caplog.text
@@ -183,15 +183,15 @@ def test_correct_calendar_add(da_3d, caplog):
 def test_correct_calendar_no_change(da_3d, caplog):
     """Ensure calendar logs no change."""
     caplog.set_level(logging.INFO)
-    da_3d[da_3d.aat.t_dim].attrs["calendar"] = "360_day"
-    da_3d.aat.correct_calendar()
+    da_3d[da_3d.oap.t_dim].attrs["calendar"] = "360_day"
+    da_3d.oap.correct_calendar()
     assert "No 'units' or 'calendar' attributes to correct." in caplog.text
 
 
 def test_change_longitude_range_no_change(da_2d, caplog):
     """Ensure change longitude logs no change."""
     caplog.set_level(logging.INFO)
-    da_2d.aat.change_longitude_range()
+    da_2d.oap.change_longitude_range()
     assert "Coordinates already in required range." in caplog.text
 
 
@@ -200,7 +200,7 @@ def test_compute_raster_stats_no_data_in_bounds(
 ):
     """Ensure compute stats skips non-overlapping areas correctly."""
     caplog.set_level(logging.INFO)
-    result = da_2d.aat.compute_raster_stats(
+    result = da_2d.oap.compute_raster_stats(
         gdf=gdf_missing, feature_col="name"
     )
     assert "No overlapping raster cells for area_c, skipping." in caplog.text
@@ -209,5 +209,5 @@ def test_compute_raster_stats_no_data_in_bounds(
 
 def test_get_raster_array_crs(ds_3d):
     """Ensure dataset to array works when CRS set."""
-    da = ds_3d.aat.get_raster_array("val")
+    da = ds_3d.oap.get_raster_array("val")
     assert da.rio.crs == ds_3d.rio.crs