`__init__` and `__call__` methods are not cloudpickled
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 30/100
Línea de trabajo
Empieza ejecutando el reproductor del issue para wrapt y pandas y, a continuación, inspecciona cómo cloudpickle gestiona las funciones decoradas y las clases wrapper durante los dumps y loads. El trabajo estará completo cuando el callable deserializado conserve el comportamiento de call y init del wrapper, incluida la salida del recuento de filas mostrada en el ejemplo.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Overwriting the logic inside __call__ method of the wrapper:
import cloudpickle
import wrapt
import pandas as pd
def _num_of_rows_wrapper() -> Any:
class FunctionWrapper(wrapt.FunctionWrapper):
def __call__(self, *args: Any, **kwargs: Any) -> Any:
dataframe = super(FunctionWrapper, self).__call__(*args, **kwargs)
num_of_rows = len(dataframe.index)
print(f"Num of rows: {num_of_rows}")
return dataframe
return FunctionWrapper
def num_of_rows():
@wrapt.decorator(proxy=_num_of_rows_wrapper())
def wrapper(wrapped, instance, args, kwargs) -> None:
return wrapped(*args, **kwargs)
return wrapper
@num_of_rows()
def prepare_data():
data = [["id1", 10], ["id2", 15], ["id3", 14]]
pandas_df = pd.DataFrame(data, columns=["id", "value"])
return pandas_df
Running the decorated function works as expected (num of rows printed):
prepare_data()
Once it is cloudpickled and loaded, __call__ gets lost (num of rows is not printed)
dump = cloudpickle.dumps(prepare_data)
loaded = cloudpickle.loads(dump)
loaded()
Same happens for the __init__ . Any suggestion for keeping those functions with cloudpickle?
- Lenguaje dominante
- Python
- Estrellas
- 1.9k
- Forks
- 197
- Merge medio
- 1 d 10 h
- PR fusionados (30 d)
- 1
Preparar el entorno
Aún no hemos revisado los archivos de configuración de este proyecto. Empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de cloudpipe/cloudpickle
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
cloudpipe/cloudpickle#593 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
cloudpipe/cloudpickle#595 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
cloudpipe/cloudpickle#592 · 2 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
cloudpipe/cloudpickle#589 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
cloudpipe/cloudpickle#587 ·
Todos los issues de cloudpipe/cloudpickle
Issues similares
-
Broken links found in docsAbiertodocs pydanty:is-working
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
pydantic/pydantic-ai#8863 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
run-llama/llama_index#23278 ·
Los mantenedores suelen responder en 2 días
-
documentation from-review-extraction github-actions priority: low severity:nit
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
LearningCircuit/local-deep-research#6946 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
oracle/langchain-oracle#323 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
tenstorrent/tt-metal#58057 · 1 comentario ·
Los mantenedores suelen responder en 1 día