D4CMPP2 0.4.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 (103) hide show
  1. D4CMPP2/_Data/AGENTS.md +24 -0
  2. D4CMPP2/_Data/Aqsoldb.csv +9291 -0
  3. D4CMPP2/_Data/BradleyMP.csv +3042 -0
  4. D4CMPP2/_Data/Lipophilicity.csv +1131 -0
  5. D4CMPP2/_Data/README.md +8 -0
  6. D4CMPP2/_Data/__init__.py +26 -0
  7. D4CMPP2/_Data/optical.csv +20237 -0
  8. D4CMPP2/_Data/test.csv +190 -0
  9. D4CMPP2/__init__.py +16 -0
  10. D4CMPP2/__main__.py +5 -0
  11. D4CMPP2/_main.py +500 -0
  12. D4CMPP2/cli.py +7 -0
  13. D4CMPP2/exceptions.py +53 -0
  14. D4CMPP2/grid_search.py +259 -0
  15. D4CMPP2/network_refer.yaml +160 -0
  16. D4CMPP2/networks/AFP_model.py +72 -0
  17. D4CMPP2/networks/AFPwithSolv_model.py +72 -0
  18. D4CMPP2/networks/DMPNN_model.py +90 -0
  19. D4CMPP2/networks/DMPNNwithSolv_model.py +89 -0
  20. D4CMPP2/networks/GAT_model.py +48 -0
  21. D4CMPP2/networks/GATwithSolv_model.py +63 -0
  22. D4CMPP2/networks/GCN_model.py +113 -0
  23. D4CMPP2/networks/GCNwithSolv_model.py +103 -0
  24. D4CMPP2/networks/GC_model.py +122 -0
  25. D4CMPP2/networks/ISATPM_model.py +14 -0
  26. D4CMPP2/networks/ISATPN_model.py +199 -0
  27. D4CMPP2/networks/ISAT_model.py +90 -0
  28. D4CMPP2/networks/MPNN_model.py +56 -0
  29. D4CMPP2/networks/MPNNwithSolv_model.py +72 -0
  30. D4CMPP2/networks/__init__.py +25 -0
  31. D4CMPP2/networks/base.py +250 -0
  32. D4CMPP2/networks/registry.py +187 -0
  33. D4CMPP2/networks/src/AFP.py +118 -0
  34. D4CMPP2/networks/src/BiDropout.py +29 -0
  35. D4CMPP2/networks/src/DMPNN.py +35 -0
  36. D4CMPP2/networks/src/GAT.py +69 -0
  37. D4CMPP2/networks/src/GC.py +85 -0
  38. D4CMPP2/networks/src/GCN.py +71 -0
  39. D4CMPP2/networks/src/ISAT.py +153 -0
  40. D4CMPP2/networks/src/Linear.py +49 -0
  41. D4CMPP2/networks/src/MPNN.py +56 -0
  42. D4CMPP2/networks/src/SolventLayer.py +62 -0
  43. D4CMPP2/networks/src/__init__.py +0 -0
  44. D4CMPP2/networks/src/distGCN.py +21 -0
  45. D4CMPP2/networks/src/pyg_hetero.py +24 -0
  46. D4CMPP2/optimize.py +472 -0
  47. D4CMPP2/src/Analyzer/ISAAnalyzer.py +458 -0
  48. D4CMPP2/src/Analyzer/ISAPNAnalyzer.py +366 -0
  49. D4CMPP2/src/Analyzer/ISAwSAnalyzer.py +117 -0
  50. D4CMPP2/src/Analyzer/MolAnalyzer.py +319 -0
  51. D4CMPP2/src/Analyzer/__init__.py +54 -0
  52. D4CMPP2/src/Analyzer/core.py +480 -0
  53. D4CMPP2/src/Analyzer/factory.py +166 -0
  54. D4CMPP2/src/Analyzer/interpretation.py +232 -0
  55. D4CMPP2/src/Analyzer/results.py +101 -0
  56. D4CMPP2/src/DataManager/Dataset/GraphDataset.py +314 -0
  57. D4CMPP2/src/DataManager/Dataset/ISAGraphDataset.py +384 -0
  58. D4CMPP2/src/DataManager/Dataset/__init__.py +0 -0
  59. D4CMPP2/src/DataManager/GraphGenerator/ISAGraphGenerator.py +223 -0
  60. D4CMPP2/src/DataManager/GraphGenerator/MolGraphGenerator.py +73 -0
  61. D4CMPP2/src/DataManager/GraphGenerator/__init__.py +14 -0
  62. D4CMPP2/src/DataManager/ISADataManager.py +67 -0
  63. D4CMPP2/src/DataManager/MolDataManager.py +735 -0
  64. D4CMPP2/src/DataManager/__init__.py +14 -0
  65. D4CMPP2/src/DataManager/contracts.py +179 -0
  66. D4CMPP2/src/NetworkManager/ISANetworkManager.py +12 -0
  67. D4CMPP2/src/NetworkManager/NetworkManager.py +520 -0
  68. D4CMPP2/src/NetworkManager/__init__.py +14 -0
  69. D4CMPP2/src/PostProcessor.py +160 -0
  70. D4CMPP2/src/TrainManager/ISATrainManager.py +26 -0
  71. D4CMPP2/src/TrainManager/TrainManager.py +254 -0
  72. D4CMPP2/src/TrainManager/__init__.py +14 -0
  73. D4CMPP2/src/TrainManager/callbacks.py +119 -0
  74. D4CMPP2/src/__init__.py +0 -0
  75. D4CMPP2/src/utils/PATH.py +246 -0
  76. D4CMPP2/src/utils/__init__.py +0 -0
  77. D4CMPP2/src/utils/argparser.py +56 -0
  78. D4CMPP2/src/utils/checkpointing.py +90 -0
  79. D4CMPP2/src/utils/config_resolution.py +123 -0
  80. D4CMPP2/src/utils/config_validation.py +370 -0
  81. D4CMPP2/src/utils/csv_validation.py +105 -0
  82. D4CMPP2/src/utils/data_quality.py +181 -0
  83. D4CMPP2/src/utils/featureizer.py +202 -0
  84. D4CMPP2/src/utils/functional_group.csv +169 -0
  85. D4CMPP2/src/utils/graph_cache.py +213 -0
  86. D4CMPP2/src/utils/leaderboard.py +212 -0
  87. D4CMPP2/src/utils/metrics.py +31 -0
  88. D4CMPP2/src/utils/module_loader.py +147 -0
  89. D4CMPP2/src/utils/output.py +80 -0
  90. D4CMPP2/src/utils/reproducibility.py +70 -0
  91. D4CMPP2/src/utils/run_manifest.py +175 -0
  92. D4CMPP2/src/utils/scaler.py +40 -0
  93. D4CMPP2/src/utils/sculptor.py +713 -0
  94. D4CMPP2/src/utils/splitting.py +250 -0
  95. D4CMPP2/src/utils/supportfile_saver.py +94 -0
  96. D4CMPP2/src/utils/tools.py +156 -0
  97. D4CMPP2/src/utils/transfer_learning.py +111 -0
  98. d4cmpp2-0.4.0.dist-info/METADATA +420 -0
  99. d4cmpp2-0.4.0.dist-info/RECORD +103 -0
  100. d4cmpp2-0.4.0.dist-info/WHEEL +5 -0
  101. d4cmpp2-0.4.0.dist-info/entry_points.txt +2 -0
  102. d4cmpp2-0.4.0.dist-info/licenses/LICENSE +21 -0
  103. d4cmpp2-0.4.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,420 @@
1
+ Metadata-Version: 2.4
2
+ Name: D4CMPP2
3
+ Version: 0.4.0
4
+ Summary: PyTorch Geometric molecular property prediction models
5
+ License-Expression: MIT
6
+ Requires-Python: <3.13,>=3.10
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: torch<3,>=2.2
10
+ Requires-Dist: torch-geometric<3,>=2.8
11
+ Requires-Dist: numpy>=1.24
12
+ Requires-Dist: pandas>=2.0
13
+ Requires-Dist: matplotlib>=3.7
14
+ Requires-Dist: tqdm>=4.65
15
+ Requires-Dist: prettytable>=3.9
16
+ Requires-Dist: rdkit>=2023.9
17
+ Requires-Dist: scikit-learn>=1.3
18
+ Requires-Dist: Pillow>=10
19
+ Requires-Dist: PyYAML>=6
20
+ Requires-Dist: MoleculeSculptor<2,>=1.0.1
21
+ Provides-Extra: notebook
22
+ Requires-Dist: jupyterlab>=4; extra == "notebook"
23
+ Requires-Dist: ipywidgets>=8; extra == "notebook"
24
+ Dynamic: license-file
25
+
26
+ # D4CMPP2
27
+
28
+ D4CMPP2 is a PyTorch Geometric package for molecular-property regression. It
29
+ supports ordinary molecular graphs, compound/solvent pairs, and interpretable
30
+ ISA models through one training and inference API.
31
+
32
+ ## Requirements and installation
33
+
34
+ Supported runtime:
35
+
36
+ - Python 3.10-3.12
37
+ - PyTorch `>=2.2,<3`
38
+ - PyTorch Geometric `>=2.8,<3`
39
+ - Linux and Windows
40
+ - CPU, or CUDA with a matching PyTorch build
41
+
42
+ Install the appropriate PyTorch build for the machine first, then install
43
+ D4CMPP2:
44
+
45
+ ```sh
46
+ python -m pip install D4CMPP2
47
+ ```
48
+
49
+ Notebook extras are optional:
50
+
51
+ ```sh
52
+ python -m pip install "D4CMPP2[notebook]"
53
+ ```
54
+
55
+ DGL is not installed or loaded. DGL graph caches cannot be renamed or reused
56
+ as PyG caches.
57
+
58
+ ## Supported models
59
+
60
+ | Family | Network IDs |
61
+ |---|---|
62
+ | General | `GCN`, `MPNN`, `DMPNN`, `AFP`, `GAT` |
63
+ | With solvent | `GCNwS`, `MPNNwS`, `DMPNNwS`, `AFPwS`, `GATwS` |
64
+ | ISA | `GC`, `ISAT`, `ISATPN` |
65
+
66
+ `AGC`, `MegNet`, `MegNetwS`, `ALIGNN`, and `ALIGNNwS` are not part of the
67
+ PyG-only release.
68
+
69
+ ## Input data
70
+
71
+ A general model needs a `compound` SMILES column and one or more numeric target
72
+ columns. A `wS` model additionally needs a `solvent` SMILES column:
73
+
74
+ ```csv
75
+ compound,solvent,Solubility
76
+ CCO,O,-0.31
77
+ CCN,CO,-0.18
78
+ ```
79
+
80
+ Useful optional columns and arguments:
81
+
82
+ - `set`: predefined `train`, `val`, and `test` labels.
83
+ - `numeric_input_columns`: additional finite numeric model inputs.
84
+ - `molecule_columns`: molecule columns in their model input order.
85
+ - `explicit_h_columns`: molecule columns that require explicit hydrogens.
86
+
87
+ Without a `set` column, the default split is a seeded 80/10/10 random split.
88
+ Invalid SMILES, missing columns, non-numeric inputs, all-NaN targets, and
89
+ misaligned arrays fail with the affected path, column, value, or row.
90
+
91
+ ## Quickstart
92
+
93
+ The package includes a small `test.csv`. Run a two-epoch CPU smoke training:
94
+
95
+ ```sh
96
+ d4cmpp2 --data test --target Abs --network GCN --device cpu --epoch 2
97
+ ```
98
+
99
+ Equivalent Python:
100
+
101
+ ```python
102
+ from D4CMPP2 import train
103
+
104
+ model_path = train(
105
+ data="test",
106
+ target=["Abs"],
107
+ network="GCN",
108
+ device="cpu",
109
+ max_epoch=2,
110
+ batch_size=4,
111
+ )
112
+ print(model_path)
113
+ ```
114
+
115
+ Runnable examples for training, solvent and ISA models, saved-model modes,
116
+ inference, uncertainty, optimization, callbacks, custom networks, and the CLI
117
+ are indexed in [`examples/README.md`](examples/README.md).
118
+
119
+ For GPU training, use `device="cuda:0"` or `--device cuda:0`. D4CMPP2 validates
120
+ the requested index and does not silently fall back to CPU.
121
+
122
+ ### Solvent and ISA
123
+
124
+ ```python
125
+ from D4CMPP2 import train
126
+
127
+ solvent_model = train(
128
+ data="solvent_data.csv",
129
+ target=["Solubility"],
130
+ network="GCNwS",
131
+ molecule_columns=["compound", "solvent"],
132
+ device="cpu",
133
+ )
134
+
135
+ isa_model = train(
136
+ data="Aqsoldb",
137
+ target=["Solubility"],
138
+ network="ISATPN",
139
+ sculptor_index=(6, 2, 0),
140
+ device="cpu",
141
+ )
142
+ ```
143
+
144
+ `sculptor_index=(split, combine, absorb)` controls ISA fragmentation. Existing
145
+ fragment rules and saved `functional_group.csv` files are part of the model
146
+ contract.
147
+
148
+ ## Training behavior
149
+
150
+ The most important defaults are:
151
+
152
+ | Key | Default |
153
+ |---|---|
154
+ | `batch_size` | `256` |
155
+ | `max_epoch` | `2000` |
156
+ | `optimizer` | `"Adam"` |
157
+ | `learning_rate` | `0.001` |
158
+ | `weight_decay` | `0.0005` |
159
+ | `device` | `"cuda:0"` |
160
+ | `scaler` | `"standard"` |
161
+ | `verbose` | `True` |
162
+
163
+ Configuration is resolved into an isolated working copy. Historical precedence
164
+ is retained for numerical compatibility:
165
+
166
+ | Mode | Lower to higher precedence |
167
+ |---|---|
168
+ | Scratch | defaults, API/CLI, registry |
169
+ | Full resume | saved config, explicit resume overrides |
170
+ | `LOAD_PATH` continue | saved config, current defaults/API |
171
+ | Transfer | source config, current defaults/API, registry |
172
+ | Optimization trial | resolved base, trial values |
173
+
174
+ Unknown keys remain available to legacy configs and custom implementations.
175
+ Resolved provenance is written to the run manifest without changing
176
+ `config.yaml`.
177
+
178
+ ### Splitting and reproducibility
179
+
180
+ `split_strategy` accepts:
181
+
182
+ - `"auto"`: use `set` when present, otherwise random 80/10/10.
183
+ - `"random"`: always use row-level random splitting.
184
+ - `"predefined"`: require the `set` column.
185
+ - `"scaffold"`: keep RDKit Murcko-scaffold groups within one split.
186
+
187
+ Normal runs write `split_report.json` and `split_assignments.csv`.
188
+
189
+ ```python
190
+ model_path = train(
191
+ data="Aqsoldb",
192
+ target=["Solubility"],
193
+ network="GCN",
194
+ random_seed=42,
195
+ split_random_seed=42,
196
+ deterministic_algorithms=True,
197
+ device="cpu",
198
+ )
199
+ ```
200
+
201
+ `random_seed` controls Python, NumPy, torch/CUDA, shuffle, DataLoader workers,
202
+ dropout, and partial-training selection. `split_random_seed` controls only the
203
+ data split. Deterministic algorithms may reduce GPU performance or reject an
204
+ unsupported operation.
205
+
206
+ ### Resume, continue, and transfer
207
+
208
+ The three saved-model modes are mutually exclusive:
209
+
210
+ - `RESUME_PATH` or `--resume`: exact full-state resume from
211
+ `checkpoints/latest.ckpt`.
212
+ - `LOAD_PATH` or `--load`: load `final.pth` but reset optimizer, schedulers,
213
+ epoch, and RNG.
214
+ - `TRANSFER_PATH` or `--transfer`: copy compatible same-name/same-shape
215
+ parameters into a new model.
216
+
217
+ Full checkpoints preserve optimizer, both schedulers, epoch, best metric,
218
+ early-stopping state, and RNG state. Transfer writes `transfer_report.json`
219
+ with loaded and skipped parameters plus the source weight hash.
220
+
221
+ ### Outputs and caches
222
+
223
+ Training returns the model directory, normally below `./_Models/`. Important
224
+ artifacts include:
225
+
226
+ - `config.yaml`, `network.py`, `final.pth`, `scaler.pkl`
227
+ - `network_identity.json`, `model_summary.txt`
228
+ - `checkpoints/latest.ckpt`, `checkpoints/best.ckpt`
229
+ - `runs/<run_id>/run_manifest.json`
230
+ - `result/prediction.csv`, metrics, curves, and plots
231
+ - data-quality and split reports
232
+
233
+ Graph caches are atomic, fingerprinted PyG schema-v2 files. Identity includes
234
+ ordered SMILES, feature dimensions, explicit-hydrogen settings, and ISA rules.
235
+ The cache policies are:
236
+
237
+ - `"v2"`: validate the current cache and fail clearly if it is incompatible.
238
+ - `"regenerate"`: rebuild an invalid v2 cache from the source CSV.
239
+ - `"legacy"`: explicitly load a compatible PyG v1 cache with a warning.
240
+
241
+ DGL caches are preserved but never loaded.
242
+
243
+ ## Prediction and analysis
244
+
245
+ ```python
246
+ from D4CMPP2 import Analyzer
247
+
248
+ analyzer = Analyzer(model_path, device="cpu", save_result=False)
249
+ print(analyzer.predict(["CCO", "CCN"]))
250
+ ```
251
+
252
+ `Analyzer` reads the saved config and selects the general, solvent, or ISA
253
+ implementation. It requires `config.yaml`, `network.py`, and `final.pth`;
254
+ non-identity scaling also requires `scaler.pkl`, and ISA requires the saved
255
+ `functional_group.csv`. Load pickle-based artifacts only from trusted model
256
+ folders.
257
+
258
+ Use row-preserving inference when duplicates or invalid inputs matter:
259
+
260
+ ```python
261
+ result = analyzer.predict_rows(
262
+ compound=["CCO", "CCO", "not-a-smiles"],
263
+ )
264
+ print(result.to_dataframe())
265
+ ```
266
+
267
+ Every row retains its original index, inputs, prediction, status, and error.
268
+ Solvent and numeric-input models require every saved input column with equal
269
+ length:
270
+
271
+ ```python
272
+ result = analyzer.predict_rows(
273
+ compound=["CCO", "CCN"],
274
+ solvent=["O", "CO"],
275
+ temperature=[298.0, 310.0],
276
+ )
277
+ ```
278
+
279
+ CSV inference preserves source rows and commits the output atomically:
280
+
281
+ ```python
282
+ output_path = analyzer.predict_csv(
283
+ "molecules.csv",
284
+ "molecules_prediction.csv",
285
+ uncertainty_samples=30,
286
+ uncertainty_seed=42,
287
+ )
288
+ ```
289
+
290
+ `predict_uncertainty()` uses MC dropout and `Analyzer.predict_ensemble()` uses
291
+ compatible independently trained models. Their standard deviations are model
292
+ dispersion estimates, not calibrated prediction intervals.
293
+
294
+ ISA analyzers also provide `analyze_rows()` and `plot_analysis()`. Fragment
295
+ indices are validated against atom alignment before scores or features are
296
+ returned.
297
+
298
+ ## Experiment comparison and optimization
299
+
300
+ ```python
301
+ from D4CMPP2 import compare_experiments
302
+
303
+ leaderboard = compare_experiments(
304
+ ["./_Models"],
305
+ output_path="leaderboard.csv",
306
+ metric="val_rmse",
307
+ )
308
+ ```
309
+
310
+ Ranking is calculated separately per target. Legacy, failed, and interrupted
311
+ runs remain visible without borrowing another run's metrics.
312
+
313
+ For new hyperparameter searches, use the model-aware API:
314
+
315
+ ```python
316
+ import D4CMPP2
317
+
318
+ result = D4CMPP2.optimize(
319
+ data="Aqsoldb.csv",
320
+ target=["Solubility"],
321
+ network="GCN",
322
+ HP=["hidden_dim", "dropout"],
323
+ optimize_strategy="bayesian",
324
+ n_trials=20,
325
+ device="cpu",
326
+ )
327
+ print(result.best_params, result.best_model_path)
328
+ ```
329
+
330
+ `HP=None` uses the model's default optimization space. A key list uses declared
331
+ model ranges; a dictionary supplies categorical values or numeric ranges.
332
+ Supported strategies are `"bayesian"` and `"grid"`. Atomic JSON/CSV summaries
333
+ and trial directories allow compatible searches to resume.
334
+
335
+ The legacy `grid_search()` API remains available with its historical `None`
336
+ return value and continue-on-trial-error behavior.
337
+
338
+ ## Callbacks and custom networks
339
+
340
+ Observation-only training callbacks are runtime objects and are not saved:
341
+
342
+ ```python
343
+ from D4CMPP2 import train
344
+ from D4CMPP2.src.TrainManager.callbacks import EventHistory
345
+
346
+ history = EventHistory()
347
+ model_path = train(
348
+ data="test",
349
+ target=["Abs"],
350
+ network="GCN",
351
+ device="cpu",
352
+ callbacks=[history],
353
+ )
354
+ ```
355
+
356
+ Callbacks receive immutable run/epoch/validation/checkpoint/error events. A
357
+ callback failure stops training and preserves the original failure contract.
358
+
359
+ Custom models subclass `D4CMPP2.MolecularNetwork`, declare `model_name`,
360
+ `input_contract`, hyperparameters, and optionally `compute_loss()`, then call:
361
+
362
+ ```python
363
+ D4CMPP2.register_network(CustomGCN, data_contract="molecule")
364
+ ```
365
+
366
+ Available data contracts are `"molecule"`, `"solvent"`, and `"isa"`. Define
367
+ the class at module scope in an importable file. Training copies that source to
368
+ the model directory as `network.py`; reload and transfer prefer the saved
369
+ snapshot. See `examples/custom_network.py` for a complete implementation.
370
+
371
+ ## CLI
372
+
373
+ ```sh
374
+ python -m D4CMPP2 --help
375
+ d4cmpp2 --help
376
+ ```
377
+
378
+ Target columns are comma-separated. `--quiet` hides routine information and
379
+ progress but not warnings or errors. `--cuda 0` remains a deprecated alias for
380
+ `--device cuda:0`.
381
+
382
+ ## Migration and compatibility
383
+
384
+ - Public `train`, `grid_search`, `Analyzer`, `Segmentator`, and `Data` names
385
+ remain available.
386
+ - New runs fit the target scaler on training rows by default. Old configs
387
+ without the policy retain historical full-data scaling with a warning.
388
+ - The loader prefers the saved model folder's `network.py`, config, weights,
389
+ scaler, and ISA rules over obsolete absolute paths.
390
+ - The historical `ISATPM` saved name is supported through the `ISATPN`
391
+ compatibility adapter.
392
+ - Keep DGL-era models and caches with their original environment for archival
393
+ reproduction. Automatic conversion is not provided.
394
+ - Package version and saved-model/config contract version are separate.
395
+
396
+ Public API or saved-asset compatibility breaks require a major release.
397
+ Deprecations should include a warning and a migration path.
398
+
399
+ ## Troubleshooting
400
+
401
+ - `torch_geometric` import failure: install torch and PyG builds compatible
402
+ with the same Python and CPU/CUDA runtime.
403
+ - CUDA unavailable or index out of range: select an existing `cuda:N` or use
404
+ `device="cpu"` explicitly.
405
+ - Missing target/SMILES column: compare the reported available columns with the
406
+ configured target and molecule columns.
407
+ - Invalid SMILES: fix or remove the reported rows; related arrays share one
408
+ alignment mask.
409
+ - Cache shape or recipe mismatch: use the source CSV with
410
+ `graph_cache_policy="regenerate"` after reviewing the diagnostic.
411
+ - Model path missing or ambiguous: pass the exact saved-model directory.
412
+ - Old model fails to load: preserve the complete folder and original
413
+ environment; report config, package versions, and the error without sharing
414
+ private data.
415
+
416
+ ## Repository maintenance
417
+
418
+ Implementation contracts, compatibility constraints, validation commands, and
419
+ change notes live in the nearest `AGENTS.md` file within each source area.
420
+ Read the workspace and nearest folder instructions before modifying code.
@@ -0,0 +1,103 @@
1
+ D4CMPP2/__init__.py,sha256=uOX-219mLwvUQ8Z4FbwF-sSjkcoDHfCguJ_VZwt7bM0,606
2
+ D4CMPP2/__main__.py,sha256=yVrsUQDu-hdhCRgEvrnvm_IMAOEIoiCg3tDVAjwDasQ,69
3
+ D4CMPP2/_main.py,sha256=st8SrgZKy1RP1Jmu3kRHbOZqPRI_6AhQsumyJ2-jQr4,21185
4
+ D4CMPP2/cli.py,sha256=6iIAjPgVdjeWg1zExmuhf8GOCOVbDdzN0LBjYr-ufMg,156
5
+ D4CMPP2/exceptions.py,sha256=lrI8Iw6nPidr5tOkK9IGABVjA2jQBA1Es9D0WkhtCC8,1481
6
+ D4CMPP2/grid_search.py,sha256=HN6mRfXAeP_qfDCPD9444Kpvofw5xFf3XiIeeZx76gQ,8839
7
+ D4CMPP2/network_refer.yaml,sha256=cSzO7UfEHQQoCyKEDMnmaUZpz9Q5ORqpvXhDXjdjS0g,4304
8
+ D4CMPP2/optimize.py,sha256=NL6b05kjvLgLb0cHcj466CNHUXGi1bkLeBXqunpPBhY,17373
9
+ D4CMPP2/_Data/AGENTS.md,sha256=CPU_GYnskwon58mUSSF1cVGbJwsXlH88WDkn_cHizm8,800
10
+ D4CMPP2/_Data/Aqsoldb.csv,sha256=MRxIxbFdvxXyXZqJQmH8IrvBain74HGWxwlUSfbz-zE,2740243
11
+ D4CMPP2/_Data/BradleyMP.csv,sha256=x_1Aoe2UOjFYVxDdHlLQLRf2bKxRpzeXllmNtsJnYP8,481520
12
+ D4CMPP2/_Data/Lipophilicity.csv,sha256=V3XcO9zfwYqW8Pr3-y5TGiLDt-mPxT7Nz2SCXIQXMKQ,74845
13
+ D4CMPP2/_Data/README.md,sha256=U-Y3t8nBqqkh1zhJAXJT_bMAzbxcq_bdgdUC7aAzFLU,483
14
+ D4CMPP2/_Data/__init__.py,sha256=O7qGrosmIu3kZ4E4LXuhxet6Lndn-sntkw4HaY0nD_A,688
15
+ D4CMPP2/_Data/optical.csv,sha256=kxlItovAkK_IwGf-KU7W1iNSxt8act39yiTt8yP7JyY,3406886
16
+ D4CMPP2/_Data/test.csv,sha256=awxmo_VnjVB99Qy0_ECtqCeD9d868Zsih9I1doj3RQ0,30193
17
+ D4CMPP2/networks/AFP_model.py,sha256=JsXDy4akLJOyHaBeLsFG0DYSwHS5kClKcL3Fh28K8OE,2411
18
+ D4CMPP2/networks/AFPwithSolv_model.py,sha256=GZ8B-ehvHgF0mWnYQY8l42EWHgcmrlD2hwnfQOdkpHU,2518
19
+ D4CMPP2/networks/DMPNN_model.py,sha256=FIyBTGZQA9LCJuFo2mEBXmzcYzNp_CDBLxBV4W3cJQg,3312
20
+ D4CMPP2/networks/DMPNNwithSolv_model.py,sha256=mgr7Q8ovyOzRsF7fWFrNd75bNnDmWNwKWHZPnT0h41A,3316
21
+ D4CMPP2/networks/GAT_model.py,sha256=amZUGNRDvxg8PZhapK83tpj8FTg_GF4dvYCAeLdFslo,1822
22
+ D4CMPP2/networks/GATwithSolv_model.py,sha256=hPNPCwUZ9A7RyRI0rlhQtHOYwfgyA_7_E3-9Q89vjNU,2246
23
+ D4CMPP2/networks/GCN_model.py,sha256=41156sKmyqQaZT4DzaM38KUbYOQ47wKYMxq4ydVV-2k,3161
24
+ D4CMPP2/networks/GCNwithSolv_model.py,sha256=zwBfTYrt4J9mdGK4RABHARv0PmhAFT-s59MdSyZcp2A,3979
25
+ D4CMPP2/networks/GC_model.py,sha256=7sdNtPfMbVzBPOXh5hWkGqIFQkKt3-68AiQDTOHmm2s,4279
26
+ D4CMPP2/networks/ISATPM_model.py,sha256=OcDcaNyyNzaKdGntvyU5Xp_X1lPtGOUzPCFwthm4lOM,340
27
+ D4CMPP2/networks/ISATPN_model.py,sha256=mT0uLKTEzhhJw1BG1se8euYW0Te-F4_0lWFNVIR_4iM,8004
28
+ D4CMPP2/networks/ISAT_model.py,sha256=hb01c3hyFzNAiPS2H8gRE7SLTSULSoOkpuq5EUiTflU,3248
29
+ D4CMPP2/networks/MPNN_model.py,sha256=iBtfC3KOkzB85qod7Ct15cPoiFWKvuXN_53qhKE3Gao,2181
30
+ D4CMPP2/networks/MPNNwithSolv_model.py,sha256=PG5a4dB98zc9RZRJW4GLRUVlfORhllkURLEL3EagFV4,3069
31
+ D4CMPP2/networks/__init__.py,sha256=XI8XTzggYmDFuumUhDmXQ971Zz9nAzgEQM1Tq0_3_Gg,495
32
+ D4CMPP2/networks/base.py,sha256=y0HIp_O-g0yDpIuAu10_AnSjic0Gcp4xx4sDpUrUiRI,9057
33
+ D4CMPP2/networks/registry.py,sha256=XpYcef2w5DyAeLbLfGpaWqRzFA6axaoVb34cWhIhSkg,6284
34
+ D4CMPP2/networks/src/AFP.py,sha256=yRHkQClNG0Izx4eG-M5DChO8w7NIggKznui4e9LENac,4935
35
+ D4CMPP2/networks/src/BiDropout.py,sha256=vzLAohct8XrKaF_dCurvG-YqMz4SLn-hqfYIodXxsSI,832
36
+ D4CMPP2/networks/src/DMPNN.py,sha256=tQeC6twMav5P7D5TZ_Otk6AQWnGOoLn1apWj7mqlXXU,1614
37
+ D4CMPP2/networks/src/GAT.py,sha256=1ulawPR9Tq8vW17qMHpMXpJtIVmQrugE8eYuXdwhFhU,2847
38
+ D4CMPP2/networks/src/GC.py,sha256=vb-FLFaBahwKqTZprK_B2QCOeK8B7om7rsP8MAApKBo,3784
39
+ D4CMPP2/networks/src/GCN.py,sha256=gltO9qHf5-FeYZ__f-43WvhPuURr5RwgS-UvkVTZT-I,2734
40
+ D4CMPP2/networks/src/ISAT.py,sha256=0coYgHYBIX7yd5i1rKuJ-JXfTNKE4Umnq86OrM506mI,6484
41
+ D4CMPP2/networks/src/Linear.py,sha256=G1MH2xB7UywpdzSaFKmEmPvJowFv_yF6uxt_0nq-51g,1721
42
+ D4CMPP2/networks/src/MPNN.py,sha256=TfOgaVOzEGd4MqDucIz45lzBag6ytUG9VVba2oMEzwc,2358
43
+ D4CMPP2/networks/src/SolventLayer.py,sha256=If5QPYgXQeASgohkYq8Zf0oNxlkzozCt7Vrlx-6Zlsg,1963
44
+ D4CMPP2/networks/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ D4CMPP2/networks/src/distGCN.py,sha256=8APwRvD05fmdUTXx-55GXxZ0_vAX6t9WfsJEGKHZGE0,864
46
+ D4CMPP2/networks/src/pyg_hetero.py,sha256=JD_dLZ6NFLTu4ageOM_-nln0DME-Wa_hzoBtvW4gLlU,948
47
+ D4CMPP2/src/PostProcessor.py,sha256=km37Ae9YAWmsLfEb7Wlnhm5Sg5KyGE7Rz5rXwWz7dzM,7056
48
+ D4CMPP2/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ D4CMPP2/src/Analyzer/ISAAnalyzer.py,sha256=eOHJdsD__tBUBgocjccIq0Ab2dfpE9eCW7KGpo4mFs8,15977
50
+ D4CMPP2/src/Analyzer/ISAPNAnalyzer.py,sha256=yA-kNvf5HNSonWmLEYOBaFHCzf3OCn8GF9FlBDGzshc,12587
51
+ D4CMPP2/src/Analyzer/ISAwSAnalyzer.py,sha256=plT04msRmunowo9nvCxXbRKJqE6UGzWbTgtygxEkXTs,5108
52
+ D4CMPP2/src/Analyzer/MolAnalyzer.py,sha256=pA_SExyYRwwnPjvpQHD6VFy_HTZy5JtdMGQbEvHrAw8,12659
53
+ D4CMPP2/src/Analyzer/__init__.py,sha256=MQBMzXk-HVtsuk9ADEnGzRDl71hF3HYQYUST0vYz2GI,1420
54
+ D4CMPP2/src/Analyzer/core.py,sha256=jcC5RGj8yAauT6Vf4h4d1_tYxsRMcRzjmEkS3rCs26g,20012
55
+ D4CMPP2/src/Analyzer/factory.py,sha256=mL6QbTINmTOUlRd2wDt3OIce9-ssMtWaHNPZozU2SpI,5512
56
+ D4CMPP2/src/Analyzer/interpretation.py,sha256=8I-dXRr7qYKfCBGyddVmwk2BHx8vx4LQWZ0m8n_MOVg,9254
57
+ D4CMPP2/src/Analyzer/results.py,sha256=009ouGC8GJ72Lh0TbyPRVvsonxj5wf_yxn2SziXXAoU,3285
58
+ D4CMPP2/src/DataManager/ISADataManager.py,sha256=zLNrgTnIDE-PQqf2dw86rpgSE0-L77rhH9BxIeXgU18,3014
59
+ D4CMPP2/src/DataManager/MolDataManager.py,sha256=YrFW8F46dqWYcsJ0KN0secrPuvNaHk8k1hu2rpdQ-uc,33468
60
+ D4CMPP2/src/DataManager/__init__.py,sha256=iD2emOHp1fTvZmRWD0BlVPRDOrXWr5ECirgeIj1qYNA,428
61
+ D4CMPP2/src/DataManager/contracts.py,sha256=Y1DGjuaFpdUA58nakckeBmpLqhKHVJ9kngRfBfmVnMA,5226
62
+ D4CMPP2/src/DataManager/Dataset/GraphDataset.py,sha256=yR8alJwlET7MUIko3kIBCS5MlXA0X3vtFapyg20WNSg,14658
63
+ D4CMPP2/src/DataManager/Dataset/ISAGraphDataset.py,sha256=lY8O-u5spa32khCXQ1AXEkmEDsPDkxEdEZdLGBJOe8w,18948
64
+ D4CMPP2/src/DataManager/Dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
+ D4CMPP2/src/DataManager/GraphGenerator/ISAGraphGenerator.py,sha256=EtiV2L6YG7zggqWREKXgyQyBN6wAB3D2Cz3M8goJrGA,8472
66
+ D4CMPP2/src/DataManager/GraphGenerator/MolGraphGenerator.py,sha256=I2a8nVvt1CJkP1G_H68pFV7F1myxrEP5InRYcHZYWHs,2508
67
+ D4CMPP2/src/DataManager/GraphGenerator/__init__.py,sha256=pTpbz-5616jXp194O0ikfjA8zoKdVH8oQ29MijuxohA,424
68
+ D4CMPP2/src/NetworkManager/ISANetworkManager.py,sha256=BGFKod_71Zy0WIx8RuHGrDodYejn2a4SE5cpr0oJCLQ,302
69
+ D4CMPP2/src/NetworkManager/NetworkManager.py,sha256=lCfoaeIYFDnjdd7UvtJNO73HXLK7j-OOWMCILH60vyg,22298
70
+ D4CMPP2/src/NetworkManager/__init__.py,sha256=06TMD04tJgiivJF3bEG7GDwNYldv5VMggR_IkpjMzwQ,421
71
+ D4CMPP2/src/TrainManager/ISATrainManager.py,sha256=G3pcJ9dF6NvL7TBU5LE3-vXm7OGdpfp_4FYxBVk9vR0,1027
72
+ D4CMPP2/src/TrainManager/TrainManager.py,sha256=jRC_iPBrmKN8liyRfJ5MBFsGJgUnv9efv5r8Yyc3bEg,9863
73
+ D4CMPP2/src/TrainManager/__init__.py,sha256=-oz9JSXUUzn0Kkww4ThHPk2C9CQcik3JeOsXo5J0MMk,431
74
+ D4CMPP2/src/TrainManager/callbacks.py,sha256=oNipF6_4QbMnQrtWg0pDMqAmjGN1J1o-HRH5mO7WeeA,4106
75
+ D4CMPP2/src/utils/PATH.py,sha256=U89Wr6xfYaA7BUWjjJ54-GogKMg0MJwjyDo3QnO5wQs,9622
76
+ D4CMPP2/src/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
+ D4CMPP2/src/utils/argparser.py,sha256=GiYHslznf2_p0QFUUCYKaHWZ__KvQ1mxKVYkobZi-kE,2979
78
+ D4CMPP2/src/utils/checkpointing.py,sha256=DpZWPpl_klFPa7RCo-neL4y_EdHfBQKQFfNX8zVmm0U,2896
79
+ D4CMPP2/src/utils/config_resolution.py,sha256=z0uE_kuLxIHWapmE1SvLfSjjgl3p7ZBie_l3YQImq14,3757
80
+ D4CMPP2/src/utils/config_validation.py,sha256=Rn9fBB2CeHlaBKlbnR9z3z4tCg5ju68qLa2iuHAu_oE,14965
81
+ D4CMPP2/src/utils/csv_validation.py,sha256=itRsdLQ1v9_nRpwR_TYLyRnRvNwrZMHKcwvPd1rG-Hw,4319
82
+ D4CMPP2/src/utils/data_quality.py,sha256=lsEh7UATcV0UANht0EUT_BOFCPqe7PerDXcS-drHTs4,7303
83
+ D4CMPP2/src/utils/featureizer.py,sha256=FV7KR6kJP8b2h90WoYK7Z8O4mt_JgB5hfPYP8OgOMUw,6741
84
+ D4CMPP2/src/utils/functional_group.csv,sha256=Mszui03Pr_B1tYVk1I9sT4AUmYWox-sUiQQpal41654,6164
85
+ D4CMPP2/src/utils/graph_cache.py,sha256=Dg4GAGlf6fbzQ7BVgaoYP7Q8zBZEiIGK17mjVM5hsbc,8933
86
+ D4CMPP2/src/utils/leaderboard.py,sha256=Z1GWW0Ba8_aL1e5-ar_XwYu2uq41sh2jqEfQRdx0g08,8627
87
+ D4CMPP2/src/utils/metrics.py,sha256=-s479886PJPC7jB0VckvOTp_NHlqcChjWy6Tf2y22IE,1211
88
+ D4CMPP2/src/utils/module_loader.py,sha256=OG8PeQePlbZKdS5WvnTWQ__IdpsaTIaxVM-rPw4uif4,5050
89
+ D4CMPP2/src/utils/output.py,sha256=rxbuDu5hWou26pj62IcgNf7wH68LiuFvKKcAuXdmOTc,2692
90
+ D4CMPP2/src/utils/reproducibility.py,sha256=EXROt806vrlQtmQY6d0h3itt0NBmqVgf54QGqjRGUqY,2656
91
+ D4CMPP2/src/utils/run_manifest.py,sha256=CYK-mJ75vlOmwFrfCLMm5npOqU9RzA6JC2T9B_cW8a8,6174
92
+ D4CMPP2/src/utils/scaler.py,sha256=BcClPRI-39ABXu4-qLgWdhYWjLMRAomPHisJtzcZPsw,1113
93
+ D4CMPP2/src/utils/sculptor.py,sha256=CDXEmCzCXbl2R79088jRZgtM--fkAFj6wh61xMKKuSk,32749
94
+ D4CMPP2/src/utils/splitting.py,sha256=0XIScbaurw1NIc-kMxsBP5giOTVOrdgy6mq6_5Uj7aE,8938
95
+ D4CMPP2/src/utils/supportfile_saver.py,sha256=uJm_e2PTWNCMsve6THobknQidvDT02gS1RzQZxqcjqg,3097
96
+ D4CMPP2/src/utils/tools.py,sha256=MR1NlSvYej3JxqcWTbf-7VRbeDA9hgZAeRmVGcdQeRs,5073
97
+ D4CMPP2/src/utils/transfer_learning.py,sha256=V-4ORJdQ43pobc2QC1YOSD4ELrdUgk4z4vuYxpnVRRg,3477
98
+ d4cmpp2-0.4.0.dist-info/licenses/LICENSE,sha256=Z6WDgksS9O-BODGk6Tr3yq8oM8dbjxlEQnJMhV01vPE,1114
99
+ d4cmpp2-0.4.0.dist-info/METADATA,sha256=OzcbfrUpCFzRLtyiNS7mN-U1pfga3Q5RSgOGu25I0O0,12853
100
+ d4cmpp2-0.4.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
101
+ d4cmpp2-0.4.0.dist-info/entry_points.txt,sha256=KFKzL-Y-0oj_BUxjDYSQSmUUqxumNX05Fynn9QB0H9g,45
102
+ d4cmpp2-0.4.0.dist-info/top_level.txt,sha256=7pk6UG-xnTO5atRWxoRIQ8Ftc5sCE88u0xEVlZ37PSc,8
103
+ d4cmpp2-0.4.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ d4cmpp2 = D4CMPP2.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Korea University Deep4Chem, Sungnam Park and Jinyong Park
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ D4CMPP2