fuzzy-dl-owl2 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. fuzzy_dl_owl2/__init__.py +2 -0
  2. fuzzy_dl_owl2/fuzzydl/__init__.py +23 -0
  3. fuzzy_dl_owl2/fuzzydl/assertion/__init__.py +2 -0
  4. fuzzy_dl_owl2/fuzzydl/assertion/assertion.py +72 -0
  5. fuzzy_dl_owl2/fuzzydl/assertion/atomic_assertion.py +19 -0
  6. fuzzy_dl_owl2/fuzzydl/concept/__init__.py +13 -0
  7. fuzzy_dl_owl2/fuzzydl/concept/all_some_concept.py +85 -0
  8. fuzzy_dl_owl2/fuzzydl/concept/approximation_concept.py +147 -0
  9. fuzzy_dl_owl2/fuzzydl/concept/atomic_concept.py +91 -0
  10. fuzzy_dl_owl2/fuzzydl/concept/choquet_integral.py +64 -0
  11. fuzzy_dl_owl2/fuzzydl/concept/concept.py +230 -0
  12. fuzzy_dl_owl2/fuzzydl/concept/concrete/__init__.py +10 -0
  13. fuzzy_dl_owl2/fuzzydl/concept/concrete/crisp_concrete_concept.py +60 -0
  14. fuzzy_dl_owl2/fuzzydl/concept/concrete/fuzzy_concrete_concept.py +63 -0
  15. fuzzy_dl_owl2/fuzzydl/concept/concrete/fuzzy_number/__init__.py +1 -0
  16. fuzzy_dl_owl2/fuzzydl/concept/concrete/fuzzy_number/triangular_fuzzy_number.py +127 -0
  17. fuzzy_dl_owl2/fuzzydl/concept/concrete/left_concrete_concept.py +70 -0
  18. fuzzy_dl_owl2/fuzzydl/concept/concrete/linear_concrete_concept.py +70 -0
  19. fuzzy_dl_owl2/fuzzydl/concept/concrete/modified_concrete_concept.py +66 -0
  20. fuzzy_dl_owl2/fuzzydl/concept/concrete/right_concrete_concept.py +70 -0
  21. fuzzy_dl_owl2/fuzzydl/concept/concrete/trapezoidal_concrete_concept.py +96 -0
  22. fuzzy_dl_owl2/fuzzydl/concept/concrete/triangular_concrete_concept.py +89 -0
  23. fuzzy_dl_owl2/fuzzydl/concept/ext_threshold_concept.py +77 -0
  24. fuzzy_dl_owl2/fuzzydl/concept/has_value_concept.py +51 -0
  25. fuzzy_dl_owl2/fuzzydl/concept/implies_concept.py +144 -0
  26. fuzzy_dl_owl2/fuzzydl/concept/interface/__init__.py +6 -0
  27. fuzzy_dl_owl2/fuzzydl/concept/interface/has_concept_interface.py +17 -0
  28. fuzzy_dl_owl2/fuzzydl/concept/interface/has_concepts_interface.py +18 -0
  29. fuzzy_dl_owl2/fuzzydl/concept/interface/has_role_concept_interface.py +14 -0
  30. fuzzy_dl_owl2/fuzzydl/concept/interface/has_role_interface.py +15 -0
  31. fuzzy_dl_owl2/fuzzydl/concept/interface/has_value_interface.py +21 -0
  32. fuzzy_dl_owl2/fuzzydl/concept/interface/has_weighted_concepts_interface.py +29 -0
  33. fuzzy_dl_owl2/fuzzydl/concept/modified/__init__.py +3 -0
  34. fuzzy_dl_owl2/fuzzydl/concept/modified/linearly_modified_concept.py +32 -0
  35. fuzzy_dl_owl2/fuzzydl/concept/modified/modified_concept.py +59 -0
  36. fuzzy_dl_owl2/fuzzydl/concept/modified/triangularly_modified_concept.py +33 -0
  37. fuzzy_dl_owl2/fuzzydl/concept/negated_nominal.py +42 -0
  38. fuzzy_dl_owl2/fuzzydl/concept/operator_concept.py +707 -0
  39. fuzzy_dl_owl2/fuzzydl/concept/owa_concept.py +57 -0
  40. fuzzy_dl_owl2/fuzzydl/concept/qowa_concept.py +62 -0
  41. fuzzy_dl_owl2/fuzzydl/concept/quasi_sugeno_integral.py +46 -0
  42. fuzzy_dl_owl2/fuzzydl/concept/self_concept.py +45 -0
  43. fuzzy_dl_owl2/fuzzydl/concept/string_concept.py +35 -0
  44. fuzzy_dl_owl2/fuzzydl/concept/sugeno_integral.py +83 -0
  45. fuzzy_dl_owl2/fuzzydl/concept/threshold_concept.py +81 -0
  46. fuzzy_dl_owl2/fuzzydl/concept/truth_concept.py +83 -0
  47. fuzzy_dl_owl2/fuzzydl/concept/value_concept.py +67 -0
  48. fuzzy_dl_owl2/fuzzydl/concept/weighted_concept.py +55 -0
  49. fuzzy_dl_owl2/fuzzydl/concept/weighted_max_concept.py +63 -0
  50. fuzzy_dl_owl2/fuzzydl/concept/weighted_min_concept.py +57 -0
  51. fuzzy_dl_owl2/fuzzydl/concept/weighted_sum_concept.py +62 -0
  52. fuzzy_dl_owl2/fuzzydl/concept/weighted_sum_zero_concept.py +62 -0
  53. fuzzy_dl_owl2/fuzzydl/concept_equivalence.py +20 -0
  54. fuzzy_dl_owl2/fuzzydl/concrete_feature.py +94 -0
  55. fuzzy_dl_owl2/fuzzydl/degree/__init__.py +4 -0
  56. fuzzy_dl_owl2/fuzzydl/degree/degree.py +79 -0
  57. fuzzy_dl_owl2/fuzzydl/degree/degree_expression.py +57 -0
  58. fuzzy_dl_owl2/fuzzydl/degree/degree_numeric.py +57 -0
  59. fuzzy_dl_owl2/fuzzydl/degree/degree_variable.py +54 -0
  60. fuzzy_dl_owl2/fuzzydl/domain_axiom.py +8 -0
  61. fuzzy_dl_owl2/fuzzydl/exception/__init__.py +2 -0
  62. fuzzy_dl_owl2/fuzzydl/exception/fuzzy_ontology_exception.py +4 -0
  63. fuzzy_dl_owl2/fuzzydl/exception/inconsistent_ontology_exception.py +4 -0
  64. fuzzy_dl_owl2/fuzzydl/feature_function.py +148 -0
  65. fuzzy_dl_owl2/fuzzydl/fuzzydl_to_owl2.py +920 -0
  66. fuzzy_dl_owl2/fuzzydl/fuzzydl_to_owl2_java.py +953 -0
  67. fuzzy_dl_owl2/fuzzydl/general_concept_inclusion.py +82 -0
  68. fuzzy_dl_owl2/fuzzydl/individual/__init__.py +3 -0
  69. fuzzy_dl_owl2/fuzzydl/individual/created_individual.py +219 -0
  70. fuzzy_dl_owl2/fuzzydl/individual/individual.py +113 -0
  71. fuzzy_dl_owl2/fuzzydl/individual/representative_individual.py +37 -0
  72. fuzzy_dl_owl2/fuzzydl/knowledge_base.py +9037 -0
  73. fuzzy_dl_owl2/fuzzydl/label.py +32 -0
  74. fuzzy_dl_owl2/fuzzydl/milp/__init__.py +7 -0
  75. fuzzy_dl_owl2/fuzzydl/milp/expression.py +186 -0
  76. fuzzy_dl_owl2/fuzzydl/milp/inequation.py +55 -0
  77. fuzzy_dl_owl2/fuzzydl/milp/milp_helper.py +787 -0
  78. fuzzy_dl_owl2/fuzzydl/milp/show_variables_helper.py +151 -0
  79. fuzzy_dl_owl2/fuzzydl/milp/solution.py +45 -0
  80. fuzzy_dl_owl2/fuzzydl/milp/term.py +76 -0
  81. fuzzy_dl_owl2/fuzzydl/milp/variable.py +89 -0
  82. fuzzy_dl_owl2/fuzzydl/modifier/__init__.py +3 -0
  83. fuzzy_dl_owl2/fuzzydl/modifier/linear_modifier.py +76 -0
  84. fuzzy_dl_owl2/fuzzydl/modifier/modifier.py +39 -0
  85. fuzzy_dl_owl2/fuzzydl/modifier/triangular_modifier.py +76 -0
  86. fuzzy_dl_owl2/fuzzydl/parser/ParserConstants.py +406 -0
  87. fuzzy_dl_owl2/fuzzydl/parser/__init__.py +1 -0
  88. fuzzy_dl_owl2/fuzzydl/parser/dl_parser.py +2029 -0
  89. fuzzy_dl_owl2/fuzzydl/parser/ebnf.lark +290 -0
  90. fuzzy_dl_owl2/fuzzydl/parser/larkx.py +70 -0
  91. fuzzy_dl_owl2/fuzzydl/primitive_concept_definition.py +81 -0
  92. fuzzy_dl_owl2/fuzzydl/query/__init__.py +14 -0
  93. fuzzy_dl_owl2/fuzzydl/query/all_instances_query.py +50 -0
  94. fuzzy_dl_owl2/fuzzydl/query/bnp_query.py +22 -0
  95. fuzzy_dl_owl2/fuzzydl/query/defuzzify/__init__.py +4 -0
  96. fuzzy_dl_owl2/fuzzydl/query/defuzzify/defuzzify_query.py +76 -0
  97. fuzzy_dl_owl2/fuzzydl/query/defuzzify/lom_defuzzify_query.py +19 -0
  98. fuzzy_dl_owl2/fuzzydl/query/defuzzify/mom_defuzzify_query.py +88 -0
  99. fuzzy_dl_owl2/fuzzydl/query/defuzzify/som_defuzzify_query.py +20 -0
  100. fuzzy_dl_owl2/fuzzydl/query/instance_query.py +19 -0
  101. fuzzy_dl_owl2/fuzzydl/query/kb_satisfiable_query.py +32 -0
  102. fuzzy_dl_owl2/fuzzydl/query/max/__init__.py +5 -0
  103. fuzzy_dl_owl2/fuzzydl/query/max/max_instance_query.py +45 -0
  104. fuzzy_dl_owl2/fuzzydl/query/max/max_query.py +31 -0
  105. fuzzy_dl_owl2/fuzzydl/query/max/max_related_query.py +45 -0
  106. fuzzy_dl_owl2/fuzzydl/query/max/max_satisfiable_query.py +73 -0
  107. fuzzy_dl_owl2/fuzzydl/query/max/max_subsumes_query.py +64 -0
  108. fuzzy_dl_owl2/fuzzydl/query/min/__init__.py +5 -0
  109. fuzzy_dl_owl2/fuzzydl/query/min/min_instance_query.py +50 -0
  110. fuzzy_dl_owl2/fuzzydl/query/min/min_query.py +31 -0
  111. fuzzy_dl_owl2/fuzzydl/query/min/min_related_query.py +57 -0
  112. fuzzy_dl_owl2/fuzzydl/query/min/min_satisfiable_query.py +80 -0
  113. fuzzy_dl_owl2/fuzzydl/query/min/min_subsumes_query.py +65 -0
  114. fuzzy_dl_owl2/fuzzydl/query/query.py +38 -0
  115. fuzzy_dl_owl2/fuzzydl/query/related_query.py +15 -0
  116. fuzzy_dl_owl2/fuzzydl/query/satisfiable_query.py +37 -0
  117. fuzzy_dl_owl2/fuzzydl/query/subsumption_query.py +20 -0
  118. fuzzy_dl_owl2/fuzzydl/range_axiom.py +7 -0
  119. fuzzy_dl_owl2/fuzzydl/relation.py +47 -0
  120. fuzzy_dl_owl2/fuzzydl/restriction/__init__.py +2 -0
  121. fuzzy_dl_owl2/fuzzydl/restriction/has_value_restriction.py +16 -0
  122. fuzzy_dl_owl2/fuzzydl/restriction/restriction.py +34 -0
  123. fuzzy_dl_owl2/fuzzydl/role_parent_with_degree.py +10 -0
  124. fuzzy_dl_owl2/fuzzydl/util/__init__.py +3 -0
  125. fuzzy_dl_owl2/fuzzydl/util/config_reader.py +56 -0
  126. fuzzy_dl_owl2/fuzzydl/util/constants.py +424 -0
  127. fuzzy_dl_owl2/fuzzydl/util/util.py +73 -0
  128. fuzzy_dl_owl2/fuzzyowl2/__init__.py +5 -0
  129. fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2.py +1513 -0
  130. fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2_java.py +1409 -0
  131. fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2_to_fuzzydl.py +917 -0
  132. fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2_to_fuzzydl_java.py +956 -0
  133. fuzzy_dl_owl2/fuzzyowl2/owl_types/__init__.py +0 -0
  134. fuzzy_dl_owl2/fuzzyowl2/owl_types/choquet_concept.py +19 -0
  135. fuzzy_dl_owl2/fuzzyowl2/owl_types/concept_definition.py +14 -0
  136. fuzzy_dl_owl2/fuzzyowl2/owl_types/fuzzy_datatype.py +22 -0
  137. fuzzy_dl_owl2/fuzzyowl2/owl_types/fuzzy_modifier.py +4 -0
  138. fuzzy_dl_owl2/fuzzyowl2/owl_types/fuzzy_nominal_concept.py +19 -0
  139. fuzzy_dl_owl2/fuzzyowl2/owl_types/fuzzy_property.py +5 -0
  140. fuzzy_dl_owl2/fuzzyowl2/owl_types/left_shoulder_function.py +17 -0
  141. fuzzy_dl_owl2/fuzzyowl2/owl_types/linear_function.py +17 -0
  142. fuzzy_dl_owl2/fuzzyowl2/owl_types/linear_modifier.py +13 -0
  143. fuzzy_dl_owl2/fuzzyowl2/owl_types/modified_concept.py +19 -0
  144. fuzzy_dl_owl2/fuzzyowl2/owl_types/modified_function.py +17 -0
  145. fuzzy_dl_owl2/fuzzyowl2/owl_types/modified_property.py +15 -0
  146. fuzzy_dl_owl2/fuzzyowl2/owl_types/owa_concept.py +19 -0
  147. fuzzy_dl_owl2/fuzzyowl2/owl_types/property_definition.py +10 -0
  148. fuzzy_dl_owl2/fuzzyowl2/owl_types/qowa_concept.py +19 -0
  149. fuzzy_dl_owl2/fuzzyowl2/owl_types/quasi_sugeno_concept.py +21 -0
  150. fuzzy_dl_owl2/fuzzyowl2/owl_types/right_shoulder_function.py +17 -0
  151. fuzzy_dl_owl2/fuzzyowl2/owl_types/sugeno_concept.py +21 -0
  152. fuzzy_dl_owl2/fuzzyowl2/owl_types/trapezoidal_function.py +25 -0
  153. fuzzy_dl_owl2/fuzzyowl2/owl_types/triangular_function.py +21 -0
  154. fuzzy_dl_owl2/fuzzyowl2/owl_types/triangular_modifer.py +21 -0
  155. fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_concept.py +19 -0
  156. fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_max_concept.py +15 -0
  157. fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_min_concept.py +15 -0
  158. fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_sum_concept.py +15 -0
  159. fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_sum_zero_concept.py +15 -0
  160. fuzzy_dl_owl2/fuzzyowl2/parser/__init__.py +1 -0
  161. fuzzy_dl_owl2/fuzzyowl2/parser/owl2_parser.py +491 -0
  162. fuzzy_dl_owl2/fuzzyowl2/util/__init__.py +1 -0
  163. fuzzy_dl_owl2/fuzzyowl2/util/constants.py +112 -0
  164. fuzzy_dl_owl2-1.0.0.dist-info/LICENSE +427 -0
  165. fuzzy_dl_owl2-1.0.0.dist-info/METADATA +299 -0
  166. fuzzy_dl_owl2-1.0.0.dist-info/RECORD +167 -0
  167. fuzzy_dl_owl2-1.0.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,424 @@
1
+ import collections.abc
2
+ import enum
3
+ import os
4
+ import re
5
+ import typing
6
+
7
+ import pyparsing as pp
8
+ from gurobipy import GRB
9
+
10
+ SEPARATOR: str = "-" * 25
11
+ STAR_SEPARATOR: str = "*" * 25
12
+ NUMBER = typing.Union[int, float]
13
+ RESULTS_PATH: str = os.path.join(".", "results")
14
+
15
+ if not os.path.exists(RESULTS_PATH):
16
+ os.makedirs(RESULTS_PATH)
17
+
18
+
19
+ class ConcreteFeatureType(enum.Enum):
20
+ STRING = 0
21
+ INTEGER = 1
22
+ REAL = 2
23
+ BOOLEAN = 3
24
+
25
+ def __repr__(self) -> str:
26
+ return self.name
27
+
28
+ def __str__(self) -> str:
29
+ return self.name
30
+
31
+
32
+ class FeatureFunctionType(enum.Enum):
33
+ ATOMIC = 0
34
+ NUMBER = 1
35
+ SUM = 2
36
+ SUBTRACTION = 3
37
+ PRODUCT = 5
38
+
39
+ def __repr__(self) -> str:
40
+ return self.name
41
+
42
+ def __str__(self) -> str:
43
+ return self.name
44
+
45
+
46
+ class BlockingDynamicType(enum.Enum):
47
+ NO_BLOCKING = 0
48
+ SUBSET_BLOCKING = 1
49
+ SET_BLOCKING = 2
50
+ DOUBLE_BLOCKING = 3
51
+ ANYWHERE_SUBSET_BLOCKING = 4
52
+ ANYWHERE_SET_BLOCKING = 5
53
+ ANYWHERE_DOUBLE_BLOCKING = 6
54
+
55
+ def __repr__(self) -> str:
56
+ return self.name
57
+
58
+ def __str__(self) -> str:
59
+ return self.name
60
+
61
+
62
+ class KnowledgeBaseRules(enum.Enum):
63
+ RULE_ATOMIC = 0
64
+ RULE_COMPLEMENT = 1
65
+ RULE_GOEDEL_AND = 2
66
+ RULE_LUKASIEWICZ_AND = 3
67
+ RULE_GOEDEL_OR = 4
68
+ RULE_LUKASIEWICZ_OR = 5
69
+ RULE_GOEDEL_SOME = 6
70
+ RULE_LUKASIEWICZ_SOME = 7
71
+ RULE_GOEDEL_ALL = 8
72
+ RULE_LUKASIEWICZ_ALL = 9
73
+ RULE_TOP = 10
74
+ RULE_BOTTOM = 11
75
+ RULE_GOEDEL_IMPLIES = 12
76
+ RULE_NOT_GOEDEL_IMPLIES = 13
77
+ RULE_CONCRETE = 14
78
+ RULE_NOT_CONCRETE = 15
79
+ RULE_MODIFIED = 16
80
+ RULE_NOT_MODIFIED = 17
81
+ RULE_DATATYPE = 18
82
+ RULE_NOT_DATATYPE = 19
83
+ RULE_FUZZY_NUMBER = 20
84
+ RULE_NOT_FUZZY_NUMBER = 21
85
+ RULE_WEIGHTED = 22
86
+ RULE_NOT_WEIGHTED = 23
87
+ RULE_THRESHOLD = 24
88
+ RULE_NOT_THRESHOLD = 25
89
+ RULE_OWA = 26
90
+ RULE_NOT_OWA = 27
91
+ RULE_W_SUM = 28
92
+ RULE_NOT_W_SUM = 29
93
+ RULE_CHOQUET_INTEGRAL = 30
94
+ RULE_NOT_CHOQUET_INTEGRAL = 31
95
+ RULE_SUGENO_INTEGRAL = 32
96
+ RULE_NOT_SUGENO_INTEGRAL = 33
97
+ RULE_QUASI_SUGENO_INTEGRAL = 34
98
+ RULE_NOT_QUASI_SUGENO_INTEGRAL = 35
99
+ RULE_SELF = 36
100
+ RULE_NOT_SELF = 37
101
+ RULE_W_MIN = 38
102
+ RULE_NOT_W_MIN = 39
103
+ RULE_W_MAX = 40
104
+ RULE_NOT_W_MAX = 41
105
+ RULE_W_SUM_ZERO = 42
106
+ RULE_NOT_W_SUM_ZERO = 43
107
+ RULE_HAS_VALUE = 44
108
+ RULE_NOT_HAS_VALUE = 45
109
+ RULE_ZADEH_IMPLIES = 46
110
+ RULE_NOT_ZADEH_IMPLIES = 47
111
+
112
+ def __repr__(self) -> str:
113
+ return str(self)
114
+
115
+ def __str__(self) -> str:
116
+ return self.name.replace("RULE_", "")
117
+
118
+
119
+ class LogicOperatorType(enum.Enum):
120
+ LUKASIEWICZ = 0
121
+ GOEDEL = 1
122
+ KLEENE_DIENES = 2
123
+ ZADEH = 3
124
+
125
+ def __repr__(self) -> str:
126
+ return self.name
127
+
128
+ def __str__(self) -> str:
129
+ return self.name
130
+
131
+
132
+ class ConceptType(enum.Enum):
133
+ AND = 0
134
+ GOEDEL_AND = 1
135
+ LUKASIEWICZ_AND = 2
136
+ OR = 3
137
+ GOEDEL_OR = 4
138
+ LUKASIEWICZ_OR = 5
139
+ SOME = 6
140
+ ALL = 7
141
+ UPPER_APPROX = 8
142
+ LOWER_APPROX = 9
143
+ FUZZY_NUMBER_COMPLEMENT = 10
144
+ TIGHT_UPPER_APPROX = 11
145
+ TIGHT_LOWER_APPROX = 12
146
+ LOOSE_UPPER_APPROX = 13
147
+ LOOSE_LOWER_APPROX = 14
148
+ GOEDEL_IMPLIES = 15
149
+ NOT_GOEDEL_IMPLIES = 16
150
+ ATOMIC = 17
151
+ COMPLEMENT = 18
152
+ TOP = 19
153
+ BOTTOM = 20
154
+ AT_MOST_VALUE = 21
155
+ AT_LEAST_VALUE = 22
156
+ EXACT_VALUE = 23
157
+ NOT_AT_MOST_VALUE = 24
158
+ NOT_AT_LEAST_VALUE = 25
159
+ NOT_EXACT_VALUE = 26
160
+ WEIGHTED = 27
161
+ NOT_WEIGHTED = 28
162
+ W_SUM = 29
163
+ NOT_W_SUM = 30
164
+ POS_THRESHOLD = 31
165
+ NOT_POS_THRESHOLD = 32
166
+ NEG_THRESHOLD = 33
167
+ NOT_NEG_THRESHOLD = 34
168
+ EXT_POS_THRESHOLD = 35
169
+ NOT_EXT_POS_THRESHOLD = 36
170
+ EXT_NEG_THRESHOLD = 37
171
+ NOT_EXT_NEG_THRESHOLD = 38
172
+ CONCRETE = 39
173
+ CONCRETE_COMPLEMENT = 40
174
+ MODIFIED = 41
175
+ MODIFIED_COMPLEMENT = 42
176
+ SELF = 43
177
+ FUZZY_NUMBER = 44
178
+ OWA = 45
179
+ QUANTIFIED_OWA = 46
180
+ NOT_OWA = 47
181
+ NOT_QUANTIFIED_OWA = 48
182
+ CHOQUET_INTEGRAL = 49
183
+ SUGENO_INTEGRAL = 50
184
+ QUASI_SUGENO_INTEGRAL = 51
185
+ NOT_CHOQUET_INTEGRAL = 52
186
+ NOT_SUGENO_INTEGRAL = 53
187
+ NOT_QUASI_SUGENO_INTEGRAL = 54
188
+ W_MAX = 55
189
+ NOT_W_MAX = 56
190
+ W_MIN = 57
191
+ NOT_W_MIN = 58
192
+ W_SUM_ZERO = 59
193
+ NOT_W_SUM_ZERO = 60
194
+ NOT_SELF = 61
195
+ HAS_VALUE = 62
196
+ NOT_HAS_VALUE = 63
197
+ ZADEH_IMPLIES = 64
198
+ NOT_ZADEH_IMPLIES = 65
199
+
200
+ def __repr__(self) -> str:
201
+ return self.name
202
+
203
+ def __str__(self) -> str:
204
+ return self.name
205
+
206
+
207
+ class CreatedIndividualBlockingType(enum.Enum):
208
+ BLOCKED = 0
209
+ NOT_BLOCKED = 1
210
+ UNCHECKED = 2
211
+
212
+ def __repr__(self) -> str:
213
+ return self.name
214
+
215
+ def __str__(self) -> str:
216
+ return self.name
217
+
218
+
219
+ class RepresentativeIndividualType(enum.Enum):
220
+ GREATER_EQUAL = 0
221
+ LESS_EQUAL = 1
222
+
223
+ def __repr__(self) -> str:
224
+ return self.name
225
+
226
+ def __str__(self) -> str:
227
+ return self.name
228
+
229
+
230
+ class InequalityType(enum.StrEnum):
231
+ GREATER_THAN = ">"
232
+ LESS_THAN = "<"
233
+ EQUAL = "="
234
+
235
+ def __repr__(self) -> str:
236
+ return self.name
237
+
238
+ def __str__(self) -> str:
239
+ return self.value
240
+
241
+
242
+ class VariableType(enum.StrEnum):
243
+ BINARY = GRB.BINARY
244
+ CONTINUOUS = GRB.CONTINUOUS
245
+ INTEGER = GRB.INTEGER
246
+ SEMI_CONTINUOUS = GRB.SEMICONT
247
+
248
+ def __repr__(self) -> str:
249
+ return self.name
250
+
251
+ def __str__(self) -> str:
252
+ return self.name
253
+
254
+
255
+ class FuzzyDLKeyword(enum.Enum):
256
+ MAX_INSTANCE_QUERY = pp.CaselessKeyword("max-instance?")
257
+ MIN_INSTANCE_QUERY = pp.CaselessKeyword("min-instance?")
258
+ ALL_INSTANCES_QUERY = pp.CaselessKeyword("all-instances?")
259
+ MAX_RELATED_QUERY = pp.CaselessKeyword("max-related?")
260
+ MIN_RELATED_QUERY = pp.CaselessKeyword("min-related?")
261
+ MAX_SUBS_QUERY = pp.CaselessKeyword("max-subs?")
262
+ MAX_G_SUBS_QUERY = pp.CaselessKeyword("max-g-subs?")
263
+ MAX_L_SUBS_QUERY = pp.CaselessKeyword("max-l-subs?")
264
+ MAX_KD_SUBS_QUERY = pp.CaselessKeyword("max-kd-subs?")
265
+ MIN_SUBS_QUERY = pp.CaselessKeyword("min-subs?")
266
+ MIN_G_SUBS_QUERY = pp.CaselessKeyword("min-g-subs?")
267
+ MIN_L_SUBS_QUERY = pp.CaselessKeyword("min-l-subs?")
268
+ MIN_KD_SUBS_QUERY = pp.CaselessKeyword("min-kd-subs?")
269
+ MAX_SAT_QUERY = pp.CaselessKeyword("max-sat?")
270
+ MIN_SAT_QUERY = pp.CaselessKeyword("min-sat?")
271
+ MAX_VAR_QUERY = pp.CaselessKeyword("max-var?")
272
+ MIN_VAR_QUERY = pp.CaselessKeyword("min-var?")
273
+ SAT_QUERY = pp.CaselessKeyword("sat?")
274
+ DEFUZZIFY_LOM_QUERY = pp.CaselessKeyword("defuzzify-lom?")
275
+ DEFUZZIFY_SOM_QUERY = pp.CaselessKeyword("defuzzify-som?")
276
+ DEFUZZIFY_MOM_QUERY = pp.CaselessKeyword("defuzzify-mom?")
277
+ BNP_QUERY = pp.CaselessKeyword("bnp?")
278
+ INSTANCE = pp.CaselessKeyword("instance")
279
+ DEFINE_TRUTH_CONSTANT = pp.CaselessKeyword("define-truth-constant")
280
+ DEFINE_CONCEPT = pp.CaselessKeyword("define-concept")
281
+ DEFINE_PRIMITIVE_CONCEPT = pp.CaselessKeyword("define-primitive-concept")
282
+ EQUIVALENT_CONCEPTS = pp.CaselessKeyword("equivalent-concepts")
283
+ DEFINE_FUZZY_CONCEPT = pp.CaselessKeyword("define-fuzzy-concept")
284
+ DEFINE_FUZZY_NUMBER = pp.CaselessKeyword("define-fuzzy-number")
285
+ DEFINE_FUZZY_NUMBER_RANGE = pp.CaselessKeyword("define-fuzzy-number-range")
286
+ DEFINE_FUZZY_SIMILARITY = pp.CaselessKeyword("define-fuzzy-similarity")
287
+ DEFINE_FUZZY_EQUIVALENCE = pp.CaselessKeyword("define-fuzzy-equivalence")
288
+ RELATED = pp.CaselessKeyword("related")
289
+ DEFINE_MODIFIER = pp.CaselessKeyword("define-modifier")
290
+ FUNCTIONAL = pp.CaselessKeyword("functional")
291
+ TRANSITIVE = pp.CaselessKeyword("transitive")
292
+ REFLEXIVE = pp.CaselessKeyword("reflexive")
293
+ SYMMETRIC = pp.CaselessKeyword("symmetric")
294
+ IMPLIES_ROLE = pp.CaselessKeyword("implies-role")
295
+ INVERSE = pp.CaselessKeyword("inverse")
296
+ INVERSE_FUNCTIONAL = pp.CaselessKeyword("inverse-functional")
297
+ DISJOINT = pp.CaselessKeyword("disjoint")
298
+ DISJOINT_UNION = pp.CaselessKeyword("disjoint-union")
299
+ RANGE = pp.CaselessKeyword("range")
300
+ DOMAIN = pp.CaselessKeyword("domain")
301
+ CONSTRAINTS = pp.CaselessKeyword("constraints")
302
+ DEFINE_FUZZY_LOGIC = pp.CaselessKeyword("define-fuzzy-logic")
303
+ CRISP_CONCEPT = pp.CaselessKeyword("crisp-concept")
304
+ CRISP_ROLE = pp.CaselessKeyword("crisp-role")
305
+ AND = pp.CaselessKeyword("and")
306
+ GOEDEL_AND = pp.CaselessKeyword("g-and")
307
+ LUKASIEWICZ_AND = pp.CaselessKeyword("l-and")
308
+ IMPLIES = pp.CaselessKeyword("implies")
309
+ GOEDEL_IMPLIES = pp.CaselessKeyword("g-implies")
310
+ KLEENE_DIENES_IMPLIES = pp.CaselessKeyword("kd-implies")
311
+ LUKASIEWICZ_IMPLIES = pp.CaselessKeyword("l-implies")
312
+ ZADEH_IMPLIES = pp.CaselessKeyword("z-implies")
313
+ OR = pp.CaselessKeyword("or")
314
+ GOEDEL_OR = pp.CaselessKeyword("g-or")
315
+ LUKASIEWICZ_OR = pp.CaselessKeyword("l-or")
316
+ NOT = pp.CaselessKeyword("not")
317
+ SOME = pp.CaselessKeyword("some")
318
+ HAS_VALUE = pp.CaselessKeyword("b-some")
319
+ ALL = pp.CaselessKeyword("all")
320
+ TOP = pp.CaselessKeyword("*top*")
321
+ BOTTOM = pp.CaselessKeyword("*bottom*")
322
+ W_SUM = pp.CaselessKeyword("w-sum")
323
+ W_SUM_ZERO = pp.CaselessKeyword("w-sum-zero")
324
+ W_MAX = pp.CaselessKeyword("w-max")
325
+ W_MIN = pp.CaselessKeyword("w-min")
326
+ SELF = pp.CaselessKeyword("self")
327
+ UPPER_APPROXIMATION = pp.CaselessKeyword("ua")
328
+ LOWER_APPROXIMATION = pp.CaselessKeyword("la")
329
+ OWA = pp.CaselessKeyword("owa")
330
+ Q_OWA = pp.CaselessKeyword("q-owa")
331
+ CHOQUET = pp.CaselessKeyword("choquet")
332
+ SUGENO = pp.CaselessKeyword("sugeno")
333
+ QUASI_SUGENO = pp.CaselessKeyword("q-sugeno")
334
+ TIGHT_UPPER_APPROXIMATION = pp.CaselessKeyword("tua")
335
+ TIGHT_LOWER_APPROXIMATION = pp.CaselessKeyword("tla")
336
+ LOOSE_UPPER_APPROXIMATION = pp.CaselessKeyword("lua")
337
+ LOOSE_LOWER_APPROXIMATION = pp.CaselessKeyword("lla")
338
+ FEATURE_SUM = pp.CaselessKeyword("f+")
339
+ FEATURE_SUB = pp.CaselessKeyword("f-")
340
+ FEATURE_MUL = pp.CaselessKeyword("f*")
341
+ FEATURE_DIV = pp.CaselessKeyword("f/")
342
+ CRISP = pp.CaselessKeyword("crisp")
343
+ LEFT_SHOULDER = pp.CaselessKeyword("left-shoulder")
344
+ RIGHT_SHOULDER = pp.CaselessKeyword("right-shoulder")
345
+ TRIANGULAR = pp.CaselessKeyword("triangular")
346
+ TRAPEZOIDAL = pp.CaselessKeyword("trapezoidal")
347
+ LINEAR = pp.CaselessKeyword("linear")
348
+ MODIFIED = pp.CaselessKeyword("modified")
349
+ LINEAR_MODIFIER = pp.CaselessKeyword("linear-modifier")
350
+ TRIANGULAR_MODIFIER = pp.CaselessKeyword("triangular-modifier")
351
+ SHOW_VARIABLES = pp.CaselessKeyword("show-variables")
352
+ SHOW_ABSTRACT_FILLERS = pp.CaselessKeyword("show-abstract-fillers")
353
+ SHOW_ABSTRACT_FILLERS_FOR = pp.CaselessKeyword("show-abstract-fillers-for")
354
+ SHOW_CONCRETE_FILLERS = pp.CaselessKeyword("show-concrete-fillers")
355
+ SHOW_CONCRETE_FILLERS_FOR = pp.CaselessKeyword("show-concrete-fillers-for")
356
+ SHOW_CONCRETE_INSTANCE_FOR = pp.CaselessKeyword("show-concrete-instance-for")
357
+ SHOW_INSTANCES = pp.CaselessKeyword("show-instances")
358
+ SHOW_CONCEPTS = pp.CaselessKeyword("show-concepts")
359
+ SHOW_LANGUAGE = pp.CaselessKeyword("show-language")
360
+ FREE = pp.CaselessKeyword("free")
361
+ BINARY = pp.CaselessKeyword("binary")
362
+ LUKASIEWICZ = pp.CaselessKeyword("lukasiewicz")
363
+ ZADEH = pp.CaselessKeyword("zadeh")
364
+ CLASSICAL = pp.CaselessKeyword("classical")
365
+ SUM = pp.CaselessKeyword("+")
366
+ SUB = pp.CaselessKeyword("-")
367
+ MUL = pp.CaselessKeyword("*")
368
+ LESS_THAN_OR_EQUAL_TO = pp.CaselessKeyword("<=")
369
+ GREATER_THAN_OR_EQUAL_TO = pp.CaselessKeyword(">=")
370
+ EQUALS = pp.CaselessKeyword("=")
371
+ STRING = pp.CaselessKeyword("*string*")
372
+ BOOLEAN = pp.CaselessKeyword("*boolean*")
373
+ INTEGER = pp.CaselessKeyword("*integer*")
374
+ REAL = pp.CaselessKeyword("*real*")
375
+
376
+ def get_name(self) -> str:
377
+ return re.sub(r"[\"\']+", "", self.value.name.lower())
378
+
379
+ def get_value(self) -> pp.CaselessKeyword:
380
+ return self.value
381
+
382
+ def __eq__(self, value: object) -> bool:
383
+ if isinstance(value, str):
384
+ return self.get_name() == value.lower()
385
+ elif isinstance(value, pp.CaselessKeyword):
386
+ return self.get_name() == value.name.lower()
387
+ elif isinstance(value, FuzzyDLKeyword):
388
+ return self.get_name() == value.get_name()
389
+ raise NotImplementedError
390
+
391
+ def __repr__(self) -> str:
392
+ return self.name
393
+
394
+ def __str__(self) -> str:
395
+ return self.name
396
+
397
+
398
+ class RestrictionType(enum.Enum):
399
+ AT_MOST_VALUE = 0
400
+ AT_LEAST_VALUE = 1
401
+ EXACT_VALUE = 2
402
+
403
+ def __repr__(self) -> str:
404
+ return self.name
405
+
406
+ def __str__(self) -> str:
407
+ return self.name
408
+
409
+
410
+ class FuzzyLogic(enum.StrEnum):
411
+ CLASSICAL = "classical"
412
+ ZADEH = "zadeh"
413
+ LUKASIEWICZ = "lukasiewicz"
414
+
415
+ def __repr__(self) -> str:
416
+ return self.name
417
+
418
+ def __str__(self) -> str:
419
+ return self.value
420
+
421
+
422
+ KNOWLEDGE_BASE_SEMANTICS = FuzzyLogic.CLASSICAL
423
+ MAXVAL: float = 2.147483647e12
424
+ MAXVAL2: float = MAXVAL * 2
@@ -0,0 +1,73 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime
4
+ import logging
5
+ import math
6
+ import os
7
+ import typing
8
+ from decimal import ROUND_HALF_UP, Decimal
9
+
10
+ from fuzzy_dl_owl2.fuzzydl.exception.fuzzy_ontology_exception import (
11
+ FuzzyOntologyException,
12
+ )
13
+ from fuzzy_dl_owl2.fuzzydl.util.config_reader import ConfigReader
14
+
15
+ TODAY: datetime.datetime = datetime.datetime.today()
16
+ LOG_DIR: str = os.path.join(
17
+ ".", "logs", "reasoner", str(TODAY.year), str(TODAY.month), str(TODAY.day)
18
+ )
19
+ FILENAME: str = (
20
+ f"fuzzydl_{str(TODAY.hour).zfill(2)}-{str(TODAY.minute).zfill(2)}-{str(TODAY.second).zfill(2)}.log"
21
+ )
22
+
23
+ if not os.path.exists(LOG_DIR):
24
+ os.makedirs(LOG_DIR)
25
+
26
+ logger = logging.getLogger(__name__)
27
+ logging.basicConfig(
28
+ filename=os.path.join(LOG_DIR, FILENAME),
29
+ filemode="w",
30
+ level=logging.INFO if not ConfigReader.DEBUG_PRINT else logging.DEBUG,
31
+ format="%(asctime)s - %(levelname)s -- %(message)s",
32
+ )
33
+
34
+
35
+ class Util:
36
+ @staticmethod
37
+ def info(message: str) -> None:
38
+ logger.info(message)
39
+
40
+ @staticmethod
41
+ def warning(message: str) -> None:
42
+ logger.warning(message)
43
+
44
+ @staticmethod
45
+ def debug(message: str) -> None:
46
+ if ConfigReader.DEBUG_PRINT:
47
+ logger.debug(message)
48
+
49
+ @staticmethod
50
+ def error(message: str) -> None:
51
+ logger.error(message)
52
+ raise FuzzyOntologyException(message)
53
+
54
+ @staticmethod
55
+ def has_integer_value(d: float) -> bool:
56
+ return d.is_integer()
57
+
58
+ @staticmethod
59
+ def round(x: float) -> float:
60
+ decimal = Decimal(str(x))
61
+ return float(
62
+ decimal.quantize(
63
+ Decimal("0." + "0" * ConfigReader.NUMBER_DIGITS), rounding=ROUND_HALF_UP
64
+ )
65
+ )
66
+
67
+ @staticmethod
68
+ def order(v: list[typing.Any]) -> None:
69
+ v.sort(key=lambda x: str(x))
70
+
71
+ @staticmethod
72
+ def log2(n: float) -> int:
73
+ return int(math.ceil(math.log2(n)))
@@ -0,0 +1,5 @@
1
+ from .util import *
2
+ from .owl_types import *
3
+ from .parser import *
4
+ from .fuzzyowl2 import FuzzyOwl2
5
+ from .fuzzyowl2_to_fuzzydl import FuzzyOwl2ToFuzzyDL