fuzzy-dl-owl2 1.0.4__py3-none-any.whl → 1.0.5__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.
@@ -5,6 +5,8 @@ import sys
5
5
  import typing
6
6
  from functools import partial
7
7
 
8
+ from rdflib import RDF, XSD, Literal, Namespace, URIRef
9
+
8
10
  from fuzzy_dl_owl2.fuzzydl.assertion.assertion import Assertion
9
11
  from fuzzy_dl_owl2.fuzzydl.concept.all_some_concept import AllSomeConcept
10
12
  from fuzzy_dl_owl2.fuzzydl.concept.choquet_integral import ChoquetIntegral
@@ -125,7 +127,6 @@ from pyowl2.expressions.object_property import OWLObjectProperty
125
127
  from pyowl2.individual.named_individual import OWLNamedIndividual
126
128
  from pyowl2.literal.literal import OWLLiteral
127
129
  from pyowl2.ontology import OWLOntology
128
- from rdflib import RDF, XSD, Literal, Namespace, URIRef
129
130
 
130
131
 
131
132
  # @utils.timer_decorator
@@ -346,12 +347,14 @@ class FuzzydlToOwl2:
346
347
  return self.__get_class_weighted_min_max_sum(c)
347
348
  elif c_type in (
348
349
  ConceptType.OWA,
349
- ConceptType.QUANTIFIED_OWA,
350
+ # ConceptType.QUANTIFIED_OWA,
350
351
  ConceptType.CHOQUET_INTEGRAL,
351
352
  ConceptType.SUGENO_INTEGRAL,
352
353
  ConceptType.QUASI_SUGENO_INTEGRAL,
353
354
  ):
354
355
  return self.__get_class_weighted(c)
356
+ elif c_type == ConceptType.QUANTIFIED_OWA:
357
+ return self.__get_class_q_owa(c)
355
358
  cls = OWLClass(self.iri(str(c)))
356
359
  self.ontology.add_axiom(OWLDeclaration(cls))
357
360
  return cls
@@ -392,14 +395,14 @@ class FuzzydlToOwl2:
392
395
  """Get the class for OWA, Quantified OWA, Choquet Integral, Sugeno Integral, or Quasi Sugeno Integral"""
393
396
  type_dict: dict[ConceptType, str] = {
394
397
  ConceptType.OWA: FuzzyOWL2Keyword.OWA.get_str_value(),
395
- ConceptType.QUANTIFIED_OWA: FuzzyOWL2Keyword.Q_OWA.get_str_value(),
398
+ # ConceptType.QUANTIFIED_OWA: FuzzyOWL2Keyword.Q_OWA.get_str_value(),
396
399
  ConceptType.CHOQUET_INTEGRAL: FuzzyOWL2Keyword.CHOQUET.get_str_value(),
397
400
  ConceptType.SUGENO_INTEGRAL: FuzzyOWL2Keyword.SUGENO.get_str_value(),
398
401
  ConceptType.QUASI_SUGENO_INTEGRAL: FuzzyOWL2Keyword.QUASI_SUGENO.get_str_value(),
399
402
  }
400
403
  type_cast: dict[ConceptType, typing.Callable] = {
401
404
  ConceptType.OWA: partial(typing.cast, OwaConcept),
402
- ConceptType.QUANTIFIED_OWA: partial(typing.cast, QowaConcept),
405
+ # ConceptType.QUANTIFIED_OWA: partial(typing.cast, QowaConcept),
403
406
  ConceptType.CHOQUET_INTEGRAL: partial(typing.cast, ChoquetIntegral),
404
407
  ConceptType.SUGENO_INTEGRAL: partial(typing.cast, SugenoIntegral),
405
408
  ConceptType.QUASI_SUGENO_INTEGRAL: partial(typing.cast, QsugenoIntegral),
@@ -423,6 +426,30 @@ class FuzzydlToOwl2:
423
426
  self.add_entity_annotation(annotation, c4)
424
427
  return c4
425
428
 
429
+ def __get_class_q_owa(self, c: Concept) -> OWLClassExpression:
430
+ """Get the class for OWA, Quantified OWA, Choquet Integral, Sugeno Integral, or Quasi Sugeno Integral"""
431
+ type_dict: dict[ConceptType, str] = {
432
+ ConceptType.QUANTIFIED_OWA: FuzzyOWL2Keyword.Q_OWA.get_str_value(),
433
+ }
434
+ type_cast: dict[ConceptType, typing.Callable] = {
435
+ ConceptType.QUANTIFIED_OWA: partial(typing.cast, QowaConcept),
436
+ }
437
+ if c.type not in type_dict:
438
+ return None
439
+ curr_concept: QowaConcept = type_cast[c.type](c)
440
+ c4: OWLClassExpression = self.get_new_atomic_class(str(c))
441
+ annotation: str = (
442
+ f'<{FuzzyOWL2Keyword.FUZZY_OWL_2.get_str_value()} {FuzzyOWL2Keyword.FUZZY_TYPE.get_str_value()}="{FuzzyOWL2Keyword.CONCEPT.get_str_value()}">\n',
443
+ f'\t<{FuzzyOWL2Keyword.CONCEPT.get_tag_name()} {FuzzyOWL2Keyword.TYPE.get_str_value()}="{type_dict[c.type]}" {FuzzyOWL2Keyword.QUANTIFIER.get_tag_name()}="{curr_concept.quantifier}">\n',
444
+ f"\t\t<{FuzzyOWL2Keyword.CONCEPT_NAMES.get_tag_name()}>\n",
445
+ )
446
+ for ci in curr_concept.concepts:
447
+ c5: OWLClassExpression = self.get_base(ci)
448
+ annotation += f"\t\t\t<{FuzzyOWL2Keyword.NAME.get_tag_name()}>{c5}</{FuzzyOWL2Keyword.NAME.get_tag_name()}>\n"
449
+ annotation += f"\t\t</{FuzzyOWL2Keyword.CONCEPT_NAMES.get_tag_name()}>\n\t</{FuzzyOWL2Keyword.CONCEPT.get_tag_name()}>\n</{FuzzyOWL2Keyword.FUZZY_OWL_2.get_str_value()}>"
450
+ self.add_entity_annotation(annotation, c4)
451
+ return c4
452
+
426
453
  def get_new_atomic_class(self, name: str) -> OWLClassExpression:
427
454
  """Get or create a new atomic class"""
428
455
  Util.debug(f"Getting new atomic concept -> {name}")
@@ -48,7 +48,6 @@ from pyowl2.expressions.data_property import OWLDataProperty
48
48
  from pyowl2.expressions.object_property import OWLObjectProperty
49
49
  from pyowl2.individual.anonymous_individual import OWLAnonymousIndividual
50
50
  from pyowl2.literal.literal import OWLLiteral
51
- from pyowl2.utils import utils
52
51
 
53
52
 
54
53
  # @utils.timer_decorator
@@ -608,7 +607,7 @@ class FuzzyOwl2ToFuzzyDL(FuzzyOwl2):
608
607
  d: float,
609
608
  ) -> None:
610
609
  self.__write(
611
- f"(implies-role {self.get_object_property_name(subproperty)} {self.get_object_property_name(superproperty)} {d})"
610
+ f"(implies-role {self.get_data_property_name(subproperty)} {self.get_data_property_name(superproperty)} {d})"
612
611
  )
613
612
 
614
613
  def write_sub_property_chain_of_axiom(
@@ -635,9 +634,9 @@ class FuzzyOwl2ToFuzzyDL(FuzzyOwl2):
635
634
  self, class_set: set[OWLDataPropertyExpression]
636
635
  ) -> None:
637
636
  first: OWLDataPropertyExpression = next(class_set)
638
- first_name: str = self.get_object_property_name(first)
637
+ first_name: str = self.get_data_property_name(first)
639
638
  for property in class_set - set([first]):
640
- property_name: str = self.get_object_property_name(property)
639
+ property_name: str = self.get_data_property_name(property)
641
640
  self.__write(f"(implies-role {first_name} {property_name})")
642
641
  self.__write(f"(implies-role {property_name} {first_name})")
643
642
 
@@ -103,11 +103,9 @@ def _parse_fuzzy_nominal(tokens: pp.ParseResults) -> ConceptDefinition:
103
103
  def _parse_weighted_complex_concept(tokens: pp.ParseResults) -> ConceptDefinition:
104
104
  Util.debug(f"_parse_weighted_complex_concept -> {tokens}")
105
105
  list_tokens: list = tokens.as_list()
106
- assert isinstance(list_tokens[1], list) and all(
107
- isinstance(a, WeightedConcept) for a in list_tokens[1]
108
- )
106
+ assert all(isinstance(a, WeightedConcept) for a in list_tokens[1:])
109
107
  wc: list[WeightedConcept] = [
110
- typing.cast(WeightedConcept, w) for w in list_tokens[1]
108
+ typing.cast(WeightedConcept, w) for w in list_tokens[1:]
111
109
  ]
112
110
  if list_tokens[0] == FuzzyOWL2Keyword.WEIGHTED_MAXIMUM:
113
111
  return WeightedMaxConcept(wc)
@@ -221,7 +219,10 @@ class FuzzyOwl2Parser(object):
221
219
  concept = pp.Forward()
222
220
 
223
221
  modified_role_concept = (
224
- FuzzyOWL2Keyword.MODIFIED.get_value().suppress()
222
+ FuzzyOWL2Keyword.CONCEPT.get_value().suppress()
223
+ + FuzzyOWL2Keyword.TYPE.get_value().suppress()
224
+ + FuzzyOWL2Keyword.EQUAL.get_value().suppress()
225
+ + FuzzyOWL2Keyword.MODIFIED.get_value().suppress()
225
226
  + FuzzyOWL2Keyword.MODIFIER.get_value().suppress()
226
227
  + FuzzyOWL2Keyword.EQUAL.get_value().suppress()
227
228
  + variables
@@ -231,13 +232,18 @@ class FuzzyOwl2Parser(object):
231
232
  ).add_parse_action(_parse_modified_concept)
232
233
 
233
234
  weighted_concept = (
234
- FuzzyOWL2Keyword.WEIGHTED.get_value().suppress()
235
+ open_tag
236
+ + FuzzyOWL2Keyword.CONCEPT.get_value().suppress()
237
+ + FuzzyOWL2Keyword.TYPE.get_value().suppress()
238
+ + FuzzyOWL2Keyword.EQUAL.get_value().suppress()
239
+ + FuzzyOWL2Keyword.WEIGHTED.get_value().suppress()
235
240
  + FuzzyOWL2Keyword.DEGREE_VALUE.get_value().suppress()
236
241
  + FuzzyOWL2Keyword.EQUAL.get_value().suppress()
237
242
  + numbers
238
243
  + FuzzyOWL2Keyword.BASE.get_value().suppress()
239
244
  + FuzzyOWL2Keyword.EQUAL.get_value().suppress()
240
245
  + variables
246
+ + single_close_tag
241
247
  ).add_parse_action(_parse_weighted_concept)
242
248
 
243
249
  weights = (
@@ -280,7 +286,6 @@ class FuzzyOwl2Parser(object):
280
286
  + close_tag
281
287
  )
282
288
 
283
- weighted_list_concept = close_tag + weights + concepts
284
289
  q_owa_concept = (
285
290
  FuzzyOWL2Keyword.QUANTIFIER.get_value().suppress()
286
291
  + FuzzyOWL2Keyword.EQUAL.get_value().suppress()
@@ -318,7 +323,9 @@ class FuzzyOwl2Parser(object):
318
323
  | FuzzyOWL2Keyword.SUGENO.get_value()
319
324
  | FuzzyOWL2Keyword.QUASI_SUGENO.get_value()
320
325
  )
321
- + weighted_list_concept
326
+ + close_tag
327
+ + weights
328
+ + concepts
322
329
  ).add_parse_action(_parse_integral_concept)
323
330
  | FuzzyOWL2Keyword.Q_OWA.get_value().suppress() + q_owa_concept
324
331
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fuzzy-dl-owl2
3
- Version: 1.0.4
3
+ Version: 1.0.5
4
4
  Summary: A python porting of the Fuzzy Description Language (see https://www.umbertostraccia.it/cs/software/fuzzyDL/fuzzyDL.html) and the Fuzzy OWL 2 framework (see https://www.umbertostraccia.it/cs/software/FuzzyOWL/index.html).
5
5
  License: CC-BY-SA-4.0
6
6
  Author: Giuseppe Filippone
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Dist: gurobipy (>=12.0.0,<13.0.0)
15
15
  Requires-Dist: networkx (>=3.3,<4.0)
16
16
  Requires-Dist: owlready2 (>=0.47,<0.48)
17
- Requires-Dist: pyowl2 (>=1.0.1,<2.0.0)
17
+ Requires-Dist: pyowl2 (>=1.0.2,<2.0.0)
18
18
  Requires-Dist: pyparsing (>=3.2.3,<4.0.0)
19
19
  Requires-Dist: rdflib (>=7.1.4,<8.0.0)
20
20
  Requires-Dist: sortedcontainers (>=2.4.0,<3.0.0)
@@ -62,7 +62,7 @@ fuzzy_dl_owl2/fuzzydl/exception/__init__.py,sha256=IoYY5IQoU4UYyoB-dFOVLZyDvJN20
62
62
  fuzzy_dl_owl2/fuzzydl/exception/fuzzy_ontology_exception.py,sha256=eH1ybBCx1QoZaf8PLCq1rC_3tiBRA-gKCwECTcUUuro,122
63
63
  fuzzy_dl_owl2/fuzzydl/exception/inconsistent_ontology_exception.py,sha256=ez0RQN4KGlNRcfB7IXfPz3bM86CFLl6zo-RRTBRpa_o,129
64
64
  fuzzy_dl_owl2/fuzzydl/feature_function.py,sha256=KSQvCSYfJK5N6FFfDlyS1Y7UPHSYZNXzdYYZMWzXF8U,6399
65
- fuzzy_dl_owl2/fuzzydl/fuzzydl_to_owl2.py,sha256=lr4UTDmYsl8MJVwclBTGLrAyDqLqBl8OgCE4tuTvRRM,44989
65
+ fuzzy_dl_owl2/fuzzydl/fuzzydl_to_owl2.py,sha256=BUt-LUHW9VPtUNT74zPblgbClwuQL8_HN6gXMQ2_X8k,46670
66
66
  fuzzy_dl_owl2/fuzzydl/general_concept_inclusion.py,sha256=Noom35WAeJosPrliGd9_gvEtcK4BthazsSuZH-cxfyU,2380
67
67
  fuzzy_dl_owl2/fuzzydl/individual/__init__.py,sha256=zBCa24kE2nv08VgtphjLshpbGNEARUJgCdtyv9r6JGc,110
68
68
  fuzzy_dl_owl2/fuzzydl/individual/created_individual.py,sha256=HOo_UXjPPPtm7B0a7k90kE1veuR9gOCK5hp2f_aaJnY,7653
@@ -124,7 +124,7 @@ fuzzy_dl_owl2/fuzzydl/util/util.py,sha256=5COC79TAJz8fNrRzXLbNpAT9rLd_0KrRI1OU-h
124
124
  fuzzy_dl_owl2/fuzzydl/util/utils.py,sha256=TPVLEL9NJXgReuxEIOTEOVYqojSymg_-kyrLETXnYdo,2344
125
125
  fuzzy_dl_owl2/fuzzyowl2/__init__.py,sha256=C44P0-Sn35FQdVMqYLzeDWa5qPmokbcs8GPiD_zQaSg,153
126
126
  fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2.py,sha256=EAC_DXYa694h3pUZ9T_4Y_f60DjzPUs4VqIGbpLY5vo,71402
127
- fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2_to_fuzzydl.py,sha256=yWMhk3mpAmGfLSg6buEo8pC2G-Jczy1pgiy3riaZsZY,37033
127
+ fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2_to_fuzzydl.py,sha256=egspxTzY4kNvhsQLP0AAaqJgFUqyO6VJuXLLOej06PA,36994
128
128
  fuzzy_dl_owl2/fuzzyowl2/owl_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
129
  fuzzy_dl_owl2/fuzzyowl2/owl_types/choquet_concept.py,sha256=ymnyNfvkvWA3y2UMXyPviD0U98vJ6jrX6zddj09SUoI,671
130
130
  fuzzy_dl_owl2/fuzzyowl2/owl_types/concept_definition.py,sha256=d5ZsEX8NN-aYJohXGzeJFhrnufCJ6AZ1YLGiclwysDc,324
@@ -153,10 +153,10 @@ fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_min_concept.py,sha256=_sEao87lwH2fKsp
153
153
  fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_sum_concept.py,sha256=TrX3-M-LrG-5XgEo6LY8JESZpYwcaIX4rOCU8wfWE4k,510
154
154
  fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_sum_zero_concept.py,sha256=OJW8-ZJXvYTFHrqC8hpVBTY6SwLCTTIe72MSAO3H7hk,524
155
155
  fuzzy_dl_owl2/fuzzyowl2/parser/__init__.py,sha256=fKaME_uuWyG5UB7VKD-nMV-j95lC1jWV6E6vD59yM4M,27
156
- fuzzy_dl_owl2/fuzzyowl2/parser/owl2_parser.py,sha256=5eGyRbYUQNH5ZTKCjsOYOsw9Ode4lUl8eUNK4jQGZSs,19683
156
+ fuzzy_dl_owl2/fuzzyowl2/parser/owl2_parser.py,sha256=wSE5FBCfv3t-XePJ9Pzyr_EVFTPWtMrtMyqHNgKd9aw,20052
157
157
  fuzzy_dl_owl2/fuzzyowl2/util/__init__.py,sha256=81quoggCuIypZjZs3bbf1Ty70KHdva5RGEJxi0oC57E,25
158
158
  fuzzy_dl_owl2/fuzzyowl2/util/constants.py,sha256=05eQLYTB4CxxUZ_T-sNG9FsH8hkrBMAh2y24oiQN8xY,3904
159
- fuzzy_dl_owl2-1.0.4.dist-info/LICENSE,sha256=er4Z7Ju3OzYUG5mbhh0krYVegIuv4PgehMzihVb2wpc,20131
160
- fuzzy_dl_owl2-1.0.4.dist-info/METADATA,sha256=elZXmZ96SR3HkFCRcP_CEoojPQ_1UWauCWBuyiLMTvY,13057
161
- fuzzy_dl_owl2-1.0.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
162
- fuzzy_dl_owl2-1.0.4.dist-info/RECORD,,
159
+ fuzzy_dl_owl2-1.0.5.dist-info/LICENSE,sha256=er4Z7Ju3OzYUG5mbhh0krYVegIuv4PgehMzihVb2wpc,20131
160
+ fuzzy_dl_owl2-1.0.5.dist-info/METADATA,sha256=uPCNsrud2pSsRiLl4hydpRIAehnILDZcLgZF3iLs3y4,13057
161
+ fuzzy_dl_owl2-1.0.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
162
+ fuzzy_dl_owl2-1.0.5.dist-info/RECORD,,