У меня есть случайная функция Numpy ниже, называемая нормальной, и мне нужно ее перехватить, чтобы сохранить большое количество данных, но по сути у меня есть это, я пытаюсь сохранить объект и использовать его позже, но я, когда выбираю его объект сохраняет свое состояние, поэтому, когда я открепляю его, объект сохраняет его старое случайное состояние и отсоединяется от NumPY глобальное случайное состояние, есть ли способ обойти это / когда непеченые снова используют глобальное случайное состояние, а не протравленную версию
import pickle
from pprint import pprint
from typing import Any, Dict
from numpy.random import normal, seed
def generate_asset() -> Dict:
return {
"func": normal,
"args": [314.4, 408.6]
}
def get_sample(asset: Any) -> float:
value = asset['func'](*asset['args'])
return value
def pickle_asset(asset: Any) -> bytes:
return pickle.dumps(asset)
def load_pickled_asset(asset: bytes) -> Dict:
return pickle.loads(asset)
def main():
original_asset = generate_asset()
pprint(f'original asset: {original_asset}')
pickled_asset = pickle_asset(original_asset)
original_sample = get_sample(original_asset)
print(f'original sample: {original_sample}')
original_unpickled_asset = load_pickled_asset(pickled_asset)
original_unpickled_sample = get_sample(original_unpickled_asset)
pprint(f'unpickled sample: {original_unpickled_sample}')
print('RESETING SEED!!!!!!')
seed(42947295)
reseed_sample = get_sample(original_asset)
print(f'reseed_sample {reseed_sample}')
re_unpickled_asset = load_pickled_asset(pickled_asset)
re_unpickled_sample = get_sample(re_unpickled_asset)
print(f're_unpickled_asset {re_unpickled_sample}')
print('TESTING RESETING SEED AFTER UNPICKLE!!!!')
reseed_unpickled_asset = load_pickled_asset(pickled_asset)
seed(42295)
reseed_unpickled_sample = get_sample(reseed_unpickled_asset)
is_same = True if original_sample == original_unpickled_sample else False
print(f'Checking if original_sample and original_unpickled_sample are the same with original unpickle {is_same}')
print('Expected: True')
is_same = True if original_sample == reseed_sample else False
print(f'Checking if original_sample and reseed_sample are the same after reseeding{is_same}')
print('Expected: False')
is_same = True if original_sample == re_unpickled_sample else False
print(f'Checking if original_sample and re_unpickled_sample are the same with fresh unpickle{is_same}')
print('Expected: True')
is_same = True if original_sample == reseed_unpickled_sample else False
print(f'Checking if original_sample and reseed_unpickled_sample are the same after reseeding {is_same}')
print('Expected: True')
if __name__ == '__main__':
main()