pypddl 1.0.1__tar.gz

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 (276) hide show
  1. pypddl-1.0.1/.clang-format +60 -0
  2. pypddl-1.0.1/.github/workflows/apptainer.yml +40 -0
  3. pypddl-1.0.1/.github/workflows/benchmarks.yml +56 -0
  4. pypddl-1.0.1/.github/workflows/ci_release.yml +92 -0
  5. pypddl-1.0.1/.github/workflows/integrationtests.yml +41 -0
  6. pypddl-1.0.1/.github/workflows/release.yml +150 -0
  7. pypddl-1.0.1/.github/workflows/unittests.yml +83 -0
  8. pypddl-1.0.1/.gitignore +47 -0
  9. pypddl-1.0.1/Apptainer +89 -0
  10. pypddl-1.0.1/CMakeLists.txt +220 -0
  11. pypddl-1.0.1/Config.cmake.in +83 -0
  12. pypddl-1.0.1/LICENSE +674 -0
  13. pypddl-1.0.1/PKG-INFO +132 -0
  14. pypddl-1.0.1/README.md +120 -0
  15. pypddl-1.0.1/benchmarks/CMakeLists.txt +11 -0
  16. pypddl-1.0.1/benchmarks/combine_results.py +30 -0
  17. pypddl-1.0.1/benchmarks/construct_atoms.cpp +47 -0
  18. pypddl-1.0.1/benchmarks/iterate_atoms.cpp +119 -0
  19. pypddl-1.0.1/benchmarks/utils.cpp +42 -0
  20. pypddl-1.0.1/benchmarks/utils.hpp +29 -0
  21. pypddl-1.0.1/cmake/configure_yggdrasil.cmake +25 -0
  22. pypddl-1.0.1/cmake/install/fix_macos_runtime_paths.cmake +38 -0
  23. pypddl-1.0.1/cmake/install/fix_unix_runtime_paths.cmake +24 -0
  24. pypddl-1.0.1/data/blocks-non-deterministic/domain-missing-requirement.pddl +73 -0
  25. pypddl-1.0.1/data/blocks-non-deterministic/domain.pddl +73 -0
  26. pypddl-1.0.1/data/blocks-non-deterministic/p20.pddl +6 -0
  27. pypddl-1.0.1/data/delivery/numeric/domain.pddl +80 -0
  28. pypddl-1.0.1/data/delivery/numeric/pfile1.pddl +43 -0
  29. pypddl-1.0.1/data/delivery/propositional/domain.pddl +51 -0
  30. pypddl-1.0.1/data/delivery/propositional/test_problem.pddl +38 -0
  31. pypddl-1.0.1/data/gripper/domain.pddl +36 -0
  32. pypddl-1.0.1/data/gripper/p-2-0.pddl +28 -0
  33. pypddl-1.0.1/data/gripper/p-2-1.pddl +28 -0
  34. pypddl-1.0.1/data/miconic/domain.pddl +62 -0
  35. pypddl-1.0.1/data/miconic/p02.pddl +228 -0
  36. pypddl-1.0.1/data/miconic-fulladl/domain.pddl +132 -0
  37. pypddl-1.0.1/data/miconic-fulladl/test_problem.pddl +23 -0
  38. pypddl-1.0.1/data/schedule/domain.pddl +207 -0
  39. pypddl-1.0.1/data/schedule/probschedule-51-2.pddl +400 -0
  40. pypddl-1.0.1/data/woodworking-sat08-strips/domain.pddl +283 -0
  41. pypddl-1.0.1/data/woodworking-sat08-strips/domain_fixed.pddl +282 -0
  42. pypddl-1.0.1/data/woodworking-sat08-strips/p01.pddl +91 -0
  43. pypddl-1.0.1/data/woodworking-sat08-strips/p02.pddl +132 -0
  44. pypddl-1.0.1/data/woodworking-sat08-strips/p03.pddl +168 -0
  45. pypddl-1.0.1/data/woodworking-sat08-strips/p04.pddl +205 -0
  46. pypddl-1.0.1/data/woodworking-sat08-strips/p05.pddl +243 -0
  47. pypddl-1.0.1/data/woodworking-sat08-strips/p06.pddl +276 -0
  48. pypddl-1.0.1/data/woodworking-sat08-strips/p07.pddl +311 -0
  49. pypddl-1.0.1/data/woodworking-sat08-strips/p08.pddl +349 -0
  50. pypddl-1.0.1/data/woodworking-sat08-strips/p09.pddl +381 -0
  51. pypddl-1.0.1/data/woodworking-sat08-strips/p10.pddl +426 -0
  52. pypddl-1.0.1/data/woodworking-sat08-strips/p11.pddl +85 -0
  53. pypddl-1.0.1/data/woodworking-sat08-strips/p12.pddl +126 -0
  54. pypddl-1.0.1/data/woodworking-sat08-strips/p13.pddl +161 -0
  55. pypddl-1.0.1/data/woodworking-sat08-strips/p14.pddl +205 -0
  56. pypddl-1.0.1/data/woodworking-sat08-strips/p15.pddl +234 -0
  57. pypddl-1.0.1/data/woodworking-sat08-strips/p16.pddl +281 -0
  58. pypddl-1.0.1/data/woodworking-sat08-strips/p17.pddl +324 -0
  59. pypddl-1.0.1/data/woodworking-sat08-strips/p18.pddl +354 -0
  60. pypddl-1.0.1/data/woodworking-sat08-strips/p19.pddl +400 -0
  61. pypddl-1.0.1/data/woodworking-sat08-strips/p20.pddl +421 -0
  62. pypddl-1.0.1/data/woodworking-sat08-strips/p21.pddl +91 -0
  63. pypddl-1.0.1/data/woodworking-sat08-strips/p22.pddl +129 -0
  64. pypddl-1.0.1/data/woodworking-sat08-strips/p23.pddl +169 -0
  65. pypddl-1.0.1/data/woodworking-sat08-strips/p24.pddl +209 -0
  66. pypddl-1.0.1/data/woodworking-sat08-strips/p25.pddl +249 -0
  67. pypddl-1.0.1/data/woodworking-sat08-strips/p26.pddl +280 -0
  68. pypddl-1.0.1/data/woodworking-sat08-strips/p27.pddl +320 -0
  69. pypddl-1.0.1/data/woodworking-sat08-strips/p28.pddl +352 -0
  70. pypddl-1.0.1/data/woodworking-sat08-strips/p29.pddl +393 -0
  71. pypddl-1.0.1/data/woodworking-sat08-strips/p30.pddl +415 -0
  72. pypddl-1.0.1/docs/kovacs-draft-2011.pdf +0 -0
  73. pypddl-1.0.1/docs/kovacs-pddl-3.1-2011.pdf +0 -0
  74. pypddl-1.0.1/docs/main.tex +248 -0
  75. pypddl-1.0.1/docs/pddl-bnf.pdf +0 -0
  76. pypddl-1.0.1/docs/refs.bib +6 -0
  77. pypddl-1.0.1/exe/CMakeLists.txt +3 -0
  78. pypddl-1.0.1/exe/loki.cpp +108 -0
  79. pypddl-1.0.1/include/loki/ast/ast.hpp +1249 -0
  80. pypddl-1.0.1/include/loki/ast/config.hpp +53 -0
  81. pypddl-1.0.1/include/loki/ast/error_handler.hpp +65 -0
  82. pypddl-1.0.1/include/loki/ast/parser.hpp +49 -0
  83. pypddl-1.0.1/include/loki/ast/parser_wrapper.hpp +65 -0
  84. pypddl-1.0.1/include/loki/ast/printer.hpp +424 -0
  85. pypddl-1.0.1/include/loki/exceptions.hpp +51 -0
  86. pypddl-1.0.1/include/loki/loki.hpp +70 -0
  87. pypddl-1.0.1/include/loki/pddl/action.hpp +85 -0
  88. pypddl-1.0.1/include/loki/pddl/atom.hpp +62 -0
  89. pypddl-1.0.1/include/loki/pddl/axiom.hpp +67 -0
  90. pypddl-1.0.1/include/loki/pddl/concepts.hpp +47 -0
  91. pypddl-1.0.1/include/loki/pddl/conditions.hpp +322 -0
  92. pypddl-1.0.1/include/loki/pddl/declarations.hpp +208 -0
  93. pypddl-1.0.1/include/loki/pddl/domain.hpp +97 -0
  94. pypddl-1.0.1/include/loki/pddl/domain_builder.hpp +79 -0
  95. pypddl-1.0.1/include/loki/pddl/domain_parsing_context.hpp +60 -0
  96. pypddl-1.0.1/include/loki/pddl/effects.hpp +295 -0
  97. pypddl-1.0.1/include/loki/pddl/error_reporting.hpp +205 -0
  98. pypddl-1.0.1/include/loki/pddl/exceptions.hpp +215 -0
  99. pypddl-1.0.1/include/loki/pddl/function.hpp +61 -0
  100. pypddl-1.0.1/include/loki/pddl/function_expressions.hpp +284 -0
  101. pypddl-1.0.1/include/loki/pddl/function_skeleton.hpp +66 -0
  102. pypddl-1.0.1/include/loki/pddl/function_value.hpp +61 -0
  103. pypddl-1.0.1/include/loki/pddl/literal.hpp +61 -0
  104. pypddl-1.0.1/include/loki/pddl/metric.hpp +73 -0
  105. pypddl-1.0.1/include/loki/pddl/object.hpp +61 -0
  106. pypddl-1.0.1/include/loki/pddl/parameter.hpp +66 -0
  107. pypddl-1.0.1/include/loki/pddl/parser.hpp +60 -0
  108. pypddl-1.0.1/include/loki/pddl/parser_options.hpp +32 -0
  109. pypddl-1.0.1/include/loki/pddl/position_cache.hpp +102 -0
  110. pypddl-1.0.1/include/loki/pddl/predicate.hpp +67 -0
  111. pypddl-1.0.1/include/loki/pddl/problem.hpp +113 -0
  112. pypddl-1.0.1/include/loki/pddl/problem_builder.hpp +83 -0
  113. pypddl-1.0.1/include/loki/pddl/problem_parsing_context.hpp +61 -0
  114. pypddl-1.0.1/include/loki/pddl/reference_tracker.hpp +79 -0
  115. pypddl-1.0.1/include/loki/pddl/repositories.hpp +225 -0
  116. pypddl-1.0.1/include/loki/pddl/requirements.hpp +62 -0
  117. pypddl-1.0.1/include/loki/pddl/requirements_enum.hpp +62 -0
  118. pypddl-1.0.1/include/loki/pddl/scope.hpp +143 -0
  119. pypddl-1.0.1/include/loki/pddl/term.hpp +62 -0
  120. pypddl-1.0.1/include/loki/pddl/translator.hpp +46 -0
  121. pypddl-1.0.1/include/loki/pddl/translator_options.hpp +31 -0
  122. pypddl-1.0.1/include/loki/pddl/type.hpp +67 -0
  123. pypddl-1.0.1/include/loki/pddl/variable.hpp +62 -0
  124. pypddl-1.0.1/include/loki/utils/collections.hpp +55 -0
  125. pypddl-1.0.1/include/loki/utils/concepts.hpp +46 -0
  126. pypddl-1.0.1/include/loki/utils/equal_to.hpp +261 -0
  127. pypddl-1.0.1/include/loki/utils/filesystem.hpp +45 -0
  128. pypddl-1.0.1/include/loki/utils/hash.hpp +282 -0
  129. pypddl-1.0.1/include/loki/utils/indexed_hash_set.hpp +257 -0
  130. pypddl-1.0.1/include/loki/utils/memory.hpp +38 -0
  131. pypddl-1.0.1/include/loki/utils/murmurhash3.h +42 -0
  132. pypddl-1.0.1/include/loki/utils/observer_ptr.hpp +80 -0
  133. pypddl-1.0.1/include/loki/utils/ostream.hpp +34 -0
  134. pypddl-1.0.1/pyproject.toml +68 -0
  135. pypddl-1.0.1/python/CMakeLists.txt +15 -0
  136. pypddl-1.0.1/python/__pycache__/pypddl_build_backend.cpython-313.pyc +0 -0
  137. pypddl-1.0.1/python/pypddl_build_backend.py +152 -0
  138. pypddl-1.0.1/python/src/pypddl/__init__.py +12 -0
  139. pypddl-1.0.1/python/tests/test_import.py +10 -0
  140. pypddl-1.0.1/src/CMakeLists.txt +75 -0
  141. pypddl-1.0.1/src/ast/ast_adapted.hpp +168 -0
  142. pypddl-1.0.1/src/ast/parser.hpp +821 -0
  143. pypddl-1.0.1/src/ast/parser_def.hpp +1432 -0
  144. pypddl-1.0.1/src/ast/parser_instantiations.cpp +225 -0
  145. pypddl-1.0.1/src/ast/printer.cpp +1528 -0
  146. pypddl-1.0.1/src/exceptions.cpp +40 -0
  147. pypddl-1.0.1/src/pddl/action.cpp +66 -0
  148. pypddl-1.0.1/src/pddl/atom.cpp +46 -0
  149. pypddl-1.0.1/src/pddl/axiom.cpp +57 -0
  150. pypddl-1.0.1/src/pddl/conditions.cpp +233 -0
  151. pypddl-1.0.1/src/pddl/domain.cpp +94 -0
  152. pypddl-1.0.1/src/pddl/domain_builder.cpp +129 -0
  153. pypddl-1.0.1/src/pddl/effects.cpp +224 -0
  154. pypddl-1.0.1/src/pddl/exceptions.cpp +241 -0
  155. pypddl-1.0.1/src/pddl/formatter.cpp +717 -0
  156. pypddl-1.0.1/src/pddl/formatter.hpp +149 -0
  157. pypddl-1.0.1/src/pddl/function.cpp +51 -0
  158. pypddl-1.0.1/src/pddl/function_expressions.cpp +244 -0
  159. pypddl-1.0.1/src/pddl/function_skeleton.cpp +53 -0
  160. pypddl-1.0.1/src/pddl/function_value.cpp +45 -0
  161. pypddl-1.0.1/src/pddl/literal.cpp +45 -0
  162. pypddl-1.0.1/src/pddl/metric.cpp +66 -0
  163. pypddl-1.0.1/src/pddl/object.cpp +46 -0
  164. pypddl-1.0.1/src/pddl/parameter.cpp +61 -0
  165. pypddl-1.0.1/src/pddl/parser/common.cpp +117 -0
  166. pypddl-1.0.1/src/pddl/parser/common.hpp +62 -0
  167. pypddl-1.0.1/src/pddl/parser/conditions.cpp +348 -0
  168. pypddl-1.0.1/src/pddl/parser/conditions.hpp +81 -0
  169. pypddl-1.0.1/src/pddl/parser/constants.cpp +89 -0
  170. pypddl-1.0.1/src/pddl/parser/constants.hpp +44 -0
  171. pypddl-1.0.1/src/pddl/parser/domain.cpp +127 -0
  172. pypddl-1.0.1/src/pddl/parser/domain.hpp +29 -0
  173. pypddl-1.0.1/src/pddl/parser/effects.cpp +188 -0
  174. pypddl-1.0.1/src/pddl/parser/effects.hpp +56 -0
  175. pypddl-1.0.1/src/pddl/parser/enums.cpp +84 -0
  176. pypddl-1.0.1/src/pddl/parser/enums.hpp +93 -0
  177. pypddl-1.0.1/src/pddl/parser/error_handling.cpp +424 -0
  178. pypddl-1.0.1/src/pddl/parser/error_handling.hpp +120 -0
  179. pypddl-1.0.1/src/pddl/parser/functions.cpp +330 -0
  180. pypddl-1.0.1/src/pddl/parser/functions.hpp +108 -0
  181. pypddl-1.0.1/src/pddl/parser/goal.cpp +29 -0
  182. pypddl-1.0.1/src/pddl/parser/goal.hpp +31 -0
  183. pypddl-1.0.1/src/pddl/parser/ground_literal.cpp +91 -0
  184. pypddl-1.0.1/src/pddl/parser/ground_literal.hpp +70 -0
  185. pypddl-1.0.1/src/pddl/parser/initial.cpp +69 -0
  186. pypddl-1.0.1/src/pddl/parser/initial.hpp +54 -0
  187. pypddl-1.0.1/src/pddl/parser/literal.cpp +133 -0
  188. pypddl-1.0.1/src/pddl/parser/literal.hpp +80 -0
  189. pypddl-1.0.1/src/pddl/parser/metric.cpp +59 -0
  190. pypddl-1.0.1/src/pddl/parser/metric.hpp +43 -0
  191. pypddl-1.0.1/src/pddl/parser/objects.cpp +102 -0
  192. pypddl-1.0.1/src/pddl/parser/objects.hpp +49 -0
  193. pypddl-1.0.1/src/pddl/parser/parameters.cpp +90 -0
  194. pypddl-1.0.1/src/pddl/parser/parameters.hpp +42 -0
  195. pypddl-1.0.1/src/pddl/parser/predicates.cpp +72 -0
  196. pypddl-1.0.1/src/pddl/parser/predicates.hpp +33 -0
  197. pypddl-1.0.1/src/pddl/parser/problem.cpp +124 -0
  198. pypddl-1.0.1/src/pddl/parser/problem.hpp +29 -0
  199. pypddl-1.0.1/src/pddl/parser/reference_utils.cpp +77 -0
  200. pypddl-1.0.1/src/pddl/parser/reference_utils.hpp +44 -0
  201. pypddl-1.0.1/src/pddl/parser/requirements.cpp +238 -0
  202. pypddl-1.0.1/src/pddl/parser/requirements.hpp +64 -0
  203. pypddl-1.0.1/src/pddl/parser/structure.cpp +151 -0
  204. pypddl-1.0.1/src/pddl/parser/structure.hpp +47 -0
  205. pypddl-1.0.1/src/pddl/parser/types.cpp +286 -0
  206. pypddl-1.0.1/src/pddl/parser/types.hpp +80 -0
  207. pypddl-1.0.1/src/pddl/parser/unpacking_visitor.hpp +54 -0
  208. pypddl-1.0.1/src/pddl/parser.cpp +126 -0
  209. pypddl-1.0.1/src/pddl/predicate.cpp +55 -0
  210. pypddl-1.0.1/src/pddl/problem.cpp +117 -0
  211. pypddl-1.0.1/src/pddl/problem_builder.cpp +158 -0
  212. pypddl-1.0.1/src/pddl/repositories.cpp +329 -0
  213. pypddl-1.0.1/src/pddl/requirements.cpp +45 -0
  214. pypddl-1.0.1/src/pddl/requirements_enum.cpp +58 -0
  215. pypddl-1.0.1/src/pddl/scope.cpp +145 -0
  216. pypddl-1.0.1/src/pddl/term.cpp +46 -0
  217. pypddl-1.0.1/src/pddl/translator/add_type_predicates.cpp +306 -0
  218. pypddl-1.0.1/src/pddl/translator/add_type_predicates.hpp +59 -0
  219. pypddl-1.0.1/src/pddl/translator/initialize_equality.cpp +86 -0
  220. pypddl-1.0.1/src/pddl/translator/initialize_equality.hpp +46 -0
  221. pypddl-1.0.1/src/pddl/translator/interface.hpp +77 -0
  222. pypddl-1.0.1/src/pddl/translator/move_existential_quantifiers.cpp +135 -0
  223. pypddl-1.0.1/src/pddl/translator/move_existential_quantifiers.hpp +66 -0
  224. pypddl-1.0.1/src/pddl/translator/recursive_base.hpp +455 -0
  225. pypddl-1.0.1/src/pddl/translator/recursive_cached_base.hpp +412 -0
  226. pypddl-1.0.1/src/pddl/translator/remove_universal_quantifiers.cpp +237 -0
  227. pypddl-1.0.1/src/pddl/translator/remove_universal_quantifiers.hpp +88 -0
  228. pypddl-1.0.1/src/pddl/translator/rename_quantified_variables.cpp +152 -0
  229. pypddl-1.0.1/src/pddl/translator/rename_quantified_variables.hpp +69 -0
  230. pypddl-1.0.1/src/pddl/translator/simplify_goal.cpp +123 -0
  231. pypddl-1.0.1/src/pddl/translator/simplify_goal.hpp +50 -0
  232. pypddl-1.0.1/src/pddl/translator/split_disjunctive_conditions.cpp +144 -0
  233. pypddl-1.0.1/src/pddl/translator/split_disjunctive_conditions.hpp +62 -0
  234. pypddl-1.0.1/src/pddl/translator/to_disjunctive_normal_form.cpp +191 -0
  235. pypddl-1.0.1/src/pddl/translator/to_disjunctive_normal_form.hpp +74 -0
  236. pypddl-1.0.1/src/pddl/translator/to_effect_normal_form.cpp +176 -0
  237. pypddl-1.0.1/src/pddl/translator/to_effect_normal_form.hpp +164 -0
  238. pypddl-1.0.1/src/pddl/translator/to_negation_normal_form.cpp +147 -0
  239. pypddl-1.0.1/src/pddl/translator/to_negation_normal_form.hpp +95 -0
  240. pypddl-1.0.1/src/pddl/translator/utils.cpp +295 -0
  241. pypddl-1.0.1/src/pddl/translator/utils.hpp +101 -0
  242. pypddl-1.0.1/src/pddl/translator.cpp +188 -0
  243. pypddl-1.0.1/src/pddl/type.cpp +73 -0
  244. pypddl-1.0.1/src/pddl/unpacking_visitor.hpp +54 -0
  245. pypddl-1.0.1/src/pddl/variable.cpp +250 -0
  246. pypddl-1.0.1/src/utils/filesystem.cpp +66 -0
  247. pypddl-1.0.1/src/utils/memory.cpp +97 -0
  248. pypddl-1.0.1/src/utils/mumurhash3.cpp +450 -0
  249. pypddl-1.0.1/tests/CMakeLists.txt +1 -0
  250. pypddl-1.0.1/tests/integration/CMakeLists.txt +36 -0
  251. pypddl-1.0.1/tests/integration/main.cpp +24 -0
  252. pypddl-1.0.1/tests/unit/CMakeLists.txt +29 -0
  253. pypddl-1.0.1/tests/unit/main.cpp +24 -0
  254. pypddl-1.0.1/tests/unit/pddl/ast/atomic_formula_skeleton.cpp +44 -0
  255. pypddl-1.0.1/tests/unit/pddl/ast/atomic_function_skeleton_general.cpp +44 -0
  256. pypddl-1.0.1/tests/unit/pddl/ast/atomic_function_skeleton_total_cost.cpp +38 -0
  257. pypddl-1.0.1/tests/unit/pddl/ast/function_symbol.cpp +48 -0
  258. pypddl-1.0.1/tests/unit/pddl/ast/function_symbol_total_cost.cpp +39 -0
  259. pypddl-1.0.1/tests/unit/pddl/ast/function_typed_list_of_atom_function_skeletons.cpp +44 -0
  260. pypddl-1.0.1/tests/unit/pddl/ast/function_typed_list_of_atom_function_skeletons_recursively.cpp +43 -0
  261. pypddl-1.0.1/tests/unit/pddl/ast/name.cpp +47 -0
  262. pypddl-1.0.1/tests/unit/pddl/ast/number.cpp +46 -0
  263. pypddl-1.0.1/tests/unit/pddl/ast/predicate.cpp +48 -0
  264. pypddl-1.0.1/tests/unit/pddl/ast/term.cpp +48 -0
  265. pypddl-1.0.1/tests/unit/pddl/ast/type.cpp +40 -0
  266. pypddl-1.0.1/tests/unit/pddl/ast/type_either.cpp +40 -0
  267. pypddl-1.0.1/tests/unit/pddl/ast/typed_list_of_names.cpp +47 -0
  268. pypddl-1.0.1/tests/unit/pddl/ast/typed_list_of_names_recursively.cpp +41 -0
  269. pypddl-1.0.1/tests/unit/pddl/ast/typed_list_of_variables.cpp +47 -0
  270. pypddl-1.0.1/tests/unit/pddl/ast/typed_list_of_variables_recursively.cpp +41 -0
  271. pypddl-1.0.1/tests/unit/pddl/ast/variable.cpp +47 -0
  272. pypddl-1.0.1/tests/unit/pddl/parser.cpp +86 -0
  273. pypddl-1.0.1/tests/unit/pddl/reference.cpp +43 -0
  274. pypddl-1.0.1/tests/unit/pddl/translator.cpp +175 -0
  275. pypddl-1.0.1/tests/unit/utils/hash.cpp +50 -0
  276. pypddl-1.0.1/tests/unit/utils/indexed_hash_set.cpp +104 -0
@@ -0,0 +1,60 @@
1
+ ---
2
+ AccessModifierOffset: -4
3
+ AlignAfterOpenBracket: Align
4
+ AlignEscapedNewlines: Left
5
+ AlignOperands: 'true'
6
+ AlignTrailingComments: 'true'
7
+ AllowAllArgumentsOnNextLine: 'false'
8
+ AllowAllConstructorInitializersOnNextLine: 'false'
9
+ AllowAllParametersOfDeclarationOnNextLine: 'false'
10
+ AllowShortBlocksOnASingleLine: 'true'
11
+ AllowShortCaseLabelsOnASingleLine: 'false'
12
+ AllowShortFunctionsOnASingleLine: All
13
+ AllowShortIfStatementsOnASingleLine: Never
14
+ AllowShortLambdasOnASingleLine: All
15
+ AllowShortLoopsOnASingleLine: 'false'
16
+ AlwaysBreakTemplateDeclarations: 'Yes'
17
+ BinPackArguments: 'false'
18
+ BinPackParameters: 'false'
19
+ BreakBeforeBinaryOperators: NonAssignment
20
+ BreakBeforeBraces: Allman
21
+ BreakBeforeTernaryOperators: 'false'
22
+ BreakConstructorInitializers: AfterColon
23
+ BreakInheritanceList: AfterColon
24
+ ColumnLimit: '160'
25
+ CompactNamespaces: 'false'
26
+ ConstructorInitializerAllOnOneLineOrOnePerLine: 'true'
27
+ Cpp11BracedListStyle: 'false'
28
+ FixNamespaceComments: 'false'
29
+ IncludeBlocks: Regroup
30
+ IndentAccessModifiers: 'false'
31
+ IndentCaseLabels: 'true'
32
+ IndentPPDirectives: None
33
+ IndentWidth: '4'
34
+ IndentWrappedFunctionNames: 'false'
35
+ KeepEmptyLinesAtTheStartOfBlocks: 'false'
36
+ Language: Cpp
37
+ MaxEmptyLinesToKeep: '1'
38
+ NamespaceIndentation: None
39
+ PointerAlignment: Left
40
+ SortIncludes: 'true'
41
+ SortUsingDeclarations: 'true'
42
+ SpaceAfterCStyleCast: 'true'
43
+ SpaceAfterLogicalNot: 'false'
44
+ SpaceAfterTemplateKeyword: 'false'
45
+ SpaceBeforeAssignmentOperators: 'true'
46
+ SpaceBeforeCpp11BracedList: 'true'
47
+ SpaceBeforeCtorInitializerColon: 'true'
48
+ SpaceBeforeInheritanceColon: 'true'
49
+ SpaceBeforeParens: ControlStatements
50
+ SpaceBeforeRangeBasedForLoopColon: 'true'
51
+ SpaceInEmptyParentheses: 'false'
52
+ SpacesBeforeTrailingComments: '2'
53
+ SpacesInAngles: 'false'
54
+ SpacesInCStyleCastParentheses: 'false'
55
+ SpacesInParentheses: 'false'
56
+ SpacesInSquareBrackets: 'false'
57
+ Standard: Cpp11
58
+ TabWidth: '4'
59
+ UseTab: Never
60
+ ...
@@ -0,0 +1,40 @@
1
+ name: Apptainer
2
+ # Run for all pushes to the main branch and for all pull requests targeting the main branch.
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ permissions:
12
+ contents: read
13
+ packages: write
14
+
15
+ jobs:
16
+ build-image:
17
+ name: Build Apptainer image
18
+ if: github.repository == 'drexlerd/Loki'
19
+ runs-on: ubuntu-24.04
20
+
21
+ steps:
22
+ - name: Check out code
23
+ uses: actions/checkout@v6
24
+
25
+ - name: Set up Apptainer
26
+ uses: eWaterCycle/setup-apptainer@v2
27
+ with:
28
+ apptainer-version: 1.4.3
29
+
30
+ - name: Build image
31
+ run: |
32
+ apptainer build image.sif Apptainer
33
+
34
+ - name: Login and deploy image
35
+ if: (github.event_name != 'pull_request')
36
+ run: |
37
+ echo ${{ secrets.GITHUB_TOKEN }} | apptainer remote login -u ${GITHUB_ACTOR} --password-stdin oras://ghcr.io
38
+ REPO_LC="$(echo "${GITHUB_REPOSITORY}" | tr '[:upper:]' '[:lower:]')"
39
+ apptainer push image.sif oras://ghcr.io/${REPO_LC}:latest
40
+ # Image can now be pulled with "apptainer pull oras://ghcr.io/${REPO_LC}:latest"
@@ -0,0 +1,56 @@
1
+ name: Googlebenchmark
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+
7
+
8
+ permissions:
9
+ # deployments permission to deploy GitHub pages website
10
+ deployments: write
11
+ # contents permission to update benchmark contents in gh-pages branch
12
+ contents: write
13
+
14
+
15
+ jobs:
16
+ benchmark:
17
+ name: Performance regression check
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - name: Checkout Loki
21
+ uses: actions/checkout@v2
22
+
23
+ - name: Install native dependencies
24
+ run: |
25
+ python -m pip install --upgrade pip
26
+ python -m pip install pyyggdrasil==0.0.2
27
+
28
+ - name: Configure, and Build Loki
29
+ run: |
30
+ cmake -DCMAKE_BUILD_TYPE=Release -DLOKI_BUILD_BENCHMARKS=ON -S . -B build \
31
+ -DPython3_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')" \
32
+ -DCMAKE_PREFIX_PATH="$(python -c 'import pyyggdrasil; print(pyyggdrasil.native_prefix())')"
33
+ cmake --build build -j$(nproc)
34
+
35
+ # Run benchmarks and store the output to a file
36
+ - name: Run benchmark construct_atoms
37
+ run: build/benchmarks/construct_atoms --benchmark_format=json | tee benchmark_result_construct_atoms.json
38
+ - name: Run benchmark iterate_atoms
39
+ run: build/benchmarks/iterate_atoms --benchmark_format=json | tee benchmark_result_iterate_atoms.json
40
+
41
+ # Combine outputs to a single file
42
+ - name: Combine JSON files
43
+ run: python3 benchmarks/combine_results.py benchmark_result_construct_atoms.json benchmark_result_iterate_atoms.json > benchmark_result.json
44
+
45
+ # Run `github-action-benchmark` action
46
+ - name: Store benchmark result
47
+ uses: benchmark-action/github-action-benchmark@v1
48
+ with:
49
+ # What benchmark tool the output.txt came from
50
+ tool: 'googlecpp'
51
+ # Where the output from the benchmark tool is stored
52
+ output-file-path: benchmark_result.json
53
+ # Access token to deploy GitHub Pages branch
54
+ github-token: ${{ secrets.GITHUB_TOKEN }}
55
+ # Push and deploy GitHub pages branch automatically
56
+ auto-push: true
@@ -0,0 +1,92 @@
1
+ name: CI Release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ - dev
8
+ pull_request:
9
+ workflow_dispatch:
10
+
11
+ jobs:
12
+ build_sdist:
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - name: Checkout repository
17
+ uses: actions/checkout@v6
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v6
21
+ with:
22
+ python-version: "3.13"
23
+
24
+ - name: Install build frontend
25
+ run: |
26
+ python -m pip install --upgrade pip
27
+ python -m pip install build
28
+
29
+ - name: Build source distribution
30
+ run: python -m build --sdist
31
+
32
+ build_wheels_linux:
33
+ runs-on: ubuntu-latest
34
+ strategy:
35
+ fail-fast: false
36
+ matrix:
37
+ architecture: ["x86_64"]
38
+ python-version: ["cp39", "cp310", "cp311", "cp312", "cp313"]
39
+
40
+ steps:
41
+ - name: Checkout repository
42
+ uses: actions/checkout@v6
43
+
44
+ - name: Set up Python
45
+ uses: actions/setup-python@v6
46
+ with:
47
+ python-version: "3.13"
48
+
49
+ - name: Install cibuildwheel
50
+ run: |
51
+ python -m pip install --upgrade pip
52
+ python -m pip install cibuildwheel
53
+
54
+ - name: Build Linux wheels
55
+ run: cibuildwheel --output-dir wheelhouse
56
+ env:
57
+ CIBW_PLATFORM: linux
58
+ CIBW_BUILD: "${{ matrix.python-version }}-*"
59
+ CIBW_SKIP: "*-musllinux_*"
60
+ CIBW_ARCHS: "${{ matrix.architecture }}"
61
+ CIBW_BUILD_VERBOSITY: "1"
62
+ CIBW_ENVIRONMENT: "PYPDDL_JOBS=2"
63
+
64
+ build_wheels_macos:
65
+ runs-on: macos-latest
66
+ strategy:
67
+ fail-fast: false
68
+ matrix:
69
+ python-version: ["cp39", "cp310", "cp311", "cp312", "cp313"]
70
+
71
+ steps:
72
+ - name: Checkout repository
73
+ uses: actions/checkout@v6
74
+
75
+ - name: Set up Python
76
+ uses: actions/setup-python@v6
77
+ with:
78
+ python-version: "3.13"
79
+
80
+ - name: Install cibuildwheel
81
+ run: |
82
+ python -m pip install --upgrade pip
83
+ python -m pip install cibuildwheel
84
+
85
+ - name: Build macOS wheels
86
+ run: cibuildwheel --output-dir wheelhouse
87
+ env:
88
+ CIBW_PLATFORM: macos
89
+ CIBW_BUILD: "${{ matrix.python-version }}-*"
90
+ CIBW_ARCHS: arm64
91
+ CIBW_BUILD_VERBOSITY: "1"
92
+ CIBW_ENVIRONMENT: "PYPDDL_JOBS=2"
@@ -0,0 +1,41 @@
1
+ name: Integration Tests
2
+ on: [push, pull_request]
3
+
4
+
5
+ jobs:
6
+ build:
7
+ strategy:
8
+ matrix:
9
+ os: [ubuntu-latest, macos-latest]
10
+ runs-on: ${{ matrix.os }}
11
+
12
+ steps:
13
+ - name: Checkout Loki
14
+ uses: actions/checkout@v2
15
+
16
+ - name: Install native dependencies
17
+ run: |
18
+ python -m pip install --upgrade pip
19
+ python -m pip install pyyggdrasil==0.0.2
20
+
21
+ - name: Build and Install Loki
22
+ run: |
23
+ cmake -S . -B build_loki \
24
+ -DCMAKE_BUILD_TYPE=Release \
25
+ -DBUILD_SHARED_LIBS=ON \
26
+ -DLOKI_BUILD_TESTS=OFF \
27
+ -DLOKI_BUILD_BENCHMARKS=OFF \
28
+ -DLOKI_BUILD_EXECUTABLES=OFF \
29
+ -DLOKI_LINK_STATIC_DEPENDENCIES=OFF \
30
+ -DPython3_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')" \
31
+ -DCMAKE_PREFIX_PATH="$(python -c 'import pyyggdrasil; print(pyyggdrasil.native_prefix())')"
32
+ cmake --build build_loki
33
+ cmake --install build_loki --prefix "$GITHUB_WORKSPACE/tests/integration/loki-install"
34
+
35
+ - name: Build and Test Project
36
+ run: |
37
+ cd tests/integration
38
+ cmake -S . -B build \
39
+ -DPython3_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')" \
40
+ -DCMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/tests/integration/loki-install"
41
+ cmake --build build
@@ -0,0 +1,150 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ build_sdist:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - name: Checkout repository
14
+ uses: actions/checkout@v6
15
+
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v6
18
+ with:
19
+ python-version: "3.13"
20
+
21
+ - name: Install build frontend
22
+ run: |
23
+ python -m pip install --upgrade pip
24
+ python -m pip install build
25
+
26
+ - name: Build source distribution
27
+ run: python -m build --sdist
28
+
29
+ - name: Upload sdist artifact
30
+ uses: actions/upload-artifact@v5
31
+ with:
32
+ name: sdist
33
+ path: dist/*.tar.gz
34
+
35
+ build_wheels_linux:
36
+ runs-on: ubuntu-latest
37
+ strategy:
38
+ fail-fast: false
39
+ matrix:
40
+ architecture: ["x86_64"]
41
+ python-version: ["cp39", "cp310", "cp311", "cp312", "cp313"]
42
+
43
+ steps:
44
+ - name: Checkout repository
45
+ uses: actions/checkout@v6
46
+
47
+ - name: Set up Python
48
+ uses: actions/setup-python@v6
49
+ with:
50
+ python-version: "3.13"
51
+
52
+ - name: Install cibuildwheel
53
+ run: |
54
+ python -m pip install --upgrade pip
55
+ python -m pip install cibuildwheel
56
+
57
+ - name: Build Linux wheels
58
+ run: cibuildwheel --output-dir wheelhouse
59
+ env:
60
+ CIBW_PLATFORM: linux
61
+ CIBW_BUILD: "${{ matrix.python-version }}-*"
62
+ CIBW_SKIP: "*-musllinux_*"
63
+ CIBW_ARCHS: "${{ matrix.architecture }}"
64
+ CIBW_BUILD_VERBOSITY: "1"
65
+ CIBW_ENVIRONMENT: "PYPDDL_JOBS=2"
66
+
67
+ - name: Upload Linux wheels artifact
68
+ uses: actions/upload-artifact@v5
69
+ with:
70
+ name: wheels-linux-${{ matrix.python-version }}-${{ matrix.architecture }}
71
+ path: wheelhouse/*.whl
72
+
73
+ build_wheels_macos:
74
+ runs-on: macos-latest
75
+ strategy:
76
+ fail-fast: false
77
+ matrix:
78
+ python-version: ["cp39", "cp310", "cp311", "cp312", "cp313"]
79
+
80
+ steps:
81
+ - name: Checkout repository
82
+ uses: actions/checkout@v6
83
+
84
+ - name: Set up Python
85
+ uses: actions/setup-python@v6
86
+ with:
87
+ python-version: "3.13"
88
+
89
+ - name: Install cibuildwheel
90
+ run: |
91
+ python -m pip install --upgrade pip
92
+ python -m pip install cibuildwheel
93
+
94
+ - name: Build macOS wheels
95
+ run: cibuildwheel --output-dir wheelhouse
96
+ env:
97
+ CIBW_PLATFORM: macos
98
+ CIBW_BUILD: "${{ matrix.python-version }}-*"
99
+ CIBW_ARCHS: arm64
100
+ CIBW_BUILD_VERBOSITY: "1"
101
+ CIBW_ENVIRONMENT: "PYPDDL_JOBS=2"
102
+
103
+ - name: Upload macOS wheels artifact
104
+ uses: actions/upload-artifact@v5
105
+ with:
106
+ name: wheels-macos-${{ matrix.python-version }}-arm64
107
+ path: wheelhouse/*.whl
108
+
109
+ publish:
110
+ needs:
111
+ - build_sdist
112
+ - build_wheels_linux
113
+ - build_wheels_macos
114
+ runs-on: ubuntu-latest
115
+
116
+ if: github.repository_owner == 'drexlerd'
117
+
118
+ permissions:
119
+ id-token: write
120
+
121
+ steps:
122
+ - name: Checkout repository
123
+ uses: actions/checkout@v6
124
+
125
+ - name: Check version matches tag
126
+ run: |
127
+ VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
128
+ TAG=${GITHUB_REF#refs/tags/v}
129
+
130
+ echo "Package version: $VERSION"
131
+ echo "Git tag: $TAG"
132
+
133
+ if [ "$VERSION" != "$TAG" ]; then
134
+ echo "Version mismatch: pyproject.toml=$VERSION tag=$TAG"
135
+ exit 1
136
+ fi
137
+
138
+ - name: Download all artifacts
139
+ uses: actions/download-artifact@v5
140
+ with:
141
+ path: dist
142
+ merge-multiple: true
143
+
144
+ - name: Inspect distributions
145
+ run: find dist -maxdepth 1 -type f
146
+
147
+ - name: Publish to PyPI
148
+ uses: pypa/gh-action-pypi-publish@release/v1
149
+ with:
150
+ packages-dir: dist
@@ -0,0 +1,83 @@
1
+ name: Googletest Unit Tests
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ strategy:
8
+ matrix:
9
+ os: [ubuntu-latest, macos-latest]
10
+ runs-on: ${{ matrix.os }}
11
+
12
+ steps:
13
+ - name: Checkout Loki
14
+ uses: actions/checkout@v2
15
+
16
+ - name: Install native dependencies
17
+ run: |
18
+ python -m pip install --upgrade pip
19
+ python -m pip install pyyggdrasil==0.0.2
20
+
21
+ # Debug
22
+ - name: Debug, Configure, and Build Loki
23
+ run: |
24
+ cmake -DCMAKE_BUILD_TYPE=Debug -DLOKI_BUILD_TESTS=ON -S . -B build_debug \
25
+ -DPython3_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')" \
26
+ -DCMAKE_PREFIX_PATH="$(python -c 'import pyyggdrasil; print(pyyggdrasil.native_prefix())')"
27
+ cmake --build build_debug
28
+
29
+ - name: Debug Test
30
+ working-directory: build_debug/tests/unit
31
+ run: |
32
+ NATIVE_LIB_DIR="$(python -c 'import pyyggdrasil; print(pyyggdrasil.native_prefix() / "lib")')"
33
+ export DYLD_LIBRARY_PATH="${NATIVE_LIB_DIR}:$PWD/../../src:${DYLD_LIBRARY_PATH:-}"
34
+ export LD_LIBRARY_PATH="${NATIVE_LIB_DIR}:$PWD/../../src:${LD_LIBRARY_PATH:-}"
35
+ if ! GTEST_OUTPUT=xml:test-results/ GTEST_COLOR=1 ctest -V --output-on-failure; then
36
+ if [ "$(uname)" = "Darwin" ]; then
37
+ echo "==== loki_tests dylibs ===="
38
+ otool -L ./loki_tests || true
39
+ echo "==== loki_tests rpaths ===="
40
+ otool -l ./loki_tests | grep -A3 LC_RPATH || true
41
+ echo "==== libloki_parsers dylibs ===="
42
+ otool -L ../../src/libloki_parsers.dylib || true
43
+ echo "==== lldb backtrace ===="
44
+ lldb --batch \
45
+ -o "settings set target.disable-aslr false" \
46
+ -o "run" \
47
+ -o "thread backtrace all" \
48
+ -- ./loki_tests || true
49
+ fi
50
+ exit 1
51
+ fi
52
+
53
+ # Release
54
+ - name: Release, Configure, and Build Loki
55
+ run: |
56
+ cmake -DCMAKE_BUILD_TYPE=Release -DLOKI_BUILD_TESTS=ON -S . -B build_release \
57
+ -DPython3_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')" \
58
+ -DCMAKE_PREFIX_PATH="$(python -c 'import pyyggdrasil; print(pyyggdrasil.native_prefix())')"
59
+ cmake --build build_release
60
+
61
+ - name: Release Test
62
+ working-directory: build_release/tests/unit
63
+ run: |
64
+ NATIVE_LIB_DIR="$(python -c 'import pyyggdrasil; print(pyyggdrasil.native_prefix() / "lib")')"
65
+ export DYLD_LIBRARY_PATH="${NATIVE_LIB_DIR}:$PWD/../../src:${DYLD_LIBRARY_PATH:-}"
66
+ export LD_LIBRARY_PATH="${NATIVE_LIB_DIR}:$PWD/../../src:${LD_LIBRARY_PATH:-}"
67
+ if ! GTEST_OUTPUT=xml:test-results/ GTEST_COLOR=1 ctest -V --output-on-failure; then
68
+ if [ "$(uname)" = "Darwin" ]; then
69
+ echo "==== loki_tests dylibs ===="
70
+ otool -L ./loki_tests || true
71
+ echo "==== loki_tests rpaths ===="
72
+ otool -l ./loki_tests | grep -A3 LC_RPATH || true
73
+ echo "==== libloki_parsers dylibs ===="
74
+ otool -L ../../src/libloki_parsers.dylib || true
75
+ echo "==== lldb backtrace ===="
76
+ lldb --batch \
77
+ -o "settings set target.disable-aslr false" \
78
+ -o "run" \
79
+ -o "thread backtrace all" \
80
+ -- ./loki_tests || true
81
+ fi
82
+ exit 1
83
+ fi
@@ -0,0 +1,47 @@
1
+ # Build artefacts
2
+ build
3
+ build-*
4
+ dependencies-build
5
+ dependencies-install
6
+ dist
7
+ *.egg-info
8
+ .venv
9
+ .pypddl-yggdrasil-lib-dir
10
+ __pycache__
11
+ *.pyc
12
+
13
+ # IDE files
14
+ .vscode
15
+
16
+ # Prerequisites
17
+ *.d
18
+
19
+ # Compiled Object files
20
+ *.slo
21
+ *.lo
22
+ *.o
23
+ *.obj
24
+
25
+ # Precompiled Headers
26
+ *.gch
27
+ *.pch
28
+
29
+ # Compiled Dynamic libraries
30
+ *.so
31
+ *.dylib
32
+ *.dll
33
+
34
+ # Fortran module files
35
+ *.mod
36
+ *.smod
37
+
38
+ # Compiled Static libraries
39
+ *.lai
40
+ *.la
41
+ *.a
42
+ *.lib
43
+
44
+ # Executables
45
+ *.exe
46
+ *.out
47
+ *.app
pypddl-1.0.1/Apptainer ADDED
@@ -0,0 +1,89 @@
1
+ Bootstrap: docker
2
+ From: ubuntu:24.04
3
+ Stage: build
4
+
5
+ %files
6
+ . /opt/loki
7
+
8
+ %post
9
+ # Set noninteractive mode for apt
10
+ export DEBIAN_FRONTEND=noninteractive
11
+
12
+ # Update and install dependencies
13
+ apt-get update
14
+ apt-get install -y \
15
+ build-essential \
16
+ cmake \
17
+ git \
18
+ python3 \
19
+ python3-pip \
20
+ wget \
21
+ ca-certificates \
22
+ ccache \
23
+ && apt-get clean \
24
+ && rm -rf /var/lib/apt/lists/*
25
+
26
+ # Set working directory
27
+ cd /opt/loki
28
+
29
+ # Install native dependencies
30
+ python3 -m pip install --break-system-packages pyyggdrasil==0.0.2
31
+
32
+ # Build Loki
33
+ cmake -S . -B build \
34
+ -DCMAKE_PREFIX_PATH="$(python3 -c 'import pyyggdrasil; print(pyyggdrasil.native_prefix())')" \
35
+ -DCMAKE_BUILD_TYPE=Release \
36
+ -DLOKI_BUILD_TESTS=OFF \
37
+ -DLOKI_BUILD_BENCHMARKS=OFF \
38
+ -DLOKI_BUILD_EXECUTABLES=ON
39
+ cmake --build build -j$(nproc)
40
+
41
+ # Install Loki to a staging directory
42
+ cmake --install build --prefix=/opt/loki/install
43
+
44
+
45
+ # Runtime stage
46
+ Bootstrap: docker
47
+ From: ubuntu:24.04
48
+ Stage: runtime
49
+
50
+ %files from build
51
+ /opt/loki/install /usr/local
52
+ /opt/loki/build/exe/loki /usr/local/bin/loki
53
+
54
+ %post
55
+ # Install only runtime dependencies
56
+ export DEBIAN_FRONTEND=noninteractive
57
+ apt-get update
58
+ apt-get install -y \
59
+ libstdc++6 \
60
+ libgomp1 \
61
+ && apt-get clean \
62
+ && rm -rf /var/lib/apt/lists/*
63
+
64
+ # Update library cache
65
+ ldconfig
66
+
67
+ %environment
68
+ export LC_ALL=C
69
+ export PATH=/usr/local/bin:$PATH
70
+ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
71
+
72
+ %runscript
73
+ exec loki "$@"
74
+
75
+ %labels
76
+ Author Dominik Drexler
77
+ Description Loki PDDL parser and translator
78
+
79
+ %help
80
+ This is a container for Loki, a C++20 library for syntactic and semantic
81
+ parsing and translation of PDDL files.
82
+
83
+ Usage:
84
+ apptainer run loki.sif <domain.pddl> <problem.pddl>
85
+
86
+ Or start an interactive shell:
87
+ apptainer shell loki.sif
88
+
89
+ The loki executable is available at /usr/local/bin/loki