@@ -1955,88 +1955,88 @@ def _iri_str(ind):
19551955 }
19561956
19571957 worker_code = r'''
1958- import json
1959- import os
1960- import sys
1961- import jpype
1962- import jpype.imports
1963- from jpype import JClass
1964-
1965- def _to_str_set(jset):
1966- return {str(ax) for ax in jset} if jset is not None else set()
1967-
1968- payload = json.load(sys.stdin)
1969-
1970- jar_name = next(f for f in os.listdir(payload["contr_dir"]) if f.endswith(".jar"))
1971- jar_file = os.path.join(payload["contr_dir"], jar_name)
1972-
1973- jpype.startJVM(classpath=[jar_file])
1974-
1975- from java.io import File
1976- from org.semanticweb.owlapi.apibinding import OWLManager
1977- from org.semanticweb.owlapi.model import IRI as JIRI
1978- from org.semanticweb.owlapi.expression import ShortFormEntityChecker
1979- from org.semanticweb.owlapi.util import BidirectionalShortFormProviderAdapter, SimpleShortFormProvider
1980-
1981- CEProblem = JClass("anonymized.contrastive.ContrastiveExplanationProblem")
1982- CEGenerator = JClass("anonymized.contrastive.ContrastiveExplanationGenerator")
1983- ExplanationConfig = JClass("anonymized.contrastive.config.ExplanationConfig")
1984- RC = JClass("anonymized.contrastive.config.ReasonerChoice")
1985-
1986- manager = OWLManager.createOWLOntologyManager()
1987- ontology = manager.loadOntologyFromOntologyDocument(File(payload["ontology_path"]))
1988- data_factory = manager.getOWLDataFactory()
1989-
1990- parser = OWLManager.createManchesterParser()
1991- parser.setDefaultOntology(ontology)
1992- parser.setStringToParse(payload["class_expression_manchester"])
1993-
1994- short_form_provider = SimpleShortFormProvider()
1995- bidi = BidirectionalShortFormProviderAdapter(
1996- manager,
1997- jpype.java.util.Collections.singleton(ontology),
1998- short_form_provider
1999- )
2000- parser.setOWLEntityChecker(ShortFormEntityChecker(bidi))
2001- j_cls = parser.parseClassExpression()
2002-
2003- j_fact = data_factory.getOWLNamedIndividual(JIRI.create(payload["fact_iri"]))
2004- j_foil = data_factory.getOWLNamedIndividual(JIRI.create(payload["foil_iri"]))
2005-
2006- j_choice = getattr(RC, payload["reasoner_name"], RC.HermiT)
2007- j_config = ExplanationConfig(j_choice, payload["conflict_minimal"])
2008- generator = CEGenerator(manager, j_config)
2009-
2010- problem = CEProblem(ontology, j_cls, j_fact, j_foil)
2011- j_res = generator.computeExplanation(problem)
2012-
2013- if j_res is None:
2014- result = {
2015- "common": [],
2016- "different": [],
2017- "conflict": [],
2018- "foil_mapping": {},
2019- }
2020- else:
2021- py_common = sorted(_to_str_set(j_res.getCommon()))
2022- py_diff = sorted(_to_str_set(j_res.getDifferent()))
2023- py_conflict = sorted(_to_str_set(j_res.getConflict()))
2024-
2025- py_mapping = {}
2026- j_map = j_res.getFoilMapping()
2027- if j_map is not None:
2028- for e in j_map.entrySet():
2029- py_mapping[str(e.getKey())] = str(e.getValue())
2030-
2031- result = {
2032- "common": py_common,
2033- "different": py_diff,
2034- "conflict": py_conflict,
2035- "foil_mapping": py_mapping,
2036- }
2037-
2038- print(json.dumps(result))
2039- '''
1958+ import json
1959+ import os
1960+ import sys
1961+ import jpype
1962+ import jpype.imports
1963+ from jpype import JClass
1964+
1965+ def _to_str_set(jset):
1966+ return {str(ax) for ax in jset} if jset is not None else set()
1967+
1968+ payload = json.load(sys.stdin)
1969+
1970+ jar_name = next(f for f in os.listdir(payload["contr_dir"]) if f.endswith(".jar"))
1971+ jar_file = os.path.join(payload["contr_dir"], jar_name)
1972+
1973+ jpype.startJVM(classpath=[jar_file])
1974+
1975+ from java.io import File
1976+ from org.semanticweb.owlapi.apibinding import OWLManager
1977+ from org.semanticweb.owlapi.model import IRI as JIRI
1978+ from org.semanticweb.owlapi.expression import ShortFormEntityChecker
1979+ from org.semanticweb.owlapi.util import BidirectionalShortFormProviderAdapter, SimpleShortFormProvider
1980+
1981+ CEProblem = JClass("anonymized.contrastive.ContrastiveExplanationProblem")
1982+ CEGenerator = JClass("anonymized.contrastive.ContrastiveExplanationGenerator")
1983+ ExplanationConfig = JClass("anonymized.contrastive.config.ExplanationConfig")
1984+ RC = JClass("anonymized.contrastive.config.ReasonerChoice")
1985+
1986+ manager = OWLManager.createOWLOntologyManager()
1987+ ontology = manager.loadOntologyFromOntologyDocument(File(payload["ontology_path"]))
1988+ data_factory = manager.getOWLDataFactory()
1989+
1990+ parser = OWLManager.createManchesterParser()
1991+ parser.setDefaultOntology(ontology)
1992+ parser.setStringToParse(payload["class_expression_manchester"])
1993+
1994+ short_form_provider = SimpleShortFormProvider()
1995+ bidi = BidirectionalShortFormProviderAdapter(
1996+ manager,
1997+ jpype.java.util.Collections.singleton(ontology),
1998+ short_form_provider
1999+ )
2000+ parser.setOWLEntityChecker(ShortFormEntityChecker(bidi))
2001+ j_cls = parser.parseClassExpression()
2002+
2003+ j_fact = data_factory.getOWLNamedIndividual(JIRI.create(payload["fact_iri"]))
2004+ j_foil = data_factory.getOWLNamedIndividual(JIRI.create(payload["foil_iri"]))
2005+
2006+ j_choice = getattr(RC, payload["reasoner_name"], RC.HermiT)
2007+ j_config = ExplanationConfig(j_choice, payload["conflict_minimal"])
2008+ generator = CEGenerator(manager, j_config)
2009+
2010+ problem = CEProblem(ontology, j_cls, j_fact, j_foil)
2011+ j_res = generator.computeExplanation(problem)
2012+
2013+ if j_res is None:
2014+ result = {
2015+ "common": [],
2016+ "different": [],
2017+ "conflict": [],
2018+ "foil_mapping": {},
2019+ }
2020+ else:
2021+ py_common = sorted(_to_str_set(j_res.getCommon()))
2022+ py_diff = sorted(_to_str_set(j_res.getDifferent()))
2023+ py_conflict = sorted(_to_str_set(j_res.getConflict()))
2024+
2025+ py_mapping = {}
2026+ j_map = j_res.getFoilMapping()
2027+ if j_map is not None:
2028+ for e in j_map.entrySet():
2029+ py_mapping[str(e.getKey())] = str(e.getValue())
2030+
2031+ result = {
2032+ "common": py_common,
2033+ "different": py_diff,
2034+ "conflict": py_conflict,
2035+ "foil_mapping": py_mapping,
2036+ }
2037+
2038+ print(json.dumps(result))
2039+ '''
20402040
20412041 proc = subprocess .run (
20422042 [sys .executable , "-c" , worker_code ],
0 commit comments