Skip to content

Commit 95d863f

Browse files
committed
fix: fit() returns None instead of self
1 parent 417eb74 commit 95d863f

4 files changed

Lines changed: 67 additions & 72 deletions

File tree

customics/model.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ def fit(
333333
batch_size: int = 32,
334334
n_epochs: int = 30,
335335
verbose: bool = True,
336-
) -> CustOMICS:
336+
) -> None:
337337
"""Train the customics model.
338338
339339
Args:
@@ -343,9 +343,6 @@ def fit(
343343
n_epochs: Number of training epochs.
344344
verbose: Log epoch-level loss when True.
345345
346-
Returns:
347-
`self` (enables method chaining).
348-
349346
Raises:
350347
DataValidationError: If required columns are missing or samples don't overlap.
351348
"""
@@ -401,8 +398,6 @@ def fit(
401398

402399
self._is_fitted = True
403400

404-
return self
405-
406401
def _validate_fit_inputs(self, mdata: MuData) -> tuple[str, str, str]:
407402
if not all(key in mdata.uns for key in [Keys.LABEL, Keys.EVENT, Keys.SURV_TIME]):
408403
raise DataValidationError(

docs/tutorials/usage.ipynb

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@
580580
},
581581
{
582582
"cell_type": "code",
583-
"execution_count": 14,
583+
"execution_count": 9,
584584
"id": "0949c621",
585585
"metadata": {
586586
"execution": {
@@ -684,7 +684,7 @@
684684
},
685685
{
686686
"cell_type": "code",
687-
"execution_count": 12,
687+
"execution_count": 11,
688688
"id": "1bb92586",
689689
"metadata": {
690690
"execution": {
@@ -699,41 +699,41 @@
699699
"name": "stderr",
700700
"output_type": "stream",
701701
"text": [
702-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 1/30 | train=4.7799 | val=8.6872\n",
703-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 2/30 | train=10.6350 | val=7.4931\n",
704-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 3/30 | train=4.7096 | val=7.1487\n",
705-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 4/30 | train=4.9499 | val=6.1731\n",
706-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 5/30 | train=4.2462 | val=6.1301\n",
707-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 6/30 | train=6.4601 | val=5.6299\n",
708-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 7/30 | train=3.9749 | val=5.9005\n",
709-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 8/30 | train=4.1182 | val=5.6205\n",
710-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 9/30 | train=3.6023 | val=5.4832\n",
711-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 10/30 | train=4.1747 | val=5.1611\n",
712-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 11/30 | train=7.9619 | val=5.0469\n",
713-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 12/30 | train=3.5623 | val=5.1870\n",
714-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 13/30 | train=5.6151 | val=4.2962\n",
715-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 14/30 | train=3.7346 | val=4.4810\n",
716-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 15/30 | train=3.2990 | val=4.6577\n",
717-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 16/30 | train=4.2273 | val=2.5055\n",
718-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 17/30 | train=2.6364 | val=2.8835\n",
719-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 18/30 | train=3.0365 | val=2.9598\n",
720-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 19/30 | train=2.0678 | val=2.8435\n",
721-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 20/30 | train=2.2857 | val=2.6965\n",
722-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 21/30 | train=2.6691 | val=2.5129\n",
723-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 22/30 | train=2.4842 | val=2.1646\n",
724-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 23/30 | train=2.1832 | val=2.1052\n",
725-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 24/30 | train=3.0167 | val=1.9515\n",
726-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 25/30 | train=2.8060 | val=1.9794\n",
727-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 26/30 | train=1.9455 | val=2.0890\n",
728-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 27/30 | train=2.4743 | val=2.1498\n",
729-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 28/30 | train=1.7173 | val=2.2991\n",
730-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 29/30 | train=3.8066 | val=2.2126\n",
731-
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 30/30 | train=4.1165 | val=2.0399\n"
702+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 1/30 | train=30.3651 | val=31.6658\n",
703+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 2/30 | train=22.8299 | val=28.7735\n",
704+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 3/30 | train=21.4399 | val=23.9864\n",
705+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 4/30 | train=17.5760 | val=20.2520\n",
706+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 5/30 | train=17.0057 | val=17.4308\n",
707+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 6/30 | train=14.8009 | val=14.4931\n",
708+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 7/30 | train=12.3623 | val=13.4749\n",
709+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 8/30 | train=13.2549 | val=12.3910\n",
710+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 9/30 | train=10.6632 | val=12.0587\n",
711+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 10/30 | train=11.2786 | val=10.1326\n",
712+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 11/30 | train=9.9780 | val=9.5506\n",
713+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 12/30 | train=9.1207 | val=9.5418\n",
714+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 13/30 | train=8.1369 | val=10.1138\n",
715+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 14/30 | train=9.1553 | val=10.4119\n",
716+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 15/30 | train=8.2390 | val=9.4450\n",
717+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 16/30 | train=8.7560 | val=8.9667\n",
718+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 17/30 | train=5.0455 | val=7.1915\n",
719+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 18/30 | train=3.6820 | val=6.1265\n",
720+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 19/30 | train=3.7814 | val=5.3548\n",
721+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 20/30 | train=4.0373 | val=4.4529\n",
722+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 21/30 | train=3.7146 | val=3.9884\n",
723+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 22/30 | train=4.0055 | val=3.7771\n",
724+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 23/30 | train=3.0194 | val=3.9597\n",
725+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 24/30 | train=3.9632 | val=3.6811\n",
726+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 25/30 | train=3.7829 | val=3.7216\n",
727+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 26/30 | train=2.7493 | val=3.5652\n",
728+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 27/30 | train=4.4148 | val=3.5811\n",
729+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 28/30 | train=3.6309 | val=3.5699\n",
730+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 29/30 | train=4.0113 | val=3.3203\n",
731+
"\u001b[36;20m[INFO] (customics.model)\u001b[0m Epoch 30/30 | train=3.4999 | val=2.9919\n"
732732
]
733733
}
734734
],
735735
"source": [
736-
"model.fit(mdata=mdata_train, omics_val=mdata_val, n_epochs=30);"
736+
"model.fit(mdata=mdata_train, omics_val=mdata_val, n_epochs=30)"
737737
]
738738
},
739739
{

docs/tutorials/usage.md

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -430,39 +430,39 @@ Then, we [`fit`][customics.CustOMICS.fit] the model. Here, 30 epochs is enough f
430430

431431

432432
```python
433-
model.fit(mdata=mdata_train, omics_val=mdata_val, n_epochs=30);
433+
model.fit(mdata=mdata_train, omics_val=mdata_val, n_epochs=30)
434434
```
435435

436-
[36;20m[INFO] (customics.model)[0m Epoch 1/30 | train=4.7799 | val=8.6872
437-
[36;20m[INFO] (customics.model)[0m Epoch 2/30 | train=10.6350 | val=7.4931
438-
[36;20m[INFO] (customics.model)[0m Epoch 3/30 | train=4.7096 | val=7.1487
439-
[36;20m[INFO] (customics.model)[0m Epoch 4/30 | train=4.9499 | val=6.1731
440-
[36;20m[INFO] (customics.model)[0m Epoch 5/30 | train=4.2462 | val=6.1301
441-
[36;20m[INFO] (customics.model)[0m Epoch 6/30 | train=6.4601 | val=5.6299
442-
[36;20m[INFO] (customics.model)[0m Epoch 7/30 | train=3.9749 | val=5.9005
443-
[36;20m[INFO] (customics.model)[0m Epoch 8/30 | train=4.1182 | val=5.6205
444-
[36;20m[INFO] (customics.model)[0m Epoch 9/30 | train=3.6023 | val=5.4832
445-
[36;20m[INFO] (customics.model)[0m Epoch 10/30 | train=4.1747 | val=5.1611
446-
[36;20m[INFO] (customics.model)[0m Epoch 11/30 | train=7.9619 | val=5.0469
447-
[36;20m[INFO] (customics.model)[0m Epoch 12/30 | train=3.5623 | val=5.1870
448-
[36;20m[INFO] (customics.model)[0m Epoch 13/30 | train=5.6151 | val=4.2962
449-
[36;20m[INFO] (customics.model)[0m Epoch 14/30 | train=3.7346 | val=4.4810
450-
[36;20m[INFO] (customics.model)[0m Epoch 15/30 | train=3.2990 | val=4.6577
451-
[36;20m[INFO] (customics.model)[0m Epoch 16/30 | train=4.2273 | val=2.5055
452-
[36;20m[INFO] (customics.model)[0m Epoch 17/30 | train=2.6364 | val=2.8835
453-
[36;20m[INFO] (customics.model)[0m Epoch 18/30 | train=3.0365 | val=2.9598
454-
[36;20m[INFO] (customics.model)[0m Epoch 19/30 | train=2.0678 | val=2.8435
455-
[36;20m[INFO] (customics.model)[0m Epoch 20/30 | train=2.2857 | val=2.6965
456-
[36;20m[INFO] (customics.model)[0m Epoch 21/30 | train=2.6691 | val=2.5129
457-
[36;20m[INFO] (customics.model)[0m Epoch 22/30 | train=2.4842 | val=2.1646
458-
[36;20m[INFO] (customics.model)[0m Epoch 23/30 | train=2.1832 | val=2.1052
459-
[36;20m[INFO] (customics.model)[0m Epoch 24/30 | train=3.0167 | val=1.9515
460-
[36;20m[INFO] (customics.model)[0m Epoch 25/30 | train=2.8060 | val=1.9794
461-
[36;20m[INFO] (customics.model)[0m Epoch 26/30 | train=1.9455 | val=2.0890
462-
[36;20m[INFO] (customics.model)[0m Epoch 27/30 | train=2.4743 | val=2.1498
463-
[36;20m[INFO] (customics.model)[0m Epoch 28/30 | train=1.7173 | val=2.2991
464-
[36;20m[INFO] (customics.model)[0m Epoch 29/30 | train=3.8066 | val=2.2126
465-
[36;20m[INFO] (customics.model)[0m Epoch 30/30 | train=4.1165 | val=2.0399
436+
[36;20m[INFO] (customics.model)[0m Epoch 1/30 | train=30.3651 | val=31.6658
437+
[36;20m[INFO] (customics.model)[0m Epoch 2/30 | train=22.8299 | val=28.7735
438+
[36;20m[INFO] (customics.model)[0m Epoch 3/30 | train=21.4399 | val=23.9864
439+
[36;20m[INFO] (customics.model)[0m Epoch 4/30 | train=17.5760 | val=20.2520
440+
[36;20m[INFO] (customics.model)[0m Epoch 5/30 | train=17.0057 | val=17.4308
441+
[36;20m[INFO] (customics.model)[0m Epoch 6/30 | train=14.8009 | val=14.4931
442+
[36;20m[INFO] (customics.model)[0m Epoch 7/30 | train=12.3623 | val=13.4749
443+
[36;20m[INFO] (customics.model)[0m Epoch 8/30 | train=13.2549 | val=12.3910
444+
[36;20m[INFO] (customics.model)[0m Epoch 9/30 | train=10.6632 | val=12.0587
445+
[36;20m[INFO] (customics.model)[0m Epoch 10/30 | train=11.2786 | val=10.1326
446+
[36;20m[INFO] (customics.model)[0m Epoch 11/30 | train=9.9780 | val=9.5506
447+
[36;20m[INFO] (customics.model)[0m Epoch 12/30 | train=9.1207 | val=9.5418
448+
[36;20m[INFO] (customics.model)[0m Epoch 13/30 | train=8.1369 | val=10.1138
449+
[36;20m[INFO] (customics.model)[0m Epoch 14/30 | train=9.1553 | val=10.4119
450+
[36;20m[INFO] (customics.model)[0m Epoch 15/30 | train=8.2390 | val=9.4450
451+
[36;20m[INFO] (customics.model)[0m Epoch 16/30 | train=8.7560 | val=8.9667
452+
[36;20m[INFO] (customics.model)[0m Epoch 17/30 | train=5.0455 | val=7.1915
453+
[36;20m[INFO] (customics.model)[0m Epoch 18/30 | train=3.6820 | val=6.1265
454+
[36;20m[INFO] (customics.model)[0m Epoch 19/30 | train=3.7814 | val=5.3548
455+
[36;20m[INFO] (customics.model)[0m Epoch 20/30 | train=4.0373 | val=4.4529
456+
[36;20m[INFO] (customics.model)[0m Epoch 21/30 | train=3.7146 | val=3.9884
457+
[36;20m[INFO] (customics.model)[0m Epoch 22/30 | train=4.0055 | val=3.7771
458+
[36;20m[INFO] (customics.model)[0m Epoch 23/30 | train=3.0194 | val=3.9597
459+
[36;20m[INFO] (customics.model)[0m Epoch 24/30 | train=3.9632 | val=3.6811
460+
[36;20m[INFO] (customics.model)[0m Epoch 25/30 | train=3.7829 | val=3.7216
461+
[36;20m[INFO] (customics.model)[0m Epoch 26/30 | train=2.7493 | val=3.5652
462+
[36;20m[INFO] (customics.model)[0m Epoch 27/30 | train=4.4148 | val=3.5811
463+
[36;20m[INFO] (customics.model)[0m Epoch 28/30 | train=3.6309 | val=3.5699
464+
[36;20m[INFO] (customics.model)[0m Epoch 29/30 | train=4.0113 | val=3.3203
465+
[36;20m[INFO] (customics.model)[0m Epoch 30/30 | train=3.4999 | val=2.9919
466466

467467

468468
[`plot_loss`][customics.CustOMICS.plot_loss] plots the train/validation loss curves to check for overfitting.

tests/unit/test_model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def test_unfitted_predict_raises(
146146

147147

148148
class TestCustOMICSFit:
149-
def test_fit_returns_self(
149+
def test_fit_returns_none(
150150
self, source_params, central_params, classif_params, surv_params, train_params, device, mdata
151151
):
152152
model = CustOMICS(
@@ -163,7 +163,7 @@ def test_fit_returns_self(
163163
n_epochs=2,
164164
batch_size=8,
165165
)
166-
assert result is model
166+
assert result is None
167167

168168
def test_history_populated(
169169
self, source_params, central_params, classif_params, surv_params, train_params, device, mdata

0 commit comments

Comments
 (0)