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

Hackathon 24: py-eddy-tracker installation #2

Open
ctroupin opened this issue Nov 22, 2024 · 21 comments
Open

Hackathon 24: py-eddy-tracker installation #2

ctroupin opened this issue Nov 22, 2024 · 21 comments

Comments

@ctroupin
Copy link

Aquí van las versiones de los paquetes en un entorno

$ python
Python 3.10.12 (main, Sep 11 2024, 15:47:36) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
asciitree==0.3.3
asttokens==2.4.1
certifi==2024.8.30
cftime==1.6.4.post1
charset-normalizer==3.4.0
comm==0.2.2
contourpy==1.3.1
cycler==0.12.1
debugpy==1.8.8
decorator==5.1.1
exceptiongroup==1.2.2
executing==2.1.0
fasteners==0.19
flexcache==0.3
flexparser==0.4
fonttools==4.55.0
idna==3.10
ipykernel==6.29.5
ipython==8.29.0
jedi==0.19.2
jupyter_client==8.6.3
jupyter_core==5.7.2
kiwisolver==1.4.7
llvmlite==0.43.0
matplotlib==3.7.5
matplotlib-inline==0.1.7
nest-asyncio==1.6.0
netCDF4==1.7.2
numba==0.60.0
numcodecs==0.13.1
numpy==1.26.4
opencv-python==4.10.0.84
packaging==24.2
pandas==2.2.3
parso==0.8.4
pexpect==4.9.0
pillow==11.0.0
Pint==0.24.4
platformdirs==4.3.6
Polygon3==3.0.9.1
prompt_toolkit==3.0.48
psutil==6.1.0
ptyprocess==0.7.0
pure_eval==0.2.3
pyEddyTracker==0+untagged.744.g66f2f31
Pygments==2.18.0
pyparsing==3.2.0
python-dateutil==2.9.0.post0
pytz==2024.2
PyYAML==6.0.2
pyzmq==26.2.0
requests==2.32.3
scipy==1.14.1
six==1.16.0
stack-data==0.6.3
tornado==6.4.1
traitlets==5.14.3
typing_extensions==4.12.2
tzdata==2024.2
urllib3==2.2.3
wcwidth==0.2.13
xarray==2024.10.0
zarr==2.18.3

por si ayuda.

@emiliom
Copy link
Member

emiliom commented Nov 22, 2024

Hola @ctroupin . Tenés un archivo environment o requirements para crear este entorno, o la lista de paquetes y sus versiones que especificaste explícitamente al crear el entorno?

Gracias por esta información, y por crear este issue separado. Seguiré probando con un par de ideas.

Añado aquí el enlace a pyeddytracker, para tenerlo a mano: https://github.com/AntSimi/py-eddy-tracker

@ctroupin
Copy link
Author

Es curioso porque a partir de esta lista de paquetes, intenté crear un nuevo entorno virtual, instalando los paquetes con pip install -r requirements.txt pero no funciona del todo, cuando ejecuto un script de test:

import py_eddy_tracker
import datetime
from py_eddy_tracker.dataset.grid import RegularGridDataset

# Test file can be obtained from https://dox.ulg.ac.be/index.php/s/N24PF6T8LyB3lsx
testfile = "cmems_obs-sl_glo_phy-ssh_my_allsat-l4-duacs-0.25deg_P1D_1731685959908.nc"
h = RegularGridDataset(testfile, "longitude", "latitude")
h.bessel_high_filter("adt", 500, order=3)
a, c = h.eddy_identification(
    "adt",
    "ugos",
    "vgos",  # Variables used for identification
    datetime.datetime(2023, 1, 5),  # Date of identification
    0.001,  # step between two isolines of detection (m)
    pixel_limit=(5, 500),  # Min and max pixel count for valid contour
    shape_error=55,  # Error max (%) between ratio of circle fit and contour
)

if len(a) == 0:
    print("There is a problem somewhere")
else:
    print(f"Found {len(a)} eddies")

tengo un nuevo error:

numba.core.errors.NumbaTypeError: Unsupported array type: numpy.ma.MaskedArray.

Sigo investigando.

@emiliom
Copy link
Member

emiliom commented Nov 24, 2024

Gracias por esa información. No se ve prometedor.

Lo que yo pensaba (pienso) hacer es crear un entorno de conda en mi computadora, con pyeddytracker y nada más, a ver que pasa. Supongo que eso es lo que hiciste en tu última prueba. Nada más que quiero evitar tener que clonar el repositorio, porque creo que eso no es algo que puedo reproducir en el sistema de creación de entornos del hub.

@ctroupin
Copy link
Author

Sí, así empece, solo con pyeddytracker y luego añadir paso a paso lo que faltaba.

Hice tantas pruebas que no apunte correctamente los pasos para tener un entorno que funciona, solo tengo la lista de paquetes + versiones obtenidos con pip freeze.

@ctroupin
Copy link
Author

ctroupin commented Nov 25, 2024

Good news: ahora sí tengo un entorno que funciona sin problema:

asciitree==0.3.3
asttokens==2.4.1
certifi==2024.8.30
cftime
charset-normalizer==3.4.0
comm==0.2.2
contourpy
cycler==0.12.1
debugpy==1.8.8
decorator==5.1.1
exceptiongroup==1.2.2
executing==2.1.0
fasteners==0.19
flexcache==0.3
flexparser==0.4
fonttools==4.55.0
idna==3.10
ipykernel==6.29.5
ipython==8.29.0
jedi==0.19.2
jupyter_client==8.6.3
jupyter_core==5.7.2
kiwisolver==1.4.7
llvmlite
matplotlib==3.7.1
matplotlib-inline==0.1.7
nest-asyncio==1.6.0
netCDF4
numba==0.55.2
numcodecs==0.13.1
numpy
opencv-python
packaging==24.2
parso==0.8.4
pexpect==4.9.0
pillow==11.0.0
Pint
platformdirs==4.3.6
Polygon3==3.0.9.1
prompt_toolkit==3.0.48
psutil==6.1.0
ptyprocess==0.7.0
pure_eval==0.2.3
pyEddyTracker==3.5.0
Pygments==2.18.0
pyparsing==3.2.0
python-dateutil==2.9.0.post0
pytz==2024.2
PyYAML==6.0.2
pyzmq==26.2.0
requests==2.32.3
scipy
six==1.16.0
stack-data==0.6.3
tornado==6.4.1
traitlets==5.14.3
typing_extensions==4.12.2
tzdata==2024.2
urllib3==2.2.3
wcwidth==0.2.13
xarray
zarr
  • El problema numba.core.errors.NumbaTypeError: Unsupported array type: numpy.ma.MaskedArray lo pude arreglar poniendo numba==0.55.2, lo que generó nuevos problemas de compatibilidad (numpy, scipy etc). Quitando las versiones en la lista de paquete, pude encontrar una combinación correcta.

  • El último problema era lo de matplotlib, tuve que bajar la versión a matplotlib==3.7.1 (sino, no se detecta ningún remolino).

Todo eso con Python 3.10.12, ahora hago la misma prueba con la misma versión de Python (3.12.7) que tenemos en el cloud de 2i2c.

Edit: Python 3.12 necesita al menos numba0.59.0. Con esta versión la instalación no genera ningún error, pero el script de test no funciona:

numba.core.errors.NumbaTypeError: Unsupported array type: numpy.ma.MaskedArray.

Lo mismo con numba0.60.0

@emiliom
Copy link
Member

emiliom commented Nov 25, 2024

Fantastico @ctroupin ! El Python actual en el hub es 3.12, pero podemos bajarlo a 3.11. Me parece que Matplotlib 3.7* no es compatible con Python 3.12.

Podrias probarlo con Python 3.11?

@ctroupin
Copy link
Author

Okay ahora/hoy hago las prubas con el 3.11.
Cruzando los dedos...

@ctroupin
Copy link
Author

De momento no lo consigo: los problemas aparecen por las versiones de numba, empezando con la más reciente (0.60.0) intento bajar de versión en mi fichero requirements.txt (que cargo con pip install -r requirements.txt), pero no puede finalizar la instalación del entorno, con mensajes como:

Collecting numba<0.57 (from -r requirements.txt (line 29))
  Downloading numba-0.56.4.tar.gz (2.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 629.6 kB/s eta 0:00:00
  Preparing metadata (setup.py) ... error
  error: subprocess-exited-with-error
  
  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [8 lines of output]
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
        File "<pip-setuptools-caller>", line 34, in <module>
        File "/tmp/pip-install-y1cok1k7/numba_e706d8d287644f00b2df387db600d4ac/setup.py", line 51, in <module>
          _guard_py_ver()
        File "/tmp/pip-install-y1cok1k7/numba_e706d8d287644f00b2df387db600d4ac/setup.py", line 48, in _guard_py_ver
          raise RuntimeError(msg.format(cur_py, min_py, max_py))
      RuntimeError: Cannot install on Python version 3.11.5; only versions >=3.7,<3.11 are supported.
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

@emiliom
Copy link
Member

emiliom commented Nov 25, 2024

Ni modo. Dejame pensar e investigar sobre basar el entorno de R en Python 3.10.

Mientras tanto, podrías crear un nuevo entorno on Python 3.10 donde especificás nada más una lista mínima de los paquetes necesarios (que obviamente instalan otras dependedencias), con su version pinning necesaria? Preferiblemente que la mayoría de los paquetes vengan de conda-forge, y solo de PyPI lo absolutamente necesario. Gracias!

@ctroupin
Copy link
Author

ctroupin commented Nov 26, 2024

He probado lo siguiente, y funcionó:

  1. Creación de un entorno virtual con Python 3.10
  2. Instalación de los paquetes listados en la web de PyEddyTracker
  3. Instalación de pyEddyTracker con pip (ya que no no encuentra en conda-forge)

No tuve que especificar versiones de paquetes, excepto matplotlib, para evitar tener la 3.8 que, al parecer, genera problame.

conda create -n Eddy python=3.10
conda activate Eddy 
conda install numpy
conda install matplotlib==3.7.1
conda install scipy
conda install opencv-python 
conda install pyyaml 
conda install pint 
conda install polygon3
pip install pyEddyTracker

Con eso tenemos el eddy-tracking funcionando. Después falta instalar otros paquetes:

conda install xarray
conda install cartopy
pip install cmocean

@emiliom
Copy link
Member

emiliom commented Nov 26, 2024

Gracias @ctroupin ! Trataré de trabajar en esto hoy cuando lleguemos a la fase de proyectos. Te mantengo al tanto.

@ctroupin
Copy link
Author

Gracias @emiliom.
He intentado reproducir las instrucciones que te puse en el mensaje anterior, pero en otra máquina, y me funcionó también (que ya es un logro). A ver si podemos tener este entorno en el hub.

Si tengo tiempo unos de estos días hablaré con los desarrolladores de pyEddyTracker para ver si podemos ayudar a resolver el problema de compatibilidad con las últimas versiones de matplotlib.

@emiliom
Copy link
Member

emiliom commented Nov 26, 2024

He estado trabajando continuamente en esto, y está muy complicado. No lo mencionaste en tus últimos mensajes (aunque sí antes), pero la restricción de numba es ahorita el problema principal. Si no impongo version pinning de numba, me topo con el error que reportaste antes, numba.core.errors.NumbaTypeError: Unsupported array type: numpy.ma.MaskedArray. Numba 0.55 (de conda-forge) tiene una restricción en su dependencia en numpy (<1.22) que lo hace incompatible con la versión de Zarr que tenemos, que requiere numpy >= 1.23. Numba 0.56 parece que no funciona, el resolvedor de dependencias no encuentra una solución.

Sigo probando unas alternativas, pero estoy cerca de darme por vencido. Lo que tendremos que explorar es el uso de un entorno personalizado en el hub. Desgraciadamente conda en sí no está disponible en el hub (explico luego), pero tengo instrucciones.

@ctroupin
Copy link
Author

Mala suerte, ya pensaba que trabajando con Python 3.10, solucionamos el tema de numba, pero es aun más complicado.

Lo que haré es que pediré a los participantes del proyecto "remolinos" de pasarme los ficheros que han bajado, prepararé yo la detección de remolinos, y les devolveré los resultados que podrán procesar.

gracias por la ayuda, y siento de nuevo estas dificultadas inesperadas.

@emiliom
Copy link
Member

emiliom commented Nov 26, 2024

Ahora sí, oficialmente me doy por vencido 😞 . Lo siento!

Luego les envío información sobre la creación de entornos personalizados.

@emiliom
Copy link
Member

emiliom commented Nov 27, 2024

@ctroupin tengo noticias alentadoras en cuanto a la creación de un entorno personalizado en el hub, que funcione con pyeddytracker. He logrado crear uno en mi computadora, que corre el código que pusiste arriba (#2 (comment)) -- después de encontrar, y resolver, un problema más, esta vez con la dependencia flexparser . Usé el archivo cmems_obs-sl_glo_phy-ssh_my_allsat-l4-duacs-0.25deg_P1D_1731685959908.nc que pusiste en el hub en shared-readwrite.

Para comprobar que funciona completamente, podrías añadir código para generar una figura con remolinos, para yo poder tratar de reproducirlo en mi computadora?

En cuanto a la creación de entornos personalizados en el hub, te adelanto que no podemos usar conda. El entorno de Python ha sido creado con un nuevo sistema que se llama pixi (https://pixi.sh), que utiliza paquetes de conda, pypi, etc. Si mis pruebas funcionas, te enviaré las instrucciones y creo que no será muy complicado compartirlo con todos los miembros del proyecto.

@ctroupin
Copy link
Author

Okay perfecto, pues ejemplo de código

import cartopy.crs as ccrs
# Cambiar si cambiamos de región
mainproj = ccrs.Mercator(central_longitude=-60.0, min_latitude=-70.0, max_latitude=40.0)
datacrs = ccrs.PlateCarree()

fig = plt.figure(figsize=(12, 8))
ax = plt.subplot(111, projection=mainproj)
ax.gridlines(draw_labels=True, zorder=3)
ax.coastlines(lw=.5)
a.display(ax, color="b", linewidth=0.5, transform=ccrs.PlateCarree(), label="Anticiclónicos")
c.display(ax, color="r", linewidth=0.5, transform=ccrs.PlateCarree(), label="Ciclónicos")
plt.legend()
plt.show()

@emiliom
Copy link
Member

emiliom commented Nov 27, 2024

Éxito!! 80 remolinos. Ahora lo que me queda es confirmar que puedo crear el mismo entorno personalizado en el hub, y que será accessible. Me siento muy optimista. Además, esto beneficiará también al otro grupo que utilizará Python principalmente.

image

@emiliom
Copy link
Member

emiliom commented Nov 27, 2024

@ctroupin desgraciadamente me topé de nuevo con un problema al tratar de crear el entorno en el hub, esta vez con el último paso, la instalación de pyeddytracker. No me lo esperaba, y no sé si voy a poder resolver esto. Trataré.

@emiliom
Copy link
Member

emiliom commented Nov 27, 2024

@ctroupin la saga continúa. Con ayuda del experto en el hub y pixi de oceanhackweek, logré crear el entorno personalizado! Puedo importar pyeddytracker y correr estas dos operaciones:

h = RegularGridDataset(testfile, "longitude", "latitude")
h.bessel_high_filter("adt", 500, order=3)

Pero la linea a, c = h.eddy_identification( ... produce len(a) con valor de 0. El archivo netcdf se ve bien. El mismo codigo corre bien en mi computadora. Así que no sé que problema puede haber.

Si querés probarlo directamente, en el hub andá a la ruta /home/jovyan/shared-readwrite/ohwe24_hackaton/entornos/pyeddytracker2. Ahí está "activado" el entorno de pixi. Abrí el notebook que esta ahí, y correlo.

No seguiré trabajando en esto hoy.

@ctroupin
Copy link
Author

Gracias @emiliom , ahora examino eso.
A ver si consigo algo!

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