Skip to content

Commit 4874880

Browse files
committed
fix(p1): print → logging (final batch)
Complete the print → logging migration for the remaining files. Each file gets import logging + logger = logging.getLogger(__name__). - regularizations/regularizations.py: all verbose-gated prints → logger.debug; "Minimum weight reached" → logger.warning - train/train.py: StopTrainingCallback → logger.info; LRSchedulerLogger → logger.info; validation error → logger.warning; "Updating criterion weights" → logger.debug - utils/misc.py: "Maximum iterations reached" → logger.warning - lmis/lyap.py: __main__ debug prints → logger.debug P1 is now fully complete: ✓ torch.inverse → torch.linalg.inv (all files) ✓ assert → raise ValueError (all user-facing validations) ✓ print → logging (all files) https://claude.ai/code/session_017mH337zq1P8SP5zCakWnn8
1 parent f4ac60f commit 4874880

4 files changed

Lines changed: 29 additions & 17 deletions

File tree

‎ctrlnmod/lmis/lyap.py‎

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
from typing import Tuple
23
import numpy as np
34
import torch
@@ -7,6 +8,8 @@
78
# from ..linalg.utils import isSDP
89
from .base import LMI
910

11+
logger = logging.getLogger(__name__)
12+
1013

1114
class LyapunovDiscrete(LMI):
1215
"""
@@ -158,10 +161,10 @@ def solve(cls, A: Tensor, alpha: float, tol: float = 1e-9, solver: str = 'MOSEK'
158161

159162
# Discrete-time LMI
160163
P_discrete, LMI_discrete = LyapunovDiscrete.solve(A, alpha)
161-
print(f"Discrete-time P: {P_discrete}")
162-
print(f"Discrete-time LMI: {LMI_discrete}")
164+
logger.debug(f"Discrete-time P: {P_discrete}")
165+
logger.debug(f"Discrete-time LMI: {LMI_discrete}")
163166

164167
# Continuous-time LMI
165168
P_continuous, LMI_continuous = LyapunovContinuous.solve(A, alpha)
166-
print(f"Continuous-time P: {P_continuous}")
167-
print(f"Continuous-time LMI: {LMI_continuous}")
169+
logger.debug(f"Continuous-time P: {P_continuous}")
170+
logger.debug(f"Continuous-time LMI: {LMI_continuous}")

‎ctrlnmod/regularizations/regularizations.py‎

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
from abc import ABC, abstractmethod
23
import torch
34
from torch.linalg import slogdet
@@ -6,6 +7,8 @@
67
from typing import List, Callable
78
from ..lmis.base import LMI
89

10+
logger = logging.getLogger(__name__)
11+
912

1013
class Regularization(ABC, nn.Module):
1114
def __init__(self, model: nn.Module, factor: float, updatable: bool = True, verbose: bool = False):
@@ -40,7 +43,7 @@ def update(self) -> None:
4043
for param in self.model.parameters():
4144
param -= self.factor * param.sign()
4245
if self.verbose:
43-
print(f"Updated L1 regularization lambda: {self.lambda_l1.item()}")
46+
logger.debug(f"Updated L1 regularization lambda: {self.lambda_l1.item()}")
4447

4548

4649
class L2Regularization(Regularization):
@@ -58,7 +61,7 @@ def update(self) -> None:
5861
for param in self.model.parameters():
5962
param -= self.factor * param
6063
if self.verbose:
61-
print(f"Updated L2 regularization lambda: {self.lambda_l2.item()}")
64+
logger.debug(f"Updated L2 regularization lambda: {self.lambda_l2.item()}")
6265

6366

6467
class LogdetRegularization(Regularization):
@@ -81,9 +84,9 @@ def update(self) -> None:
8184
old_lambda = self.lambda_logdet.item()
8285
self.lambda_logdet *= self.factor
8386
if self.verbose:
84-
print(f"Updated Logdet regularization lambda: {old_lambda} -> {self.lambda_logdet.item()} \n")
87+
logger.debug(f"Updated Logdet regularization lambda: {old_lambda} -> {self.lambda_logdet.item()} \n")
8588
if self.lambda_logdet <= self.min_weight:
86-
print("Minimum weight reached")
89+
logger.warning("Minimum weight reached")
8790

8891
class DDRegularization(Regularization):
8992
def __init__(self, lmi: LMI, lambda_dd: float, update_factor: float, actf='lse', updatable = True, verbose = False, e= 0.1):
@@ -153,7 +156,7 @@ def update(self):
153156
if self.updatable:
154157
self.lambda_dd = self.factor * self.lambda_dd
155158
if self.verbose:
156-
print(f"Updated DD regularization lambda: {self.lambda_dd}")
159+
logger.debug(f"Updated DD regularization lambda: {self.lambda_dd}")
157160

158161
class StateRegularization(Regularization):
159162
def __init__(self, model: nn.Module, lambda_state: float, update_factor: float, updatable: bool = True, verbose: bool = False) -> None:
@@ -173,7 +176,7 @@ def update(self) -> None:
173176
old_lambda = self.lambda_state.item()
174177
self.lambda_state *= self.factor
175178
if self.verbose:
176-
print(f"Updated State regularization lambda: {old_lambda} -> {self.lambda_state.item()}")
179+
logger.debug(f"Updated State regularization lambda: {old_lambda} -> {self.lambda_state.item()}")
177180

178181

179182
def add_regularization(criterion: Callable[[Tensor, Tensor], Tensor], regularizers: List[Regularization]) -> Callable[[Tensor, Tensor], Tensor]:

‎ctrlnmod/train/train.py‎

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
import torch
23
from torch.optim.lr_scheduler import ReduceLROnPlateau
34
from typing import Optional
@@ -8,10 +9,12 @@
89
import os
910
from typing import Callable, Optional
1011

12+
logger = logging.getLogger(__name__)
13+
1114
'''
1215
def backtrack(self, *args, step_ratio=0.5, max_iter=100):
1316
with torch.no_grad():
14-
print(" Statrting backtracking")
17+
logger.debug(" Statrting backtracking")
1518
theta0 = flatten_params(self.sim_model)
1619
i = 0
1720
while i <= max_iter:
@@ -23,21 +26,21 @@ def backtrack(self, *args, step_ratio=0.5, max_iter=100):
2326
else:
2427
break
2528
if i > max_iter:
26-
print("Maximum iterations reached")
29+
logger.warning("Maximum iterations reached")
2730
return crit
2831
'''
2932

3033
class StopTrainingCallback(Callback):
3134
def on_validation_epoch_end(self, trainer: pl.Trainer, pl_module: pl.LightningModule) -> None:
3235
if pl_module.stop_training_flag:
33-
print("\n Stopping training because the boolean condition is set to True.")
36+
logger.info("\n Stopping training because the boolean condition is set to True.")
3437
trainer.should_stop = True
3538

3639
class LRSchedulerLogger(pl.Callback):
3740
def on_validation_epoch_end(self, trainer, pl_module):
3841
# Assuming the LR is scheduled per epoch
3942
lrs = [group['lr'] for group in trainer.optimizers[0].param_groups]
40-
print(f"\n Epoch {trainer.current_epoch}: Learning rate(s): {lrs}")
43+
logger.info(f"\n Epoch {trainer.current_epoch}: Learning rate(s): {lrs}")
4144

4245
class LitNode(pl.LightningModule):
4346
def __init__(
@@ -122,7 +125,7 @@ def validation_step(self, batch, batch_idx):
122125
for log_name, log_value in custom_logs.items():
123126
self.log(log_name, log_value)
124127
except Exception as e:
125-
print(f"Error in custom logging function: {e}")
128+
logger.warning(f"Error in custom logging function: {e}")
126129

127130
if 'is_solve_ok' in custom_logs and (not custom_logs['is_solve_ok']):
128131
self.stop_training_flag = True # Stop training if lmi is false
@@ -159,7 +162,7 @@ def on_validation_epoch_end(self):
159162

160163
if self.no_decrease_counter >= self.patience_soft:
161164
if self.criterion.regularizers and hasattr(self.criterion, 'update') and callable(self.criterion.update):
162-
print("Updating criterion weights")
165+
logger.debug("Updating criterion weights")
163166
self.criterion.update()
164167
self.no_decrease_counter = 0
165168

‎ctrlnmod/utils/misc.py‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
import logging
12
import torch
23
from functools import wraps
34
from contextlib import contextmanager
45
from typing import Optional, Tuple, Union
56
from torch import Tensor
67

8+
logger = logging.getLogger(__name__)
9+
710
def parse_act_f(act_f: Union[str, torch.nn.Module]) -> torch.nn.Module:
811
"""
912
Parse the activation function from a string or a torch module.
@@ -147,7 +150,7 @@ def backtrack(module, criterion, step_ratio=0.5, max_iter=100):
147150
write_flat_params(module, theta)
148151
i += 1
149152
if i > max_iter:
150-
print("Maximum iterations reached")
153+
logger.warning("Maximum iterations reached")
151154
criterion.updatable = False
152155
break
153156

0 commit comments

Comments
 (0)