-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathisomorphisms.py
More file actions
103 lines (95 loc) · 3.11 KB
/
Copy pathisomorphisms.py
File metadata and controls
103 lines (95 loc) · 3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# -*- coding: utf-8 -*-
#!/usr/bin/env python
from misc import indent
class Homomorphism(object):
def __init__(self,d,source,target, subtype):
self.values = d
self.source = source
self.target = target
self.subtype = subtype
def __call__(self, x):
try:
return self.values[x]
except KeyError:
return
def vcall(self,xvector):
return tuple(self(x) for x in xvector)
def __repr__(self):
result = "Homomorphism(\n"
for a,b in self.values.items():
result+= " %s->%s\n" % (a,b)
result+="from:\n"
result+=indent(repr(self.source))
result+="to:\n"
result+=indent(repr(self.target))
result+=")"
return result
def homo_wrt(self,subtype):
if self.source.rels_sizes(subtype) > self.target.rels_sizes(subtype):
return False
for r in subtype:
for t in self.source.relations[r]:
if not self.target.relations[r](*tuple(self(x) for x in t)):
return False
return True
class Isomorphism(object):
def __init__(self,d,source,target, subtype):
self.values = d
self.source = source
self.target = target
self.subtype = subtype
def __call__(self, x):
try:
return self.values[x]
except KeyError:
return
return self.values[x]
def inverse(self):
return Isomorphism({v:k for k,v in self.values.items()},self.target, self.source,self.subtype)
def vcall(self,xvector):
return tuple(self(x) for x in xvector)
def __repr__(self):
result = "Isomorphism(\n"
for a,b in self.values.items():
result+= " %s->%s\n" % (a,b)
result+="from:\n"
result+=indent(repr(self.source))
result+="to:\n"
result+=indent(repr(self.target))
result+=")"
return result
def iso_wrt(self,subtype):
if self.source.rels_sizes(subtype) != self.target.rels_sizes(subtype):
return False
for r in subtype:
for t in self.source.relations[r]:
if not self.target.relations[r](*tuple(self(x) for x in t)):
return False
return True
class Automorphism(object):
def __init__(self,d,model,subtype):
self.values = d
self.model = model
self.subtype = subtype
def __call__(self, x):
try:
return self.values[x]
except KeyError:
return
return self.values[x]
def vcall(self,xvector):
return tuple(self(x) for x in xvector)
def __repr__(self):
result = "Automorphism(\n"
for a,b in self.values.items():
result+= " %s->%s\n" % (a,b)
result+="from:\n"
result+=indent(repr(self.model))
result+=")"
return result
def aut_wrt(self,subtype):
for r in subtype:
for t in self.model.relations[r]:
if not self.model.relations[r](*tuple(self(x) for x in t)):
return False
return True