Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
8b20cc4
starting some tests to see where implement
quai20 May 21, 2026
60e744b
test params selection in preprocessing
quai20 May 22, 2026
177f531
class initialisation was not well positionned
quai20 May 27, 2026
c6226a3
cln
quai20 May 27, 2026
02f0ee9
Update impact.rst
gmaze May 31, 2026
2a5bf6a
Update utils.py
gmaze May 31, 2026
e2b06bb
add measured parameter
quai20 Jun 4, 2026
e99ac71
add property for measured_list
quai20 Jun 4, 2026
57c74c8
fix
quai20 Jun 4, 2026
e0979d5
Update gdac_servers.json
gmaze Jun 4, 2026
b19defa
Update whats-new.rst
gmaze Jun 4, 2026
01d078d
Update whats-new.rst
gmaze Jun 5, 2026
178e9fd
Update impact.rst
gmaze Jun 10, 2026
3e67606
Update the documentation with last training sessions and impact
gmaze Jun 17, 2026
a327835
add policy file
quai20 Jun 17, 2026
5bc9bfc
text
quai20 Jun 17, 2026
821ff62
[skip-ci] Update what'snew
gmaze Jun 17, 2026
df5a8c9
Update whats-new.rst
gmaze Jun 17, 2026
ddd789d
Fix bug in Test_FloatStore_Config and FloatStoreProto
gmaze Jun 18, 2026
0207e5a
Update test_fetchers_dask_cluster.py
gmaze Jun 18, 2026
a563e97
Update test_fetchers_data_gdac.py
gmaze Jun 18, 2026
057661f
fix unit tests datat
gmaze Jun 18, 2026
ce812b4
Update test_fetchers_facade_data.py
gmaze Jun 18, 2026
55dcd42
Delete test_fetchers_facade_index.py
gmaze Jun 18, 2026
401c9fc
Update test_fetchers_proto.py
gmaze Jun 18, 2026
1d0c27a
Merge pull request #640 from euroargodev/593-fix-unit-tests-error-fss…
gmaze Jun 18, 2026
2e4ba72
Merge branch 'master' into 624-update-us-gdac-url
gmaze Jun 18, 2026
fc49b4c
Merge branch 'master' into update-related-utils
gmaze Jun 18, 2026
c35bfdd
Merge pull request #634 from euroargodev/624-update-us-gdac-url
gmaze Jun 19, 2026
37062ae
Merge pull request #626 from euroargodev/update-related-utils
gmaze Jun 19, 2026
937de7d
integrate @gmaze comments
quai20 Jun 19, 2026
5390fba
Merge pull request #639 from euroargodev/ai_policy
quai20 Jun 19, 2026
5d199ce
Update AI_POLICY.md
gmaze Jun 22, 2026
c7aedd8
starting some tests to see where implement
quai20 May 21, 2026
9ea5d49
test params selection in preprocessing
quai20 May 22, 2026
ba86fc3
class initialisation was not well positionned
quai20 May 27, 2026
bdda867
cln
quai20 May 27, 2026
772fe69
add measured parameter
quai20 Jun 4, 2026
6baa5d6
add property for measured_list
quai20 Jun 4, 2026
2246b75
fix
quai20 Jun 4, 2026
3a06f68
Merge branch 'bgc_gdac_params' of https://github.com/euroargodev/argo…
quai20 Jun 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions AI_POLICY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# AI Usage Policy

The argopy developing team has set some rules for generative AI usage. These rules are not definitive and may be updated in the future.

- **All generative AI usage in any form must be disclosed.** If AI was used to generate a significant portion of your contribution (beyond simple autocomplete), we ask that you **disclose it** within the code or PR description. You must state the tool you used along with a sentence saying that the work was AI-assisted.

- **Pull requests and issues created by AI are forbidden.**
If AI isn't disclosed but a maintainer suspects its use within a PR or issue **creation**, the PR will be closed. AI assistance can be used for discussions inside PR or issues, but must always be supervized and reviewed by a human eye before submission.

- **Media.**
Text and code are the only acceptable AI-generated content, per the
other rules in this policy.

These rules apply to all contributors, including maintainers.

## Human Accountability

**The human contributor is 100% responsible for the contribution.**

If you submit a Pull Request that includes AI-generated code, documentation, or
comments:

- You must **fully understand** the code you submit, and the context in which it is included inside the global project or **Argopy**.
- You must be able to explain the "**why**" behind the implementation during the
review process.
- You are responsible for the long-term maintenance of that code.

## The people

Please keep in mind that **Argopy** is developed and maintained by humans being.

It is for us a fundamental aspect of the project that discussions (in issues or PR), even if happenning on github, are made between humans. Knowing this, it will be considered impolite to approach the **Argopy** dev community with AI-agent.

## Ethics, Ecology & Expertise

For more than 20 years, the Argo program has been a key element in the observation and understanding of climate change and its impact on the ocean. Argo is incremental in monitoring how the human-driven climate change negatively impact the ocean state and marine life ([check the IPCC special report on ocean](https://www.ipcc.ch/srocc/) or [that brief overview also from the IPCC](https://www.ipcc.ch/report/ar6/wg1/downloads/factsheets/IPCC_AR6_WGI_Sectoral_Fact_Sheet_Marine_Ecosystems_Fisheries.pdf)). So, it is of primary and inherent concern to Argo to limit its environmental footprint.

We like to think that **Argopy** is part of the Argo ecosystem.

As sustainable software developers, the **Argopy** team aims to better understand the generative AI’s environmental impact, following our preliminary work in [monitoring the carbon footprint of maintaining and developing **Argopy**](https://argopy.readthedocs.io/en/latest/energy.html). But very little information are available on the generative AI’s environmental impact and "current GAI models are deployed mainly in carbon-intensive regions" ([Ding et al, 2025](https://doi.org/10.1016/j.xinn.2025.100866)).

With that, 2 things to keep in mind when contributing to the development of **Argopy** :

- **Ethics & Ecology** : Not knowing the - presumably very large - impact of generative AI on CO2 emissions (and use of limited Earth resources), it is important to us that we adopt a conservative and limited approach regarding GAI usage in contributing to **Argopy** in order to limit its environmental footprint.
- **Expertise** : **Argopy**, as part of a public research infrastructure, has more duty in developing/preserving a technical and scientific expertise for the public good, than participating in a blind race to productivity gain (in the [social acceleration sense](https://en.wikipedia.org/wiki/Social_acceleration), an argument echoing the [slow science](https://en.wikipedia.org/wiki/Slow_science) approach at work within **Argopy**). It is thus also important to us that we adopt a conservative and limited approach regarding GAI usage in contributing to **Argopy** to preserve a good level of human expertise regarding the produced code and our associated ability to disseminate our expertise to the end-users.
25 changes: 19 additions & 6 deletions argopy/data_fetchers/erddap_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
from .proto import ArgoDataFetcherProto
from .erddap_data_processors import pre_process


log = logging.getLogger("argopy.erddap.data")

access_points = ["wmo", "box"]
Expand All @@ -49,6 +48,7 @@ class ErddapArgoDataFetcher(ArgoDataFetcherProto):
This class is a prototype not meant to be instantiated directly

"""

data_source = "erddap"

###
Expand Down Expand Up @@ -147,8 +147,8 @@ def __init__( # noqa: C901
self.fs = kwargs["fs"] if "fs" in kwargs else httpstore(**self.store_opts)

self.parallelize, self.parallel_method = PARALLEL_SETUP(parallel)
if self.parallelize and self.parallel_method == 'thread':
self.parallel_method = 'erddap' # Use our custom filestore
if self.parallelize and self.parallel_method == "thread":
self.parallel_method = "erddap" # Use our custom filestore
self.progress = progress
self.chunks = chunks
self.chunks_maxsize = chunks_maxsize
Expand Down Expand Up @@ -239,6 +239,17 @@ def __init__( # noqa: C901
% (v, ", ".join(self._bgc_vlist_avail))
)

if (
self._bgc_vlist_params is not None
and self._bgc_vlist_measured is not None
):
for v in self._bgc_vlist_measured:
if v not in self._bgc_vlist_params:
raise ValueError(
"'%s' can't be in the 'measured' list if it is not in the 'params' list. Please check your arguments."
% v
)

def __repr__(self):
summary = ["<datafetcher.erddap>"]
summary.append(self._repr_data_source)
Expand Down Expand Up @@ -359,7 +370,7 @@ def _minimal_vlist(self):
]
[vlist.append(p) for p in plist]

# Core/Deep variables:
# BGC/Core/Deep variables:
plist = [p.lower() for p in list_core_parameters()]
[vlist.append(p) for p in plist]
[vlist.append(p + "_qc") for p in plist]
Expand Down Expand Up @@ -521,7 +532,9 @@ def getNfromncHeader(url):
if "Your query produced no matching results. (nRows = 0)" in ncHeader:
return 0
else:
lines = [line for line in ncHeader.splitlines() if "row = " in line][0]
lines = [
line for line in ncHeader.splitlines() if "row = " in line
][0]
return int(lines.split("=")[1].split(";")[0])
except Exception:
raise ErddapServerError(
Expand Down Expand Up @@ -944,6 +957,6 @@ def uri(self):
except DataNotFound:
log.debug("This box fetcher will contain no data")
except ValueError as e:
if 'not available for this access point' in str(e):
if "not available for this access point" in str(e):
log.debug("This box fetcher does not contained required data")
return urls
Loading
Loading