def mkntype_ptype(pred, args, io, assgn, gsym, network): T_ptype = Type_n(assgn=assgn) T_ptype.add_apat( network, ActivityPattern( [[gsym.index('ptype' + str(len(pred.arity)), network, assgn)]])) T_rel = Type_n(assgn=assgn) T_rel.add_apat(network, ActivityPattern([[gsym.index('rel', network, assgn)]])) arglabels = ['arg' + str(i) for i in range(len(pred.arity))] argtypes = [Type_n(assgn=assgn) for l in arglabels] for T, l in zip(argtypes, arglabels): T.add_apat(network, ActivityPattern([[gsym.index(l, network, assgn)]])) # argtypes = [MeetType_n(pred.nu.__getattribute__(arglabel), # iota_assgn(arg,io,assgn)) # for arglabel,arg in zip(arglabels,args)] T_relpred = MeetType_n(T_rel, nu(pred, assgn), assgn) argtypesargs = [ MeetType_n(T_arg, iota_assgn(arg, io, assgn), assgn) for T_arg, arg in zip(argtypes, args) ] types = [] types.append(MeetType_n(T_ptype, T_relpred, assgn)) for i in range(len(argtypes)): if i is 0: types.append( MeetType_n(InhibitType_n(T_relpred), argtypesargs[0], assgn)) else: types.append( MeetType_n(InhibitType_n(argtypesargs[i - 1]), argtypesargs[i], assgn)) types.append(InhibitType_n(MeetType_n(T_ptype, argtypesargs[-1], assgn))) return StringType_n(types, assgn)
def mkntype_deptype(var, domain_type, body, assgn, gsym, network): T_lam = Type_n(assgn=assgn) T_lam.add_apat(network, ActivityPattern([[gsym.index('lambda', network, assgn)]])) T_dom = Type_n(assgn=assgn) T_dom.add_apat(network, ActivityPattern([[gsym.index('dom', network, assgn)]])) T_var = Type_n(assgn=assgn) var_index = gsym.index('var', network, assgn) T_var.add_apat(network, ActivityPattern([[var_index]])) assgn[var] = T_var T_start = MeetType_n(MeetType_n(T_lam, T_dom, assgn), MeetType_n(T_var, nu(domain_type, assgn), assgn), assgn) T_rng = Type_n(assgn=assgn) T_rng.add_apat(network, ActivityPattern([[gsym.index('rng', network, assgn)]])) T_body = Type_n(assgn=assgn) T_body.add_apat(network, nu(body, assgn).getapat(network)) return StringType_n([ T_start, MeetType_n( InhibitType_n( MeetType_n(T_dom, MeetType_n(T_var, nu(domain_type, assgn), assgn), assgn)), MeetType_n(T_rng, T_body, assgn), assgn), InhibitType_n(MeetType_n(T_lam, T_rng, assgn), assgn) ], assgn)
def getapat(self, network): inhibit_apat_list = [ i.getapat(network) for i in self.comps.base_type.to_inhibit ] return merge_apat_list([ ActivityPattern(i.neurons, i.vals * 0) for i in inhibit_apat_list ])
def mkntype_field(fld, io, assgn, gsym, network): #old_in_use = list(assgn['in_use']) T_field = Type_n(assgn=assgn) T_field.add_apat(network, ActivityPattern([[gsym.index('field', network, assgn)]])) T_label = Type_n(assgn=assgn) T_label.add_apat(network, ActivityPattern([[gsym.index('label', network, assgn)]])) T_field0 = labels.gettype_n(fld[0]) T_label_field0 = MeetType_n(T_label, T_field0, assgn) T_value = Type_n(assgn=assgn) T_value.add_apat(network, ActivityPattern([[gsym.index('value', network, assgn)]])) T_field1 = iota_assgn(fld[1], io, assgn) T_value_field1 = MeetType_n(T_value, T_field1, assgn) res = StringType_n([ MeetType_n(T_field, T_label_field0, assgn), MeetType_n(InhibitType_n(T_label_field0, assgn), T_value_field1, assgn), MeetType_n(InhibitType_n(T_value_field1, assgn), InhibitType_n(T_field, assgn), assgn) ], assgn) #assgn['in_use'] = old_in_use return res
def getapat(self, network, gsym=gensym_n, io=iota): if self.assgn is None: self.assgn = {'in_use': []} old_in_use = list(self.assgn['in_use']) postypes = [] for fld in self.rec.__dict__.items(): t = mkntype_field(fld, io, self.assgn, gsym, network) postypes.append(t) negtypes = [InhibitType_n(T, self.assgn) for T in postypes] T_rec = Type_n(assgn=self.assgn) T_rec.add_apat( network, ActivityPattern([[gsym.index('rec', network, self.assgn)]])) T_start = MeetType_n(T_rec, postypes[0], self.assgn) T_end = MeetType_n(InhibitType_n(T_rec), negtypes[-1], self.assgn) res = StringType_n([T_start] + [ MeetType_n(T1, T2, self.assgn) for T1, T2 in zip(negtypes[:-1], postypes[1:]) ] + [T_end], self.assgn).getapat(network) self.assgn['in_use'] = old_in_use return res
def add_grandmother(self, obj, network): if obj not in self.dict: self.dict[obj] = Type_n(obj) network.add_neuron(obj) self.dict[obj].add_apat(network, ActivityPattern([[len(network.neurons) - 1]]))
def add_switch_grandmother(self, network): n = network.add_switch_neuron(self.name) self.apats[network.name] = ActivityPattern([[len(network.neurons) - 1] ]) return n
from pprint import pprint from nu import Type, BType, PType, DepType, Pred, MeetType_n, FunType, InhibitType_n, StringType_n, Ty, iota, gensym_n, nu, and_n, MeetType, or_n, JoinType, labels, Rec, RecType from neurons import Network, Neuron, Synapse, ActivityPattern from utils import show, example example(1) #Types in general correspond to a pattern of activation on a given network. T = Type('MyType') print(show(nu(T))) N = Network() n1 = N.add_neuron() h1 = ActivityPattern([[0]]) Tn = nu(T) Tn.add_apat(N, h1) N.ntrace() Tn.create_n(N) N.display_history() print(Tn.query_n(N)) example(2) #We can do the same for a basic type. In this example T corresponds to the #activation of two neurons. T = BType('MyBasicType') print(show(nu(T))) N = Network() n1 = N.add_neuron() n2 = N.add_neuron() h1 = ActivityPattern([[0], [1]])
N.excite() print(N.history) N.inhibit() print(N.history) N.excite([1,2]) print(N.history) N.inhibit([1]) print(N.history) N.nontrace() N.inhibit() N.ntrace() h = ActivityPattern([[2]]) N.realize_apat(h) print(N.history) N.nontrace() N.inhibit() N.ntrace() h = ActivityPattern([[2],[1]]) N.realize_apat(h) print(N.history) N.nontrace() N.inhibit() N.ntrace() h = ActivityPattern([[2],[1],[1,2]],[[1],[1],[0,0]]) N.realize_apat(h)