"""Authored bounded mutation experiment. No files, network, model or customer data."""
import copy,json,platform
import numpy as np
def demo():
 original={'weights':[2,4],'tag':'base'};alias=original;shallow=copy.copy(original);deep=copy.deepcopy(original)
 shallow['weights'][0]=99;shallow['tag']='shallow'
 assert alias is original and shallow is not original
 assert shallow['weights'] is original['weights'] and deep['weights'] is not original['weights']
 assert original=={'weights':[99,4],'tag':'base'} and deep=={'weights':[2,4],'tag':'base'}
 x=np.array([10,20,30,40],dtype=np.int64);view=x[1:3];advanced=x[[1,2]];explicit=view.copy()
 shares=[bool(np.shares_memory(x,v)) for v in [view,advanced,explicit]];assert shares==[True,False,False]
 view[0]=77;advanced[1]=88;explicit[0]=66
 assert x.tolist()==[10,77,30,40] and view.tolist()==[77,30]
 assert advanced.tolist()==[20,88] and explicit.tolist()==[66,30]
 protected_dict={'weights':[2,4],'tag':'base'};working_dict=copy.deepcopy(protected_dict);working_dict['weights'][0]=55
 protected_array=np.array([10,20,30,40],dtype=np.int64);working_array=protected_array[1:3].copy();working_array[0]=55
 assert protected_dict=={'weights':[2,4],'tag':'base'} and working_dict['weights']==[55,4]
 assert protected_array.tolist()==[10,20,30,40] and working_array.tolist()==[55,30] and not np.shares_memory(protected_array,working_array)
 return {'runtime':platform.python_version(),'numpy':np.__version__,'dict':{'original':original,'shallow':shallow,'deep':deep,'alias_same_object':alias is original,'nested_shared':True},'numeric_array':{'original':x.tolist(),'view':view.tolist(),'advanced_copy':advanced.tolist(),'explicit_copy':explicit.tolist(),'shares_memory_before_mutation':shares},'separate_corrected_paths':{'dict_source':protected_dict,'dict_working':working_dict,'array_source':protected_array.tolist(),'array_working':working_array.tolist()},'scope':'Only built-in dict/list and numeric ndarray; no custom classes/object-dtype/reshape claim.'}
if __name__=='__main__':print(json.dumps(demo(),ensure_ascii=True,indent=2))
