예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
 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
     ])
예제 #4
0
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
예제 #5
0
 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
예제 #6
0
 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]]))
예제 #7
0
 def add_switch_grandmother(self, network):
     n = network.add_switch_neuron(self.name)
     self.apats[network.name] = ActivityPattern([[len(network.neurons) - 1]
                                                 ])
     return n
예제 #8
0
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]])
예제 #9
0
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)