`__init__` and `__call__` methods are not cloudpickled
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 30/100
調査の方向性
まず issue の wrapt および pandas の reproducer を実行し、続いて cloudpickle が dumps と loads の際にデコレートされた関数と wrapper クラスをどのように処理するかを調べます。デシリアライズされた callable が wrapper の call と init の動作を維持し、例に示されている行数の出力も含まれると、作業は完了です。
索引モデルが issue の本文から書いたものです。
説明
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?
- 主要言語
- Python
- スター
- 1.9k
- フォーク
- 197
- 平均マージ
- 1日 10時間
- マージ済み PR(30日)
- 1
環境構築
このプロジェクトの環境構築ファイルはまだ確認していません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
cloudpipe/cloudpickle のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
cloudpipe/cloudpickle#593 · コメント 1 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 42/100
cloudpipe/cloudpickle#595 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 65/100
cloudpipe/cloudpickle#592 · コメント 2 件 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
cloudpipe/cloudpickle#589 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 20/100
cloudpipe/cloudpickle#587 ·
cloudpipe/cloudpickle の issue をすべて見る
似ている issue
-
good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
vllm-project/vllm-metal#822 ·
メンテナーはふだん 1 日以内に返信
-
vector-store
難易度 1/5 1〜3時間 初心者へのやさしさ 90/100
メンテナーはふだん 1 日以内に返信
-
[Bug]: chunk_span_bounds and _validated_chunk_spans reject Pydantic models ChunkSpan and AudioFileオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
BasedHardware/omi#19047 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信