Skip to content

Commit

Permalink
Merge pull request #484 from SPF-OST/truncate-printer-column-names
Browse files Browse the repository at this point in the history
Mfr visualizer: truncate `.prt`. column names to 25 characters.
  • Loading branch information
zuckerruebe authored Nov 2, 2023
2 parents 75c099a + 20d3d23 commit 7f1599b
Showing 1 changed file with 36 additions and 3 deletions.
39 changes: 36 additions & 3 deletions trnsysGUI/MassFlowVisualizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@
# type: ignore

import datetime as _dt
import itertools as _it

import PyQt5.QtCore as _qtc
import PyQt5.QtWidgets as _qtw
import itertools as _it
import numpy as _np
import pandas as _pd
import typing as _tp

import trnsysGUI.TVentil as _tv
import trnsysGUI.connection.connectionBase as _cb
Expand All @@ -17,6 +18,8 @@
import trnsysGUI.massFlowSolver.names as _mnames
import trnsysGUI.massFlowSolver.networkModel as _mfn

_MAX_HEADER_LENGTH = 25


class MassFlowVisualizer(_qtw.QDialog):
def __init__(self, parent, mfrFile, tempFile):
Expand Down Expand Up @@ -167,11 +170,13 @@ def showMassBtn(self):
def loadFile(self):
if not self.loadedFile:
self.massFlowData = _pd.read_csv(self.dataFilePath, sep="\t").rename(columns=lambda x: x.strip())
_truncateColumnNames(self.massFlowData)
self.loadedFile = True

def loadTempFile(self):
if not self.tempLoadedFile:
self.tempMassFlowData = _pd.read_csv(self.tempDatafilePath, sep="\t").rename(columns=lambda x: x.strip())
_truncateColumnNames(self.tempMassFlowData)
self.tempLoadedFile = True

def start(self):
Expand Down Expand Up @@ -256,11 +261,13 @@ def advance(self):
return

def _getMassFlow(self, mfrVariableName: str, timeStep: int) -> float:
mass = self.massFlowData[mfrVariableName[:25]].iloc[timeStep]
truncatedMfrVariableName = _truncateName(mfrVariableName)
mass = self.massFlowData[truncatedMfrVariableName].iloc[timeStep]
return mass

def _getTemperature(self, temperatureVariableName: str, timeStep: int) -> float:
return self.tempMassFlowData[temperatureVariableName[:25]].iloc[timeStep]
truncatedTemperatureVariableName = temperatureVariableName
return self.tempMassFlowData[truncatedTemperatureVariableName].iloc[timeStep]

def pauseVis(self):
self.paused = True
Expand Down Expand Up @@ -460,3 +467,29 @@ def keyPressEvent(self, e):
elif e.key() == _qtc.Qt.Key_Down:
self.logger.debug("Down is pressed")
self.decreaseValue()


def _truncateColumnNames(df: _pd.DataFrame) -> None:
_ensureNamesDontCollideAfterTruncating(df.columns)
df.columns = [_truncateName(n) for n in df.columns]


def _ensureNamesDontCollideAfterTruncating(columnNames: _tp.Sequence[str]) -> None:
sortedColumnNames = sorted(columnNames)
groupedNames = [list(g) for _, g in _it.groupby(sortedColumnNames, key=_truncateName)]
collidingNames = _flatten(g for g in groupedNames if len(g) > 1)
if collidingNames:
formattedCollidingNames = "\n\t".join(collidingNames)
errorMessage = (
f"The following column names collide after truncating them to "
f"{_MAX_HEADER_LENGTH} characters:\n\t{formattedCollidingNames}"
)
raise ValueError(errorMessage)


def _truncateName(name: str):
return name[:_MAX_HEADER_LENGTH]


def _flatten(iterable: _tp.Iterable[_tp.Iterable[str]]) -> _tp.Sequence[str]:
return list(_it.chain.from_iterable(iterable))

0 comments on commit 7f1599b

Please sign in to comment.