print("Interacting with reality...") import os import numpy as np try: os.system("mkdir MemoriesWillNeverFade") #For the memory of survey of learning photonics. Appreciate all inspiring me except: pass class PhotonField(object): def __init__(self,dim): if not type(dim)==int: raise TypeError("Number of dimensions is an integer") if dim<1: raise ValueError("Number of dimensions must be more than 1") self.__dim=dim self.__shinies=[] def add(self, content): if not type(content) in {list, tuple}: content = (content,) for sub_content in content: if type(sub_content)==Shiny: _=len(sub_content.info[0]) if not _==self.__dim: raise ValueError(f"The source must be located in {self.__dim}-D space. But, it is located in {_}-D space") self.__shinies.append(sub_content) def observe(self, locations, moment): locations=np.array(locations) if not locations.shape==(self.__dim,): if not locations.shape[1]==self.__dim: raise ValueError("Observer's locations must be N×D array. N is number of observers D is dimensions of the entity") else: locations=np.array((locations,)) self.__clear_file() np.savetxt("MemoriesWillNeverFade/observers.wm",locations , delimiter=",") files=(open("MemoriesWillNeverFade/meta.wm","w"),open("MemoriesWillNeverFade/locations.wm","w"),open("MemoriesWillNeverFade/amplitudes.wm","w"),open("MemoriesWillNeverFade/frequencies.wm","w"),open("MemoriesWillNeverFade/phases.wm","w"),open("MemoriesWillNeverFade/result.wm","w")) files[0].write(str(self.__dim)+"\n"+str(len(self.__shinies))+"\n"+str(moment)+"\n"+str(locations.shape[0])) for glimmer in self.__shinies: if glimmer.info[1][0]<=moment<=glimmer.info[1][1]: files[1].write(str(glimmer.info[0])[1:-1]+"\n") files[2].write(str(glimmer.info[2])+"\n") files[3].write(str(glimmer.info[3])+"\n") files[4].write(str(glimmer.info[4])+"\n") for file in files: file.close() os.system("./renderer.bin") return np.genfromtxt("MemoriesWillNeverFade/result.wm",delimiter=";") def __clear_file(self): file=open("MemoriesWillNeverFade/result.wm","w") file.write("") file.close() class Shiny(object): def __init__(self, location, presence, amplitude, frequency, phase=0): if type(location) not in {list, tuple}: raise TypeError("Location must be a list or tuple") if type(presence) not in {list, tuple}: raise TypeError("Presence must be a list or tuple") if type(amplitude) not in {int, float}: raise TypeError("Amplitude must be a int or float") if type(frequency) not in {int, float}: raise TypeError("Frequency must be a int or float") if type(phase) not in {int, float}: raise TypeError("Phase must be a int or float") self.info=(location, presence, amplitude, frequency, phase)