d4Solver 0.1.0__cp313-cp313-win_amd64.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 (160) hide show
  1. d4solver-0.1.0.dist-info/DELVEWHEEL +2 -0
  2. d4solver-0.1.0.dist-info/METADATA +225 -0
  3. d4solver-0.1.0.dist-info/RECORD +160 -0
  4. d4solver-0.1.0.dist-info/WHEEL +5 -0
  5. d4solver.libs/gmp-10-521f5d57a531da7f2ddd75a64634bf47.dll +0 -0
  6. d4solver.libs/gmpxx-4-1aec0d72b737c81b6397e2967c9be349.dll +0 -0
  7. d4solver.libs/msvcp140-484f56d9de72c048820300919dc49e56.dll +0 -0
  8. include/__init__.py +10 -0
  9. include/optree/EnumMetadata.hpp +63 -0
  10. include/optree/Option.hpp +198 -0
  11. include/optree/OptionBase.hpp +46 -0
  12. include/optree/OptionGroup.hpp +75 -0
  13. include/optree/OptionJson.hpp +257 -0
  14. include/optree/OptionRegistry.hpp +352 -0
  15. include/py-d4-standard/ActivityManager.hpp +33 -0
  16. include/py-d4-standard/Alg.hpp +82 -0
  17. include/py-d4-standard/Alloc.hpp +128 -0
  18. include/py-d4-standard/AndGatesExtractor.hpp +51 -0
  19. include/py-d4-standard/AtMost1Extractor.hpp +67 -0
  20. include/py-d4-standard/BadBehaviourException.hpp +48 -0
  21. include/py-d4-standard/BranchingHeuristic.hpp +221 -0
  22. include/py-d4-standard/BranchingHeuristicClassic.hpp +70 -0
  23. include/py-d4-standard/BranchingHeuristicHybridPartialClassic.hpp +92 -0
  24. include/py-d4-standard/BranchingHeuristicLargeArity.hpp +76 -0
  25. include/py-d4-standard/BucketAllocator.hpp +112 -0
  26. include/py-d4-standard/BucketException.hpp +48 -0
  27. include/py-d4-standard/BucketInConstruction.hpp +69 -0
  28. include/py-d4-standard/BucketManager.hpp +97 -0
  29. include/py-d4-standard/BucketSortInfo.hpp +45 -0
  30. include/py-d4-standard/BufferRead.hpp +172 -0
  31. include/py-d4-standard/CacheCleaningExpectation.hpp +155 -0
  32. include/py-d4-standard/CacheCleaningManager.hpp +81 -0
  33. include/py-d4-standard/CacheCleaningNone.hpp +48 -0
  34. include/py-d4-standard/CacheList.hpp +185 -0
  35. include/py-d4-standard/CacheManager.hpp +253 -0
  36. include/py-d4-standard/CacheNoCollision.hpp +142 -0
  37. include/py-d4-standard/CachedBucket.hpp +70 -0
  38. include/py-d4-standard/CircuitManager.hpp +94 -0
  39. include/py-d4-standard/CircuitManagerDyn.hpp +56 -0
  40. include/py-d4-standard/CircuitWithCnfManager.hpp +55 -0
  41. include/py-d4-standard/ClauseInfo.hpp +32 -0
  42. include/py-d4-standard/CnfManager.hpp +228 -0
  43. include/py-d4-standard/CnfManagerDyn.hpp +182 -0
  44. include/py-d4-standard/CnfManagerDynBlockedCl.hpp +81 -0
  45. include/py-d4-standard/CnfManagerDynPure.hpp +70 -0
  46. include/py-d4-standard/Counter.hpp +54 -0
  47. include/py-d4-standard/DataBranch.hpp +37 -0
  48. include/py-d4-standard/DataInfo.hpp +74 -0
  49. include/py-d4-standard/DataOccurrence.hpp +114 -0
  50. include/py-d4-standard/DpllStyleMethod.hpp +544 -0
  51. include/py-d4-standard/EnumMetadata.hpp +25 -0
  52. include/py-d4-standard/EquivExtractor.hpp +43 -0
  53. include/py-d4-standard/ErrorCode.hpp +28 -0
  54. include/py-d4-standard/ExistRandomExist.hpp +1122 -0
  55. include/py-d4-standard/FactoryException.hpp +48 -0
  56. include/py-d4-standard/FormulaManager.hpp +272 -0
  57. include/py-d4-standard/FormulaStore.hpp +48 -0
  58. include/py-d4-standard/FormulaStoreCnf.hpp +96 -0
  59. include/py-d4-standard/FormulaStoreCnfCl.hpp +95 -0
  60. include/py-d4-standard/FormulaStoreCnfCombi.hpp +52 -0
  61. include/py-d4-standard/FormulaStoreCnfIndex.hpp +44 -0
  62. include/py-d4-standard/FormulaStoreCnfSym.hpp +91 -0
  63. include/py-d4-standard/Graph.hpp +88 -0
  64. include/py-d4-standard/GraphExtractor.hpp +71 -0
  65. include/py-d4-standard/GraphExtractorCircuit.hpp +41 -0
  66. include/py-d4-standard/GraphExtractorCircuitPrimal.hpp +44 -0
  67. include/py-d4-standard/GraphExtractorCnf.hpp +49 -0
  68. include/py-d4-standard/GraphExtractorCnfPrimal.hpp +46 -0
  69. include/py-d4-standard/HashString.hpp +39 -0
  70. include/py-d4-standard/Heap.hpp +145 -0
  71. include/py-d4-standard/HyperEdge.hpp +56 -0
  72. include/py-d4-standard/HyperGraph.hpp +71 -0
  73. include/py-d4-standard/HyperGraphExtractor.hpp +100 -0
  74. include/py-d4-standard/HyperGraphExtractorCnfDual.hpp +70 -0
  75. include/py-d4-standard/IntTypes.hpp +42 -0
  76. include/py-d4-standard/Map.hpp +192 -0
  77. include/py-d4-standard/MaxSharpSAT.hpp +939 -0
  78. include/py-d4-standard/MaxT.hpp +924 -0
  79. include/py-d4-standard/MemoryStat.hpp +136 -0
  80. include/py-d4-standard/MethodManager.hpp +76 -0
  81. include/py-d4-standard/MinSharpSAT.hpp +629 -0
  82. include/py-d4-standard/MpzTypes.hpp +31 -0
  83. include/py-d4-standard/NodeException.hpp +48 -0
  84. include/py-d4-standard/Option.hpp +8 -0
  85. include/py-d4-standard/OptionBase.hpp +7 -0
  86. include/py-d4-standard/OptionBranchingHeuristic.hpp +147 -0
  87. include/py-d4-standard/OptionBucketManager.hpp +73 -0
  88. include/py-d4-standard/OptionCacheCleaningManager.hpp +45 -0
  89. include/py-d4-standard/OptionCacheManager.hpp +50 -0
  90. include/py-d4-standard/OptionDpllStyleMethod.hpp +82 -0
  91. include/py-d4-standard/OptionEREMethod.hpp +85 -0
  92. include/py-d4-standard/OptionException.hpp +48 -0
  93. include/py-d4-standard/OptionFormulaManager.hpp +82 -0
  94. include/py-d4-standard/OptionGroup.hpp +8 -0
  95. include/py-d4-standard/OptionMaxSharpSatMethod.hpp +73 -0
  96. include/py-d4-standard/OptionMaxTMethod.hpp +78 -0
  97. include/py-d4-standard/OptionMethodManager.hpp +38 -0
  98. include/py-d4-standard/OptionMinSharpSatMethod.hpp +73 -0
  99. include/py-d4-standard/OptionOperationManager.hpp +64 -0
  100. include/py-d4-standard/OptionPartialOrderHeuristic.hpp +136 -0
  101. include/py-d4-standard/OptionProjMcMethod.hpp +68 -0
  102. include/py-d4-standard/OptionQbfCounter.hpp +64 -0
  103. include/py-d4-standard/OptionRegistry.hpp +7 -0
  104. include/py-d4-standard/OptionRoot.hpp +43 -0
  105. include/py-d4-standard/OptionSolver.hpp +83 -0
  106. include/py-d4-standard/Options.hpp +385 -0
  107. include/py-d4-standard/ParserException.hpp +48 -0
  108. include/py-d4-standard/PartialOrderHeuristic.hpp +74 -0
  109. include/py-d4-standard/PartialOrderHeuristicGiven.hpp +64 -0
  110. include/py-d4-standard/PartialOrderHeuristicNone.hpp +32 -0
  111. include/py-d4-standard/PartialOrderHeuristicTreeDecomp.hpp +74 -0
  112. include/py-d4-standard/PartitionerManager.hpp +73 -0
  113. include/py-d4-standard/PartitionerPatoh.hpp +45 -0
  114. include/py-d4-standard/PhaseHeuristic.hpp +41 -0
  115. include/py-d4-standard/PhaseHeuristicFalse.hpp +28 -0
  116. include/py-d4-standard/PhaseHeuristicOccurrence.hpp +34 -0
  117. include/py-d4-standard/PhaseHeuristicPolarity.hpp +34 -0
  118. include/py-d4-standard/PhaseHeuristicTrue.hpp +28 -0
  119. include/py-d4-standard/PolarityManager.hpp +29 -0
  120. include/py-d4-standard/ProblemManager.hpp +309 -0
  121. include/py-d4-standard/ProblemTypes.hpp +136 -0
  122. include/py-d4-standard/ProjMCMethod.hpp +682 -0
  123. include/py-d4-standard/QbfCounter.hpp +510 -0
  124. include/py-d4-standard/Queue.hpp +61 -0
  125. include/py-d4-standard/ScoringMethod.hpp +51 -0
  126. include/py-d4-standard/ScoringMethodDlcs.hpp +33 -0
  127. include/py-d4-standard/ScoringMethodJwts.hpp +33 -0
  128. include/py-d4-standard/ScoringMethodMom.hpp +33 -0
  129. include/py-d4-standard/ScoringMethodVsads.hpp +37 -0
  130. include/py-d4-standard/ScoringMethodVsids.hpp +33 -0
  131. include/py-d4-standard/SemiringConcept.hpp +58 -0
  132. include/py-d4-standard/Solver.hpp +947 -0
  133. include/py-d4-standard/SolverTypes.hpp +601 -0
  134. include/py-d4-standard/Sort.hpp +96 -0
  135. include/py-d4-standard/TmpEntry.hpp +47 -0
  136. include/py-d4-standard/Translator.hpp +113 -0
  137. include/py-d4-standard/TreeDecomposition.hpp +271 -0
  138. include/py-d4-standard/TreeDecompositionPartition.hpp +61 -0
  139. include/py-d4-standard/TreeDecompositionTreeWidth.hpp +70 -0
  140. include/py-d4-standard/TreeDecompositioner.hpp +75 -0
  141. include/py-d4-standard/TreeDecompositionerFlowCutter.hpp +73 -0
  142. include/py-d4-standard/TreeDecompositionerHtd.hpp +58 -0
  143. include/py-d4-standard/Vec.hpp +156 -0
  144. include/py-d4-standard/WrapperCircuitGlucose.hpp +33 -0
  145. include/py-d4-standard/WrapperCircuitMinisat.hpp +30 -0
  146. include/py-d4-standard/WrapperGlucose.hpp +76 -0
  147. include/py-d4-standard/WrapperMinisat.hpp +77 -0
  148. include/py-d4-standard/WrapperSolver.hpp +113 -0
  149. include/py-d4-standard/XAlloc.hpp +43 -0
  150. lib/__init__.py +10 -0
  151. lib/d4.lib +0 -0
  152. py_d4/__init__.py +76 -0
  153. py_d4/_py_d4.cp313-win_amd64.pyd +0 -0
  154. py_d4/_py_d4.pyi +551 -0
  155. py_d4/options.py +27 -0
  156. py_d4/py.typed +1 -0
  157. share/__init__.py +10 -0
  158. share/cmake/optree/optreeConfig.cmake +1 -0
  159. share/cmake/optree/optreeConfigVersion.cmake +65 -0
  160. share/cmake/optree/optreeTargets.cmake +106 -0
@@ -0,0 +1,2 @@
1
+ Version: 1.13.0
2
+ Arguments: ['C:\\Users\\jmcla\\AppData\\Local\\Temp\\cibw-run-okvfe56f\\cp313-win_amd64\\build\\venv\\Scripts\\delvewheel', 'repair', '--add-path', 'C:\\vcpkg\\installed\\x64-windows\\bin', '-w', 'C:\\Users\\jmcla\\AppData\\Local\\Temp\\cibw-run-okvfe56f\\cp313-win_amd64\\repaired_wheel', 'C:\\Users\\jmcla\\AppData\\Local\\Temp\\cibw-run-okvfe56f\\cp313-win_amd64\\built_wheel\\d4solver-0.1.0-cp313-cp313-win_amd64.whl']
@@ -0,0 +1,225 @@
1
+ Metadata-Version: 2.2
2
+ Name: d4Solver
3
+ Version: 0.1.0
4
+ Summary: Python bindings for the D4 model counter and compiler
5
+ Author-Email: Logical Team <contact@univ-artois.fr>
6
+ Classifier: Programming Language :: C++
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Requires-Python: >=3.9
10
+ Description-Content-Type: text/markdown
11
+
12
+ # py-d4
13
+
14
+ Python bindings for the **D4** compiler and model counter, supporting option structures, CNF files, custom clause vectors, logic circuits, weighted model counting, and d-DNNF queries. Built with `nanobind` and `scikit-build-core`.
15
+
16
+ ---
17
+
18
+ ## 🚀 Users Guide
19
+
20
+ ### 1. Installation
21
+
22
+ Install the package directly from your GitLab PyPI package registry (typically configured in your CI or local `.pip/pip.conf`):
23
+
24
+ ```bash
25
+ pip install d4Solver --extra-index-url https://gitlab.univ-artois.fr/api/v4/projects/<PROJECT_ID>/packages/pypi/simple
26
+ ```
27
+
28
+ ### 2. Usage Examples
29
+
30
+ #### 2.1 Basic Model Counting
31
+
32
+ You can instantiate a `Solver` using a CNF filepath or raw Python clause structures (list of lists/tuples of literals, 1-based indexing):
33
+
34
+ ```python
35
+ import py_d4
36
+
37
+ # 1. Option A: Load from a DIMACS CNF file
38
+ solver = py_d4.Solver("path/to/formula.cnf")
39
+
40
+ # 2. Option B: Pass raw Python clauses and total variable count
41
+ # Formula: (x1 or x2) and (not x2 or x3)
42
+ clauses = [
43
+ [1, 2],
44
+ [-2, 3]
45
+ ]
46
+ nb_vars = 3
47
+ solver = py_d4.Solver(clauses, nb_vars)
48
+
49
+ # Run model counting
50
+ count_res = solver.count()
51
+ print(f"Number of models: {count_res.getResult()}") # Large integer as string (GMP support)
52
+ print(f"As Python integer: {count_res.getIntResult()}") # Safe python int
53
+ ```
54
+
55
+ #### 2.2 Compilation to d-DNNF
56
+
57
+ `py-d4` can compile CNF formulas and circuits into Decision Diagram / Deterministic Decomposable Negation Normal Form (d-DNNF):
58
+
59
+ ```python
60
+ import py_d4
61
+
62
+ clauses = [[1, 2], [-2, 3]]
63
+ solver = py_d4.Solver(clauses, 3)
64
+
65
+ # Compile
66
+ compile_res = solver.compile()
67
+
68
+ # Access compiled graph statistics
69
+ print(f"Nodes in d-DNNF: {compile_res.getNbNodes()}")
70
+ print(f"Edges in d-DNNF: {compile_res.getNbEdges()}")
71
+
72
+ # Get the compiled NNF circuit string (in standard d-DNNF format)
73
+ nnf_str = compile_res.getNNFString()
74
+ print("NNF String:\n", nnf_str)
75
+ ```
76
+
77
+ #### 2.3 Querying the Compiled d-DNNF
78
+
79
+ Once compiled, you can run multiple queries (SAT checks or model counting) under different literal assumptions:
80
+
81
+ ```python
82
+ # Check if the formula is satisfiable (no assumptions)
83
+ is_sat = compile_res.isSAT([]) # True/False
84
+
85
+ # Check satisfiability assuming x1 is True (1) and x2 is False (-2)
86
+ is_sat_under_assumptions = compile_res.isSAT([1, -2])
87
+
88
+ # Count models under literal assumptions
89
+ # E.g., model count assuming x1 is True
90
+ count_under_x1 = compile_res.count([1])
91
+ print(f"Models satisfying x1: {count_under_x1}")
92
+ ```
93
+
94
+ #### 2.4 Weighted Model Counting (WMC)
95
+
96
+ You can assign weights to literals for exact weighted model counting:
97
+
98
+ ```python
99
+ import py_d4
100
+
101
+ # Formula: (x1 or x2)
102
+ solver = py_d4.Solver([[1, 2]], nb_vars=2)
103
+
104
+ # Define weights for literals (keys are 1-based literals, values are string representations)
105
+ weights = {
106
+ 1: "0.3",
107
+ -1: "0.7",
108
+ 2: "0.4",
109
+ -2: "0.6"
110
+ }
111
+ # Set weights (WeightType can be FLOAT or GMP)
112
+ solver.setWeights(weights, py_d4.WeightType.FLOAT)
113
+
114
+ # Compute WMC directly
115
+ count_res = solver.count()
116
+ print("WMC Result:", float(count_res.getResult())) # Output: 0.58
117
+
118
+ # Or compile and query WMC under assumptions
119
+ compile_res = solver.compile()
120
+ print("WMC under x1=True:", float(compile_res.count([1]))) # Output: 0.3
121
+ ```
122
+
123
+ #### 2.5 Logic Gates / Circuit Compilation
124
+
125
+ Instead of CNF, you can initialize the solver with logic gates to compile or count structured circuits:
126
+
127
+ ```python
128
+ import py_d4
129
+
130
+ # Create a gate representing: x3 = x1 AND (not x2)
131
+ gate = py_d4.Gate()
132
+ gate.gateType = py_d4.GateType.AND
133
+ gate.inputs = [1, -2]
134
+ gate.output = 3
135
+
136
+ # Instantiate solver from gate specifications
137
+ solver = py_d4.Solver([gate], nb_vars=3)
138
+ print("Models for circuit:", solver.count().getIntResult())
139
+ ```
140
+
141
+ #### 2.6 Solver Configuration & Options
142
+
143
+ Fine-tune the behavior of D4 by mutating native C++ option structures. Documentation and description of settings are exposed natively as Python docstrings:
144
+
145
+ ```python
146
+ import py_d4
147
+
148
+ # Instantiate default options
149
+ opt = py_d4.OptionDpllStyleMethod()
150
+
151
+ # 1. Read Option Descriptions (C++ docstrings exposed to Python)
152
+ print(py_d4.OptionDpllStyleMethod.exploitModel.__doc__)
153
+ # Output: "If we exploit model during search"
154
+
155
+ # 2. Modify properties directly (with type safety)
156
+ opt.precision = 30
157
+ opt.exploitModel = False
158
+ opt.optionSolver.solverName = 0 # 0: glucose, 1: minisat
159
+
160
+ # 3. Modify nested option group settings
161
+ opt.optionBranchingHeuristic.freqDecay = 98
162
+
163
+ # 4. Pass options to the Solver
164
+ solver = py_d4.Solver("formula.cnf", opt)
165
+
166
+ # 5. Serialize options to/from standard Python Dictionaries
167
+ config_dict = py_d4.dump_options_to_dict(opt)
168
+ opt_restored = py_d4.load_options_from_dict(config_dict)
169
+
170
+ # 6. Serialize options to/from raw JSON Strings (via native C++ bindings)
171
+ json_str = py_d4._py_d4.dump_options_to_json(opt)
172
+ opt_restored_json = py_d4._py_d4.load_options_from_json(json_str)
173
+ ```
174
+
175
+ ---
176
+
177
+ ## 🛠️ Developers Guide
178
+
179
+ ### 1. Requirements
180
+
181
+ Before building locally, ensure the following system-level dependencies are installed on your host:
182
+ - C++20 compatible compiler (e.g. GCC >= 10, Clang >= 10)
183
+ - CMake (>= 3.15)
184
+ - GMP development headers (`libgmp-dev` / `gmp-devel`)
185
+ - Zlib development headers (`zlib1g-dev` / `zlib-devel`)
186
+
187
+ ### 2. Local Build Pipeline
188
+
189
+ To compile the C++ extension module and deploy it directly inside your local Python package tree, run:
190
+
191
+ ```bash
192
+ # 1. Provide your GitLab access token to clone the D4 dependency
193
+ export GITLAB_TOKEN_LOGICAL="your_gitlab_token"
194
+
195
+ # 2. Configure, generate bindings, compile, and deploy shared library
196
+ ./build.sh
197
+ ```
198
+
199
+ Alternatively, you can install the package in editable mode via pip:
200
+ ```bash
201
+ pip install -e .
202
+ ```
203
+
204
+ ### 3. Re-Generating Bindings
205
+
206
+ If D4 option headers change, you can automatically parse the new C++ classes and inline constructor descriptions to rebuild the `nanobind` bindings:
207
+
208
+ ```bash
209
+ python3 scripts/generate_bindings.py /path/to/local/d4
210
+ ```
211
+ *(If `/path/to/local/d4` is omitted, the script automatically searches the CMake FetchContent directory).*
212
+
213
+ ### 4. Running Tests
214
+
215
+ To execute the test suite and verify the integrity of the wrapper:
216
+
217
+ ```bash
218
+ LD_PRELOAD=$(gcc -print-file-name=libstdc++.so.6) PYTHONPATH=. python3 tests/test_options.py
219
+ ```
220
+
221
+ ### 5. GitLab CI/CD Pipeline
222
+
223
+ The project includes an automated multi-stage `.gitlab-ci.yml` pipeline:
224
+ - **Build Stage**: Uses `cibuildwheel` to compile optimized, standalone Linux wheels for Python 3.8 to 3.13. It automatically routes the group-level `GITLAB_TOKEN_LOGICAL` CI variable to authenticate both the `py-d4` and internal `d4`/`optree` sub-project checkouts.
225
+ - **Deploy Stage**: Triggered on pushing Git tags. Automatically publishes the generated wheel packages directly to the GitLab project PyPI package registry using `twine`.
@@ -0,0 +1,160 @@
1
+ d4solver-0.1.0.dist-info/DELVEWHEEL,sha256=PrraT-q0mlQ3n176HmsRZyM_ESS1J4VkXTZUsdTi-fw,439
2
+ d4solver-0.1.0.dist-info/METADATA,sha256=XLJbz2j6VHPwzkjXyS-a0zwLD0B7COH0EqQRX6PahlY,6996
3
+ d4solver-0.1.0.dist-info/RECORD,,
4
+ d4solver-0.1.0.dist-info/WHEEL,sha256=dXz53UX_wVrENU3pg7IjBHl1TfATF0jKSXtQDtrFnLw,105
5
+ d4solver.libs/gmp-10-521f5d57a531da7f2ddd75a64634bf47.dll,sha256=Uh9dV6Ux2n8t3XWmRjS_R6xFy_jAqitZQNhB5mhXlqE,423424
6
+ d4solver.libs/gmpxx-4-1aec0d72b737c81b6397e2967c9be349.dll,sha256=ph9Yg908BAzNwGoQrzcMsO9cW23twhLJ0QlBi4hTyR4,27136
7
+ d4solver.libs/msvcp140-484f56d9de72c048820300919dc49e56.dll,sha256=SE9W2d5ywEiCAwCRncSeVtm8O7RWdnkNPu60BsFCjCk,568712
8
+ include/__init__.py,sha256=hK-jOgKLw2ObTQb_0m6EWVeBYHXq2w8j2h4Uc-eHXYA,328
9
+ include/optree/EnumMetadata.hpp,sha256=cj62izIeeV9eS2j_ZPLM3x83Xta-Tmmd9j2JJfDEWgw,1821
10
+ include/optree/Option.hpp,sha256=k6ZfXLBrcDKxRxFz8lw5RVq14T69kHYUR5F4vfUQzYw,5803
11
+ include/optree/OptionBase.hpp,sha256=AYqym2Hv1Uz-ysG9o7t9oTn_FFI3LbZVd4TdkP8V_LY,1543
12
+ include/optree/OptionGroup.hpp,sha256=aOHsmoldHwoabRx7jRMz31SoILTyhhpkeVXVtBeOSR8,2239
13
+ include/optree/OptionJson.hpp,sha256=wkWPMkYnmdz7hcEe_hCAL3dsKF1VBGzQ8_KuL8Yti98,7988
14
+ include/optree/OptionRegistry.hpp,sha256=pksvrMcES3dN32TsFZKFVuaurIzo9DQcQ5PdEXr68dE,13121
15
+ include/py-d4-standard/ActivityManager.hpp,sha256=rc6syVLEl1kMU-9hDgd285i-nwEvom4GNZWbWuMgmeI,1239
16
+ include/py-d4-standard/Alg.hpp,sha256=RFhMjm4TwjqGxG5iO2lFZhiRFMOQLwTZOB6qG-Lemes,2780
17
+ include/py-d4-standard/Alloc.hpp,sha256=01QcLu-LgdXvi5JmSUkHJvmjeONUjdjpSSiVCsSPDW8,4287
18
+ include/py-d4-standard/AndGatesExtractor.hpp,sha256=s23xhF3rl193S5zKM1zGTf3zy1OXb1_P5OxSaRVvPls,1518
19
+ include/py-d4-standard/AtMost1Extractor.hpp,sha256=f9xxfW7M2U0o5DxYwCo_KurtMaLTi0UmFyqLf71XUUk,1967
20
+ include/py-d4-standard/BadBehaviourException.hpp,sha256=v4o-4ZKEqKA3b-oEvgaEbjKVu-zKxL2jYwzAKesoAx8,1532
21
+ include/py-d4-standard/BranchingHeuristic.hpp,sha256=mU8Y5VI9FUm-0KZU5uq_eAgaeMjRDsVJPELkklqwgWo,7971
22
+ include/py-d4-standard/BranchingHeuristicClassic.hpp,sha256=L7ZRE-zyYGo-BnIu0yd1CX4lnkIDYezHum6UMU1UAFY,2845
23
+ include/py-d4-standard/BranchingHeuristicHybridPartialClassic.hpp,sha256=ntIJqEaAfQ8lVrShx5gkqHBBfjd9DXCl4cdOmk6wShs,3666
24
+ include/py-d4-standard/BranchingHeuristicLargeArity.hpp,sha256=bchVaERu1uX26bDBn5vCbTXIzYvrQymEaiesALr34Ks,3193
25
+ include/py-d4-standard/BucketAllocator.hpp,sha256=30KF0pScuQjV89qXEsX7IhFqRF4xdg_oummrLXRIklY,3991
26
+ include/py-d4-standard/BucketException.hpp,sha256=reOQi76jxIB5mhpgJ7-cxtdvsr3zdn8u7OrtS6j0DFc,1520
27
+ include/py-d4-standard/BucketInConstruction.hpp,sha256=BEYT_pxE5SC3Ji3uHFqIinl7VQ2AG-lCkYKojXLWwuk,2164
28
+ include/py-d4-standard/BucketManager.hpp,sha256=JDorIW4IUgbp1Zy5rGZJxCOAcZGGut68evtbaT4UJFQ,2968
29
+ include/py-d4-standard/BucketSortInfo.hpp,sha256=eCJnQsKZ5GpsnL5my4zlHQnd039KK4pFQnZ1mU1yJ2s,1493
30
+ include/py-d4-standard/BufferRead.hpp,sha256=QHSqNzEtYIPEjo4VfHDErHktAIWNNQJ_ar7B6Nd9eUM,4251
31
+ include/py-d4-standard/CacheCleaningExpectation.hpp,sha256=TOkxgfkbqGytOEz6vkrVmbdB3xcVFm1KCVpQzg7V32c,4706
32
+ include/py-d4-standard/CacheCleaningManager.hpp,sha256=lr2fdCUbEd4MnCl_JM9YnGiZSNvAj-Cbo5DAyabVkL8,2908
33
+ include/py-d4-standard/CacheCleaningNone.hpp,sha256=jTzx7jsNJtYTTWa4F__l6fgUs1r-HlF_Tro8_7qk2lk,1588
34
+ include/py-d4-standard/CachedBucket.hpp,sha256=kZFP0Wbq7Y2MxMcgBPzbDjaJMsvrf6fGXYGzP9Kg9JY,2053
35
+ include/py-d4-standard/CacheList.hpp,sha256=wHsRXsjOJpXMk-YlKKDUuVu7ea8UgzrUx4xJM1_R5GI,5663
36
+ include/py-d4-standard/CacheManager.hpp,sha256=NjSr68fkouiA_11hL0ehgwKPENEHGzvDDtlzBw-xCu0,8876
37
+ include/py-d4-standard/CacheNoCollision.hpp,sha256=VLaX5jWEHZIjKi48mNGjuyP4FDatzmPrg5NzvVrnsMU,4493
38
+ include/py-d4-standard/CircuitManager.hpp,sha256=5okugdLTkmGy2c7c9pek3g5uMMx_MLZUOr7JEqeMYww,3443
39
+ include/py-d4-standard/CircuitManagerDyn.hpp,sha256=WpreEgWRn2FEijR8kxzHaZETPT4Y2fgx0xAt3vb45dc,2280
40
+ include/py-d4-standard/CircuitWithCnfManager.hpp,sha256=L_9emw8xOP2GtSzOa4odSlVAiQOKZMKU-SfS3q-Woo4,2098
41
+ include/py-d4-standard/ClauseInfo.hpp,sha256=HxFkDS7ptq1ovPtbZpk7es2kS1eQ8B_KT_7HuzyK8cA,1130
42
+ include/py-d4-standard/CnfManager.hpp,sha256=rHx8lD2hrSoDlV5Wzc72v-Sn14G_NjokzZho6WHuc88,7885
43
+ include/py-d4-standard/CnfManagerDyn.hpp,sha256=Y7bVxEbw5xQAoJ3L9O2CjyP6lmR7ISonBcojflmGiHI,6062
44
+ include/py-d4-standard/CnfManagerDynBlockedCl.hpp,sha256=-ASyyl_0ZXb8-8WmKexQiiVG4M_TuFqHWE1Ut3Arnd0,2698
45
+ include/py-d4-standard/CnfManagerDynPure.hpp,sha256=JC3-oUpJ3_BeOaZuG-88Br1Ar6XfeCx2bcspcG756Zk,2161
46
+ include/py-d4-standard/Counter.hpp,sha256=WggUpl0r7ZE_0GmMMzKe2gzcv24JA3sYG7VL9RZZ4bA,1700
47
+ include/py-d4-standard/DataBranch.hpp,sha256=xhqsaFJi-rxRSCfRbgE2SA8BaGcx3VTLVl1ebJLUH2o,1184
48
+ include/py-d4-standard/DataInfo.hpp,sha256=-g0kX0x3m2hc94urR_7vJVJBNoVgUA3lNXBJvxZk5vY,2033
49
+ include/py-d4-standard/DataOccurrence.hpp,sha256=mFrXL7ftW-Bga3-MmtJ3Ed4IynnaZ_920pA-GD5Dt5Y,2993
50
+ include/py-d4-standard/DpllStyleMethod.hpp,sha256=T1lRcrSlTVqmmAgMf3EXqOGAX4FTO3CbXfY9jdMWkJw,18882
51
+ include/py-d4-standard/EnumMetadata.hpp,sha256=i99qZjZsmFyry5OTftzSNF4TdOgI5QTe7WdAixYPzPk,620
52
+ include/py-d4-standard/EquivExtractor.hpp,sha256=5qLA8ttLChXArYI5oM7SeIkwcr5CaTkwYQwEsdPU2DA,1489
53
+ include/py-d4-standard/ErrorCode.hpp,sha256=Hh-U36MpXNpUmm5wFohd6BtIJbhk8nLkYOPy3oa-pZo,951
54
+ include/py-d4-standard/ExistRandomExist.hpp,sha256=NH39YhWi9xBFwnf_lmz1rZBzaJm9kXVNLia0YrOWb7c,39079
55
+ include/py-d4-standard/FactoryException.hpp,sha256=GL6aXgy1vT9JZpgcvMlVAXrv61ZkY3XyOYVJbYgAn7o,1522
56
+ include/py-d4-standard/FormulaManager.hpp,sha256=8Qy1sgLMbEZbrdW3fLif2k43shHgscE2Xll8Hy0Se2o,8607
57
+ include/py-d4-standard/FormulaStore.hpp,sha256=KQ5juBTCoW3SB526Kl9EOj2C4Sow8Zjj-7S6pkWJVU0,1749
58
+ include/py-d4-standard/FormulaStoreCnf.hpp,sha256=UlEXsJreyEAs0_nNAeS-naWKrTw1QTvqKwWXJVMdPqo,2859
59
+ include/py-d4-standard/FormulaStoreCnfCl.hpp,sha256=V26drLeC_Y0J4HFYTCEeD_zrObV1xyscxldXAr9eV88,3315
60
+ include/py-d4-standard/FormulaStoreCnfCombi.hpp,sha256=ZWAuEsnTusJodAnJr-vz1x7m1BWCnHOs6Iplgt7AZBg,1776
61
+ include/py-d4-standard/FormulaStoreCnfIndex.hpp,sha256=wIBWf2hb2-QUi0izwJ9A3ds_Xf55pbvi7ydh9L3nhXU,1402
62
+ include/py-d4-standard/FormulaStoreCnfSym.hpp,sha256=gIFTMgssPyVfL5ShC9Lj45sdaMgWyJe0uC4HCFVgT2c,3332
63
+ include/py-d4-standard/Graph.hpp,sha256=W7MTqFifdp_q-puI7q_rAcJ4-HP19GqT2wlU_DJUFOQ,2255
64
+ include/py-d4-standard/GraphExtractor.hpp,sha256=F44x3yp3hPvGCrT3Emvfy6lR21AL9XPSbeRQDbRLwQc,2375
65
+ include/py-d4-standard/GraphExtractorCircuit.hpp,sha256=mfg5Md-nDt6lgIi8FcLfoOV7yTMPwgXAOL1lgP-PrQM,1490
66
+ include/py-d4-standard/GraphExtractorCircuitPrimal.hpp,sha256=LPEjNWowKVpI1lNOxjFIzbW2JI_UfZQh4WDT3QMg3FU,1600
67
+ include/py-d4-standard/GraphExtractorCnf.hpp,sha256=oNFgOtxB-PV7rhceLRN1P1scTZApLldU5ljYS0rAjTI,1758
68
+ include/py-d4-standard/GraphExtractorCnfPrimal.hpp,sha256=46IBfq7ZIugW7aKAfP2YtcxoTr8XSOjyv5Kae38kM74,1624
69
+ include/py-d4-standard/HashString.hpp,sha256=184OHOPaPpEb0WlRCiI9ZLzZADR8xEdZVIgNCYYtQJ8,1308
70
+ include/py-d4-standard/Heap.hpp,sha256=tEO0n-apfBIwe3dl-TQutYcvyhX0xFxm7fkHU7ae57M,4393
71
+ include/py-d4-standard/HyperEdge.hpp,sha256=3UZp9x3a796mskBb7L-BBvfpnwPgIypk1S8RaBTDNrc,1627
72
+ include/py-d4-standard/HyperGraph.hpp,sha256=_BlATkbT-aDF8bxTSyF_AxVHZfP06lkaYiKeaWtZDXQ,2065
73
+ include/py-d4-standard/HyperGraphExtractor.hpp,sha256=xinijZPrvWOA1q-nEmKcB2Khnl1a28WxjqVuHs0pCJ0,3328
74
+ include/py-d4-standard/HyperGraphExtractorCnfDual.hpp,sha256=LG7srBdmDzT4tOsleaXvnj5T741jndvTBBhjXPs2yMc,2572
75
+ include/py-d4-standard/IntTypes.hpp,sha256=rp4L4FnXIF0PCHTSyUjMn2gJannfn6-TTUeWx8EqokY,1822
76
+ include/py-d4-standard/Map.hpp,sha256=djMy3z-S_QcYJBA9GlNSDfHndqM7ZaBfMLsqn8npi0A,6432
77
+ include/py-d4-standard/MaxSharpSAT.hpp,sha256=sRiIcAUtoIhJQhR0B8WR1c62GtrsWkXFJTcQrOKXttk,32916
78
+ include/py-d4-standard/MaxT.hpp,sha256=F8Vytd9KDIhmN5SaX8GF2okIMsHPHcnw2jIMfpeK4wg,32268
79
+ include/py-d4-standard/MemoryStat.hpp,sha256=INDSVTnyX0WnAT3-zmsmiUvlt6vztIo4gx0oEzHbcRo,3959
80
+ include/py-d4-standard/MethodManager.hpp,sha256=AoMDJWeJ70XgvNIgY1ODgzzVCvz9QXSAdiTpRhKBaWc,2159
81
+ include/py-d4-standard/MinSharpSAT.hpp,sha256=p9NkcJlWoW_R2dN26N-j2A-mvc1OVjBEU1tBp5emdtw,22359
82
+ include/py-d4-standard/MpzTypes.hpp,sha256=kKxUOeNzTyYTPImoGupoOLdK3Cwc18GxfbAqBlax3Qg,1320
83
+ include/py-d4-standard/NodeException.hpp,sha256=-HKw7aYd2LFidf3paXU9l0PgxQ5vTlI5kqhe9zttd3A,1516
84
+ include/py-d4-standard/Option.hpp,sha256=FSTJovYcWFt2-CVR_LiWSgGcQGnIr521YmRI0nrQrzE,162
85
+ include/py-d4-standard/OptionBase.hpp,sha256=Noq-qKUHX9_18LpAQfnDVKOB1vQdM1IwNQm6rCBv0YI,157
86
+ include/py-d4-standard/OptionBranchingHeuristic.hpp,sha256=2QoE5tzEatQIBsa_XzFum_yJMl1Y0weJYHK1VRzubLM,5257
87
+ include/py-d4-standard/OptionBucketManager.hpp,sha256=AYqqmiGIRSoK-A0on2ge2rcqqeerw4hOT9iE_bMybKc,3239
88
+ include/py-d4-standard/OptionCacheCleaningManager.hpp,sha256=XCfZ9qAgrOa3jgXXAl_lQSIOUFHtMTfmWigZ4rr1Qiw,1449
89
+ include/py-d4-standard/OptionCacheManager.hpp,sha256=vzwaODXQfmCiPiU3FqM-R676syHhmic9_SMBPC8IHzA,1844
90
+ include/py-d4-standard/OptionDpllStyleMethod.hpp,sha256=rE1dv-LNPcAOtC_QvGnu_vthSlAZEE0J73cojMDvTfs,3330
91
+ include/py-d4-standard/OptionEREMethod.hpp,sha256=FI1Nn1pUobzzbSoYx8WAloWZrOrd5lHeoJbbRaFT3kk,4513
92
+ include/py-d4-standard/OptionException.hpp,sha256=Ma4Kfqud0N_DTl1E2JoUwamh3FsU_PUnpUtY_McfbsQ,1520
93
+ include/py-d4-standard/OptionFormulaManager.hpp,sha256=0VfBxB4NJ6I_TmBzyxvHR29HyNWA4iaYVxFaiYaPf_c,3130
94
+ include/py-d4-standard/OptionGroup.hpp,sha256=3-5iWWj5pPklYlK54YTSj6SBME44UUTGyB2gaXjQVl4,186
95
+ include/py-d4-standard/OptionMaxSharpSatMethod.hpp,sha256=EIfkYB10zbPmGG9oR-33r7DARflFyk9UYjzDBp5Lzxk,3493
96
+ include/py-d4-standard/OptionMaxTMethod.hpp,sha256=Kz2DlUdfkBPK95mIT0fdx8rgq4Yfnzzdi7Kyrlz9WlI,3865
97
+ include/py-d4-standard/OptionMethodManager.hpp,sha256=I8dFLyJQwcTfzL543_ukIkVJsSnW9-fGFdtzMv1HQ5I,1236
98
+ include/py-d4-standard/OptionMinSharpSatMethod.hpp,sha256=Wr78T3-ZsOO-NgiRMTDmZ8q42KVDL6gK8UstruSpK2k,3493
99
+ include/py-d4-standard/OptionOperationManager.hpp,sha256=F5KqzWitpTjnYmqR7e06bgbo4h9nSrucxU81e7_Crh4,2229
100
+ include/py-d4-standard/OptionPartialOrderHeuristic.hpp,sha256=OWSMvjtOePLpFHNKQjyM7e0zUnYsIUuJ0TecPVYNl_Y,5438
101
+ include/py-d4-standard/OptionProjMcMethod.hpp,sha256=RjXzIFXkiU6vG_Aid5CpFPzT-YuMN9wvXdTt3Ar_pYw,2611
102
+ include/py-d4-standard/OptionQbfCounter.hpp,sha256=R1fREn-9PV00pbGO7CaKy3Tw3BPYCyF4vcD1yYulXVE,2541
103
+ include/py-d4-standard/OptionRegistry.hpp,sha256=WdXMr7uP8a0E6bKxMKOqDLyYxMHAST9iYVxD23P3YWs,160
104
+ include/py-d4-standard/OptionRoot.hpp,sha256=LPvj1ck1YH7gO5xElmiY6LiEBNTfGNWQGdDQvwaCI9s,1303
105
+ include/py-d4-standard/Options.hpp,sha256=I_b4LnX4nn-RhNTN1hK6rHoP-Gs0gQYGiULDzSO40YA,12374
106
+ include/py-d4-standard/OptionSolver.hpp,sha256=3H-ItLpSU8nVkS8L6DrX1tMA-X7G3Su4nG2k_3MVl_I,3024
107
+ include/py-d4-standard/ParserException.hpp,sha256=Pq0aIdRlJsfIM7p6PVqz-NmUALxaMWCyEH_PBSYC8jM,1520
108
+ include/py-d4-standard/PartialOrderHeuristic.hpp,sha256=-1CaLEjXOeoTsPSO5Q2hc5NcwJ0kutu3VfVAvOGcBpA,2358
109
+ include/py-d4-standard/PartialOrderHeuristicGiven.hpp,sha256=F4HIjqNvRjSFKwFaOegLpWDrbU6S78Iax3Gml91RAuw,2060
110
+ include/py-d4-standard/PartialOrderHeuristicNone.hpp,sha256=OS1P1voQVTsJskCT5MCYlSohxmAvkI8EBGh5lQOWvHs,1147
111
+ include/py-d4-standard/PartialOrderHeuristicTreeDecomp.hpp,sha256=fVz-7wJgrhQu1hxpfc7dSaJNiCXEPtCOeJecg66w9AE,2363
112
+ include/py-d4-standard/PartitionerManager.hpp,sha256=CCtQYV-8nz4AiUXPmKdWSO1yWSPKvJGvB72Zv06h7g0,2490
113
+ include/py-d4-standard/PartitionerPatoh.hpp,sha256=VvrOUQiKe8bZL4ReRS5r1r3wQMIrGApEQTdos3mxZDI,1399
114
+ include/py-d4-standard/PhaseHeuristic.hpp,sha256=gztbRmeiCsPOGenRwBNRgDmEPUKey60ouiCPN9mTqcI,1373
115
+ include/py-d4-standard/PhaseHeuristicFalse.hpp,sha256=VX2_VB_TzbTUzfopPtSXQ2-nNdjYxjlTnmWNHuYSNik,1020
116
+ include/py-d4-standard/PhaseHeuristicOccurrence.hpp,sha256=JLkf3v5KEx3lliHZZFTx_-Lqw-ZXImYdqLX1B4ogLcA,1129
117
+ include/py-d4-standard/PhaseHeuristicPolarity.hpp,sha256=hOG0C_S4S6ujPrped7nuSFOrFJfOGem6bmeobzUqgHg,1131
118
+ include/py-d4-standard/PhaseHeuristicTrue.hpp,sha256=7ZWEERzjTzU4sxoEVycKcWPWTwo8k54_5LgF9iJG1qs,1018
119
+ include/py-d4-standard/PolarityManager.hpp,sha256=00bUg_nPrTqyjzF2Cpr0JVuciHIYdRxf1e455vRJecg,1025
120
+ include/py-d4-standard/ProblemManager.hpp,sha256=jdPGxsKI6bYm4XVmlaghtzJyk_P7IWgkqDXzFjaDDbc,10423
121
+ include/py-d4-standard/ProblemTypes.hpp,sha256=HClFvOxD_tUvuukoSl6H78GcdkCgwVEGtDOysY5FqOc,4210
122
+ include/py-d4-standard/ProjMCMethod.hpp,sha256=UdjT0YnLBPmR9_OOvqi3apkSZ_ze6R2LCr0Zl-oh25Y,25189
123
+ include/py-d4-standard/QbfCounter.hpp,sha256=hdaTsHv4OeGmbQmHgC1eFDAWKpyaSo1rHZKgCNSoRH8,17340
124
+ include/py-d4-standard/Queue.hpp,sha256=PE0weHDKiM7ECXn3f-3J9KmdQ925XbPYQ-2uotsnrik,2820
125
+ include/py-d4-standard/ScoringMethod.hpp,sha256=CnpJa5aNNnmpRlcMmfXuPmPPKqzHopjsVOvS7fdF1OU,1930
126
+ include/py-d4-standard/ScoringMethodDlcs.hpp,sha256=bco2fD3hvatA__3tX1Bs6ywjRlS_DKOy7cbguloNzHo,1110
127
+ include/py-d4-standard/ScoringMethodJwts.hpp,sha256=0zhLbqGquTiXgzJiJWpi-ZvAg5sU5_a1mm0JzAaTAeU,1103
128
+ include/py-d4-standard/ScoringMethodMom.hpp,sha256=l-9r-OrYLy7rZzpPm2gcLy58lKG68NLJQY8jXbyhXwI,1101
129
+ include/py-d4-standard/ScoringMethodVsads.hpp,sha256=7RF03VdvEgNfv8MA7MCzxZizaNKCgnT65gNMpMdPhh0,1271
130
+ include/py-d4-standard/ScoringMethodVsids.hpp,sha256=gfBE5ENhLkOowIcST9PIAreueZ2DW0O87ck1IKxtl6U,1114
131
+ include/py-d4-standard/SemiringConcept.hpp,sha256=qbT5fme3e88PsZgPEThbA7wjYR8Aw8ad3M0oARxe3kM,2109
132
+ include/py-d4-standard/Solver.hpp,sha256=qsq19XbNbCsC5MxM7g8srj0XxP1uV22rX4ZTBMYtqnU,33332
133
+ include/py-d4-standard/SolverTypes.hpp,sha256=WQ2aRJneZXExl6FBzEPGzd4xb5-C_u_528OWOSDyWyY,18271
134
+ include/py-d4-standard/Sort.hpp,sha256=rbFFyDEftORUAlxQcl8eDkRdAyWzeOddwspG4unxpjE,3256
135
+ include/py-d4-standard/TmpEntry.hpp,sha256=WakVF552gZ09cWpbNR5zHQhTIHS7ryxceqFrc4e2Fl4,1429
136
+ include/py-d4-standard/Translator.hpp,sha256=177kT_1t-je5kFmcamxN9POOFI4LqxeN0Tnl_IQpeSg,3933
137
+ include/py-d4-standard/TreeDecomposition.hpp,sha256=TYlSxQeYlTu9De4OI0RZVksIJsSPQCHvUBt2eiBjiFo,8439
138
+ include/py-d4-standard/TreeDecompositioner.hpp,sha256=wajefw0ovBWD0lbM9U0m9cJjBsIia6qr-pBTbdk46f4,2595
139
+ include/py-d4-standard/TreeDecompositionerFlowCutter.hpp,sha256=qL_Q-xpc2FchmEGj5QyOwduIONJ6Fy2f-Tnt-fNkTDM,2641
140
+ include/py-d4-standard/TreeDecompositionerHtd.hpp,sha256=5j-fSDFal8Ic2pZ0j9l-hqmj9TVRAH8xPIm3aaILAg8,2132
141
+ include/py-d4-standard/TreeDecompositionPartition.hpp,sha256=ITvFhbOn5dDBb1V0JbDNys4dUlDoJ_fpjh--xFids1A,2085
142
+ include/py-d4-standard/TreeDecompositionTreeWidth.hpp,sha256=Ue5FvTnB1axEifYxQwRvT2hZHl38ZZYKFisz7VO7cZU,2707
143
+ include/py-d4-standard/Vec.hpp,sha256=Va2bvRjJVXTi-Vtx8i-NF1zWIm5bJdr5ngfYQbVsh-0,6142
144
+ include/py-d4-standard/WrapperCircuitGlucose.hpp,sha256=Yff3MDladmLDavZN4byvlUvMO_-MWhoaw-CfxdKaWQA,1199
145
+ include/py-d4-standard/WrapperCircuitMinisat.hpp,sha256=XFMS_ykEwS54nN2R-5tT6eJqtzv3-yzVaVC_N_4rnWA,1100
146
+ include/py-d4-standard/WrapperGlucose.hpp,sha256=O2K4PiLbHeX94wuYzmxSVnsIkhBjkfeWKOU-WbqPu4E,2938
147
+ include/py-d4-standard/WrapperMinisat.hpp,sha256=tq2EwPGgcKwJQWYlrSP3wYBweRDt3SbdtaHoPu9447I,2834
148
+ include/py-d4-standard/WrapperSolver.hpp,sha256=VWdU7GgU0w1qy9l9qG1NsGW8NltE-Fo305c8trWlnj8,4096
149
+ include/py-d4-standard/XAlloc.hpp,sha256=TkB4MQ5-tXy_kndbHmFZe-B_xUzI1dRkXW2hqmYHTJg,1849
150
+ lib/d4.lib,sha256=BXkj9Mo-uLrvQy7716jXE0aHzDg-RRZQmfzeIn8FZ_o,22601752
151
+ lib/__init__.py,sha256=hK-jOgKLw2ObTQb_0m6EWVeBYHXq2w8j2h4Uc-eHXYA,328
152
+ py_d4/options.py,sha256=Xddsss_a2Y_2AjFeYCG_XCGhxLyhCqgG-GtS0X1LinE,876
153
+ py_d4/py.typed,sha256=V-lflWeK996Wlw7bjhCkJEcQU9mOk2QXj4MnZmQ7oMU,75
154
+ py_d4/_py_d4.cp313-win_amd64.pyd,sha256=ZMUo1xrnLbDQFmOS1d5AmdIHFMACQat4KG1tl9oU0zE,2472960
155
+ py_d4/_py_d4.pyi,sha256=TZJfa4wSxc5M8hafEgn8SrWhg6xw6r8NPNvA317BWWM,15649
156
+ py_d4/__init__.py,sha256=Wey9ca2JJSR4Pp9V6RKoKnZd6QHQ8v5C6VxCjWi6M8A,2022
157
+ share/__init__.py,sha256=hK-jOgKLw2ObTQb_0m6EWVeBYHXq2w8j2h4Uc-eHXYA,328
158
+ share/cmake/optree/optreeConfig.cmake,sha256=uRZTbyFByBz61hBlGtCt7M-bvQxibVqDjRHWuMEhauA,58
159
+ share/cmake/optree/optreeConfigVersion.cmake,sha256=wrWvwXUoWsHZLhxkVa5C6bH6n4gMev3yLcWv7f5jNBw,2827
160
+ share/cmake/optree/optreeTargets.cmake,sha256=U_QCD-4bKcT_5ANleMWpTkMHUJ9usj-q76kuX1L-ClI,4164
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: scikit-build-core 1.0.3
3
+ Root-Is-Purelib: false
4
+ Tag: cp313-cp313-win_amd64
5
+
include/__init__.py ADDED
@@ -0,0 +1,10 @@
1
+ """""" # start delvewheel patch
2
+ def _delvewheel_patch_1_13_0():
3
+ import os
4
+ if os.path.isdir(libs_dir := os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, 'd4solver.libs'))):
5
+ os.add_dll_directory(libs_dir)
6
+
7
+
8
+ _delvewheel_patch_1_13_0()
9
+ del _delvewheel_patch_1_13_0
10
+ # end delvewheel patch
@@ -0,0 +1,63 @@
1
+ #pragma once
2
+ #include <string>
3
+ #include <map>
4
+ #include <stdexcept>
5
+
6
+ namespace optree {
7
+
8
+ /**
9
+ * @brief Trait to provide metadata about enums.
10
+ * Specialize this template in your project to support custom enums.
11
+ */
12
+ template<typename EnumType, typename Dummy = void>
13
+ struct EnumMetadata {
14
+ static std::map<int, std::string> mapping() { return {}; }
15
+ static std::string name() { return "UnknownEnum"; }
16
+ };
17
+
18
+ /**
19
+ * @brief Helper to resolve an enum value from its string label.
20
+ */
21
+ template<typename EnumType>
22
+ inline EnumType resolve_enum(const std::string& label) {
23
+ auto m = EnumMetadata<EnumType>::mapping();
24
+ for (auto const& [val, str] : m) {
25
+ if (str == label) {
26
+ return static_cast<EnumType>(val);
27
+ }
28
+ }
29
+ // Fallback to integer conversion if it's a numeric string
30
+ try {
31
+ return static_cast<EnumType>(std::stoi(label));
32
+ } catch (...) {}
33
+ throw std::runtime_error("Unknown enum label: " + label + " for enum: " + EnumMetadata<EnumType>::name());
34
+ }
35
+
36
+ /**
37
+ * @brief Helper to convert an enum value to its string label.
38
+ */
39
+ template<typename EnumType>
40
+ inline std::string enum_to_string(const EnumType& val) {
41
+ auto m = EnumMetadata<EnumType>::mapping();
42
+ auto it = m.find(static_cast<int>(val));
43
+ if (it != m.end()) {
44
+ return it->second;
45
+ }
46
+ return std::to_string(static_cast<int>(val));
47
+ }
48
+
49
+ /**
50
+ * @brief Helper to generate a documentation string for an enum.
51
+ */
52
+ template<typename EnumType>
53
+ inline std::string get_enum_doc() {
54
+ auto m = EnumMetadata<EnumType>::mapping();
55
+ std::string doc = "";
56
+ for (auto const& [val, label] : m) {
57
+ if (!doc.empty()) doc += ", ";
58
+ doc += std::to_string(val) + "=" + label;
59
+ }
60
+ return doc;
61
+ }
62
+
63
+ } // namespace optree