Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the ability to specify a different ESGF node #20

Closed
rsignell opened this issue Mar 20, 2024 · 16 comments
Closed

Add the ability to specify a different ESGF node #20

rsignell opened this issue Mar 20, 2024 · 16 comments

Comments

@rsignell
Copy link

I searched using pangeo-forge-esgf and told a colleague that daily files for HADGEM did not exist, and he showed me they do exist, but he used the UK ESGF node:

image001

@jbusecke
Copy link
Owner

Did you use parse_instance_ids or get_urls_from_esgf (that one has an input argument search_nodes).

The fact that even though we are making a 'distributed request' the results differ across search nodes is sketchy though...

@rsignell
Copy link
Author

rsignell commented Mar 27, 2024

@jbusecke I'm confused. I'm doing:

from pangeo_forge_esgf.parsing import parse_instance_ids

parse_iids = [
    'CMIP6.HighResMIP.*.HadGEM3-GC31-HH.*.*.*.so.gn.*',
    'CMIP6.HighResMIP.*.HadGEM3-GC31-HH.*.*.*.thetao.gn.*'
]
iids = []
for piid in parse_iids:
    iids.extend(parse_instance_ids(piid))
iids

which results in only monthly data being shown:

['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Omon.so.gn.v20200514',
 'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Omon.so.gn.v20200514',
 'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Omon.so.gn.v20200514',
 'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Omon.thetao.gn.v20200514',
 'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Omon.thetao.gn.v20200514',
 'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Omon.thetao.gn.v20200514']

but that's because it's using the LLNL node:

# TODO: I should make the node url a keyword argument.
# For now this works well enough
url = "https://esgf-node.llnl.gov/esg-search/search"
# url = "https://esgf-data.dkrz.de/esg-search/search"

How would I make the same request with get_urls_from_esgf?

@rsignell
Copy link
Author

rsignell commented Mar 29, 2024

ping @jbusecke in case this slid off the radar screen... 🐱

@jbusecke
Copy link
Owner

Oh I got confused. So two things:

First this is how you would use get_urls_from_esgf

import asyncio
from pangeo_forge_esgf.recipe_inputs import get_urls_from_esgf

iids = ['']

# when running from a script
url_dict = asyncio.run(
    get_urls_from_esgf(
        iids,search_nodes=["http://esgf-node.llnl.gov/esg-search/search"]
    )
)

# for a jupyter notebook
url_dict = await get_urls_from_esgf(
        iids,search_nodes=["http://esgf-node.llnl.gov/esg-search/search"]
    )

This will not expand wildcards like parse_instance_ids. We could easily make the search node a keyword argument there, but the bigger question is WHY the behavior differs from node to node. Setting 'distrib=True' here should query from all ESGF nodes...ughhh this is annoying.

Either way, give #21 a try with the node of your choice?

@jbusecke
Copy link
Owner

I have seen some of this behavior in several issues, I am not getting the same results from the API as from that search interface, which is upsetting. Will have to investigate more at some point, but am short for time today.

@jbusecke
Copy link
Owner

jbusecke commented Apr 2, 2024

Ok apparently the LLNL node is totally down? Not even their examples work...

@rsignell
Copy link
Author

rsignell commented Apr 2, 2024

Interesting. the dkrz node API seems to be working.
https://esgf-data.dkrz.de/esg-search/search/?cf_standard_name=air_temperature&project=obs4MIPs

@jbusecke
Copy link
Owner

jbusecke commented Apr 2, 2024

Just running this from a dev branch locally (will push in a sec) and it seems that the node does not make a difference:

parse_iids = [
   ...:     'CMIP6.HighResMIP.*.HadGEM3-GC31-HH.*.*.*.thetao.gn.*',
   ...: ]
   ...: iids_dict = {}
   ...: search_nodes = [
   ...:     "https://esgf-node.ipsl.upmc.fr/esg-search/search",
   ...:     "https://esgf-index1.ceda.ac.uk/esg-search/search",
   ...:     "https://esgf-data.dkrz.de/esg-search/search",
   ...:     "https://esg-dn1.nsc.liu.se/esg-search/search",
   ...:     "https://esgf-node.llnl.gov/esg-search/search",
   ...:     "https://esgf.nci.org.au/esg-search/search",
   ...:     "https://esgf-node.ornl.gov/esg-search/search",
   ...:     ]
   ...: for node in search_nodes:
   ...: 
   ...:     iids = []
   ...:     for piid in parse_iids:
   ...:         iids.extend(parse_instance_ids(piid, search_node="https://esgf-node.ipsl.upmc.fr/esg-search/search"))
   ...:     iids_dict[node] = iids
   ...: iids_dict

gives:

{'https://esgf-node.ipsl.upmc.fr/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Omon.thetao.gn.v20200514'],
 'https://esgf-index1.ceda.ac.uk/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Omon.thetao.gn.v20200514'],
 'https://esgf-data.dkrz.de/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Omon.thetao.gn.v20200514'],
 'https://esg-dn1.nsc.liu.se/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Omon.thetao.gn.v20200514'],
 'https://esgf-node.llnl.gov/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Omon.thetao.gn.v20200514'],
 'https://esgf.nci.org.au/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Omon.thetao.gn.v20200514'],
 'https://esgf-node.ornl.gov/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Omon.thetao.gn.v20200514',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Omon.thetao.gn.v20200514']}

So the good news is the returns from the API are consistent.

The bad news is: WHY ON EARTH DOES THE WEB INTERFACE SHOW DIFFERENT DATASETS THAN THE API?

@jbusecke
Copy link
Owner

jbusecke commented Apr 2, 2024

Actually! Looking at the screenshot again I do not see thetao and so in your query.

@jbusecke
Copy link
Owner

jbusecke commented Apr 2, 2024

@rsignell are you sure that daily files exist for the ocean variables?
Just trying pr (which is one of the high time res datasets shown above) yields results!

from pangeo_forge_esgf.parsing import parse_instance_ids
   ...: 
   ...: parse_iids = [
   ...:     'CMIP6.HighResMIP.*.HadGEM3-GC31-HH.*.*.*.pr.gn.*',
   ...: ]
   ...: iids_dict = {}
   ...: search_nodes = [
   ...:     "https://esgf-node.ipsl.upmc.fr/esg-search/search",
   ...:     "https://esgf-index1.ceda.ac.uk/esg-search/search",
   ...:     "https://esgf-data.dkrz.de/esg-search/search",
   ...:     "https://esg-dn1.nsc.liu.se/esg-search/search",
   ...:     "https://esgf-node.llnl.gov/esg-search/search",
   ...:     "https://esgf.nci.org.au/esg-search/search",
   ...:     "https://esgf-node.ornl.gov/esg-search/search",
   ...:     ]
   ...: for node in search_nodes:
   ...: 
   ...:     iids = []
   ...:     for piid in parse_iids:
   ...:         iids.extend(parse_instance_ids(piid, search_node="https://esgf-node.ipsl.upmc.fr/
   ...: esg-search/search"))
   ...:     iids_dict[node] = iids
   ...: iids_dict

gives this (which is what I expect to see from your screenshot above)

{'https://esgf-node.ipsl.upmc.fr/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.day.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.day.pr.gn.v20191105',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Amon.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.3hr.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.day.pr.gn.v20180927'],
 'https://esgf-index1.ceda.ac.uk/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.day.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.day.pr.gn.v20191105',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Amon.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.3hr.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.day.pr.gn.v20180927'],
 'https://esgf-data.dkrz.de/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.day.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.day.pr.gn.v20191105',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Amon.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.3hr.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.day.pr.gn.v20180927'],
 'https://esg-dn1.nsc.liu.se/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.day.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.day.pr.gn.v20191105',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Amon.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.3hr.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.day.pr.gn.v20180927'],
 'https://esgf-node.llnl.gov/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.day.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.day.pr.gn.v20191105',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Amon.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.3hr.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.day.pr.gn.v20180927'],
 'https://esgf.nci.org.au/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.day.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.day.pr.gn.v20191105',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Amon.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.3hr.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.day.pr.gn.v20180927'],
 'https://esgf-node.ornl.gov/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.day.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.day.pr.gn.v20191105',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Amon.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.3hr.pr.gn.v20180927',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.Amon.pr.gn.v20180927',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.3hr.pr.gn.v20191105',
  'CMIP6.HighResMIP.NERC.HadGEM3-GC31-HH.hist-1950.r1i1p1f1.day.pr.gn.v20180927']}

@jbusecke
Copy link
Owner

jbusecke commented Apr 2, 2024

So my current conclusion is that thetao and so (the full depth outputs) do not exists as daily outputs.

What exists as daily output are surface temperature and surface salinity (and a bunch of atmos variables that you showed above):

parse_iids = [
    ...:     'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.*.*.Oday.*.gn.*',
    ...: ]
    ...: iids_dict = {}
    ...: search_nodes = [
    ...:     "https://esgf-node.ipsl.upmc.fr/esg-search/search",
    ...:     "https://esgf-index1.ceda.ac.uk/esg-search/search",
    ...:     ]
    ...: for node in search_nodes:
    ...: 
    ...:     iids = []
    ...:     for piid in parse_iids:
    ...:         iids.extend(parse_instance_ids(piid, search_node="https://esgf-node.ipsl.upmc.fr
    ...: /esg-search/search"))
    ...:     iids_dict[node] = iids
    ...: iids_dict
{'https://esgf-node.ipsl.upmc.fr/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Oday.tossq.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Oday.tos.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Oday.tossq.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Oday.sos.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Oday.tos.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Oday.sos.gn.v20200514'],
 'https://esgf-index1.ceda.ac.uk/esg-search/search': ['CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Oday.tossq.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Oday.tos.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Oday.tossq.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.control-1950.r1i1p1f1.Oday.sos.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Oday.tos.gn.v20200514',
  'CMIP6.HighResMIP.MOHC.HadGEM3-GC31-HH.highres-future.r1i1p1f1.Oday.sos.gn.v20200514']}

@rsignell
Copy link
Author

rsignell commented Apr 2, 2024

@jbusecke , OMG. I'm so sorry for this wild goose chase. You are correct -- If I search the CEDA node for so, there are only monthly files:
image

Why isn't there an egg-on-face emoticon?

@jbusecke
Copy link
Owner

jbusecke commented Apr 2, 2024

🥚🙈

@jbusecke
Copy link
Owner

jbusecke commented Apr 2, 2024

FWIW the goose chase shamed me into adding some more CI and actually fixing the square bracket extension. So you can now search for a subset of facet values (or several) in a single string like this:

from pangeo_forge_esgf.parsing import parse_instance_ids

parse_iids = [
    'CMIP6.HighResMIP.*.HadGEM3-GC31-HH.*.*.*.[so, thetao, some_other_stuff].gn.*',
]
iids = []
for piid in parse_iids:
    iids.extend(parse_instance_ids(piid))
iids

@jbusecke
Copy link
Owner

jbusecke commented Apr 2, 2024

Ill close this now.

@jbusecke jbusecke closed this as completed Apr 2, 2024
@rsignell
Copy link
Author

rsignell commented Apr 2, 2024

Thanks for being understanding and kind here @jbusecke !!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants