11"""Classes for the controllers of the tables in the GUI."""
22
3+ import logging
34import re
45from collections .abc import Sequence
56from pathlib import Path
2223 PandasTableModel ,
2324)
2425from ..settings_manager import settings_manager
25- from ..utils import ConditionInputDialog , get_selected , process_file
26+ from ..utils import (
27+ CaptureLogHandler ,
28+ ConditionInputDialog ,
29+ get_selected ,
30+ process_file ,
31+ )
2632from ..views .other_views import DoseTimeDialog
2733from ..views .table_view import (
2834 ColumnSuggestionDelegate ,
@@ -1278,19 +1284,27 @@ def check_petab_lint(
12781284 col_name : str = None ,
12791285 ):
12801286 """Check a number of rows of the model with petablint."""
1287+ # Validate full parameter table
12811288 if row_data is None :
12821289 row_data = self .model .get_df ()
1283- observable_df = self .mother_controller .model .observable .get_df ()
1284- measurement_df = self .mother_controller .model .measurement .get_df ()
1285- condition_df = self .mother_controller .model .condition .get_df ()
1286- sbml_model = self .mother_controller .model .sbml .get_current_sbml_model ()
1287- return petab .check_parameter_df (
1288- row_data ,
1289- observable_df = observable_df ,
1290- measurement_df = measurement_df ,
1291- condition_df = condition_df ,
1292- model = sbml_model ,
1293- )
1290+ observable_df = self .mother_controller .model .observable .get_df ()
1291+ measurement_df = self .mother_controller .model .measurement .get_df ()
1292+ condition_df = self .mother_controller .model .condition .get_df ()
1293+ sbml_model = (
1294+ self .mother_controller .model .sbml .get_current_sbml_model ()
1295+ )
1296+ return petab .check_parameter_df (
1297+ row_data ,
1298+ observable_df = observable_df ,
1299+ measurement_df = measurement_df ,
1300+ condition_df = condition_df ,
1301+ model = sbml_model ,
1302+ )
1303+
1304+ # Validate a single parameter row
1305+ # In this case, we don't pass any other dataframes/models to avoid
1306+ # false positives due to the incomplete parameter table.
1307+ return petab .check_parameter_df (row_data )
12941308
12951309
12961310class VisualizationController (TableController ):
@@ -1315,3 +1329,81 @@ def __init__(
13151329 undo_stack = undo_stack ,
13161330 mother_controller = mother_controller ,
13171331 )
1332+
1333+ @linter_wrapper (additional_error_check = True )
1334+ def check_petab_lint (
1335+ self ,
1336+ row_data : pd .DataFrame = None ,
1337+ row_name : str = None ,
1338+ col_name : str = None ,
1339+ ):
1340+ """Check a number of rows of the model with petablint."""
1341+ problem = self .mother_controller .get_current_problem ()
1342+ capture_handler = CaptureLogHandler ()
1343+ logger_vis = logging .getLogger ("petab.v1.visualize.lint" )
1344+ logger_vis .addHandler (capture_handler )
1345+ errors = petab .visualize .lint .validate_visualization_df (problem )
1346+ if not errors :
1347+ return not errors
1348+ captured_output = "<br> " .join (
1349+ capture_handler .get_formatted_messages ()
1350+ )
1351+ raise ValueError (captured_output )
1352+
1353+ def setup_completers (self ):
1354+ """Set completers for the visualization table."""
1355+ table_view = self .view .table_view
1356+ # plotTypeSimulation
1357+ index = self .model .return_column_index ("plotTypeSimulation" )
1358+ if index and index > - 1 :
1359+ self .completers ["plotTypeSimulation" ] = ComboBoxDelegate (
1360+ ["LinePlot" , "BarPlot" , "ScatterPlot" ]
1361+ )
1362+ table_view .setItemDelegateForColumn (
1363+ index , self .completers ["plotTypeSimulation" ]
1364+ )
1365+ # plotTypeData
1366+ index = self .model .return_column_index ("plotTypeData" )
1367+ if index and index > - 1 :
1368+ self .completers ["plotTypeData" ] = ComboBoxDelegate (
1369+ ["MeanAndSD" , "MeanAndSEM" , "replicate" , "provided" ]
1370+ )
1371+ table_view .setItemDelegateForColumn (
1372+ index , self .completers ["plotTypeData" ]
1373+ )
1374+ # datasetId
1375+ index = self .model .return_column_index ("datasetId" )
1376+ if index and index > - 1 :
1377+ self .completers ["datasetId" ] = ColumnSuggestionDelegate (
1378+ self .mother_controller .model .measurement , "datasetId"
1379+ )
1380+ table_view .setItemDelegateForColumn (
1381+ index , self .completers ["datasetId" ]
1382+ )
1383+ # yValues
1384+ index = self .model .return_column_index ("yValues" )
1385+ if index and index > - 1 :
1386+ self .completers ["yValues" ] = ColumnSuggestionDelegate (
1387+ self .mother_controller .model .observable , "observableId"
1388+ )
1389+ table_view .setItemDelegateForColumn (
1390+ index , self .completers ["yValues" ]
1391+ )
1392+ # xScale
1393+ index = self .model .return_column_index ("xScale" )
1394+ if index and index > - 1 :
1395+ self .completers ["xScale" ] = ComboBoxDelegate (
1396+ ["lin" , "log" , "log10" , "order" ]
1397+ )
1398+ table_view .setItemDelegateForColumn (
1399+ index , self .completers ["xScale" ]
1400+ )
1401+ # yScale
1402+ index = self .model .return_column_index ("yScale" )
1403+ if index and index > - 1 :
1404+ self .completers ["yScale" ] = ComboBoxDelegate (
1405+ ["lin" , "log" , "log10" , "order" ]
1406+ )
1407+ table_view .setItemDelegateForColumn (
1408+ index , self .completers ["yScale" ]
1409+ )
0 commit comments