master > master: code go, py - Anzeige von Metriken vereinheitlicht; start/stop unmittelbar um Ausführung des Algorithmus

This commit is contained in:
RD 2021-11-02 13:05:34 +01:00
parent e8e36113be
commit 6d97bcc6db
12 changed files with 100 additions and 50 deletions

View File

@ -68,9 +68,6 @@ func FancyBinarySearch(input_L []int, input_x int) (int, error) {
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L, input_x) err = preChecks(input_L, input_x)
@ -80,7 +77,10 @@ func FancyBinarySearch(input_L []int, input_x int) (int, error) {
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_index = BinarySearch(input_L, input_x) output_index = BinarySearch(input_L, input_x)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"index": output_index, "index": output_index,
} }

View File

@ -70,9 +70,6 @@ func FancyInterpolationSearch(input_L []int, input_x int, input_u int, input_v i
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L, input_x, input_u, input_v) err = preChecks(input_L, input_x, input_u, input_v)
@ -82,7 +79,10 @@ func FancyInterpolationSearch(input_L []int, input_x int, input_u int, input_v i
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_index = InterpolationSearch(input_L, input_x, input_u, input_v) output_index = InterpolationSearch(input_L, input_x, input_u, input_v)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"index": output_index, "index": output_index,
} }

View File

@ -65,9 +65,6 @@ func FancyFindIthSmallest(input_L []int, input_i int) (int, error) {
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L, input_i) err = preChecks(input_L, input_i)
@ -77,7 +74,10 @@ func FancyFindIthSmallest(input_L []int, input_i int) (int, error) {
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_value = FindIthSmallest(input_L, input_i) output_value = FindIthSmallest(input_L, input_i)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"value": output_value, "value": output_value,
} }
@ -125,9 +125,6 @@ func FancyFindIthSmallestDC(input_L []int, input_i int) (int, error) {
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L, input_i) err = preChecks(input_L, input_i)
@ -137,7 +134,10 @@ func FancyFindIthSmallestDC(input_L []int, input_i int) (int, error) {
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_value = FindIthSmallestDC(input_L, input_i) output_value = FindIthSmallestDC(input_L, input_i)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"value": output_value, "value": output_value,
} }

View File

@ -69,9 +69,6 @@ func FancyJumpSearchLinear(input_L []int, input_x int, input_m int) (int, error)
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L, input_x, input_m) err = preChecks(input_L, input_x, input_m)
@ -81,7 +78,10 @@ func FancyJumpSearchLinear(input_L []int, input_x int, input_m int) (int, error)
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_index = JumpSearchLinear(input_L, input_x, input_m) output_index = JumpSearchLinear(input_L, input_x, input_m)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"index": output_index, "index": output_index,
} }
@ -129,9 +129,6 @@ func FancyJumpSearchExponentiell(input_L []int, input_x int) (int, error) {
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L, input_x) err = preChecks(input_L, input_x)
@ -141,7 +138,10 @@ func FancyJumpSearchExponentiell(input_L []int, input_x int) (int, error) {
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_index = JumpSearchExponentiell(input_L, input_x) output_index = JumpSearchExponentiell(input_L, input_x)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"index": output_index, "index": output_index,
} }

View File

@ -63,9 +63,6 @@ func FancyFindPoison(input_L []int) (int, error) {
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L) err = preChecks(input_L)
@ -75,7 +72,10 @@ func FancyFindPoison(input_L []int) (int, error) {
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_index = FindPoison(input_L) output_index = FindPoison(input_L)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"index": output_index, "index": output_index,
} }
@ -122,9 +122,6 @@ func FancyFindPoisonFast(input_L []int) (int, error) {
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L) err = preChecks(input_L)
@ -134,7 +131,10 @@ func FancyFindPoisonFast(input_L []int) (int, error) {
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_index = FindPoisonFast(input_L) output_index = FindPoisonFast(input_L)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"index": output_index, "index": output_index,
} }

View File

@ -66,9 +66,6 @@ func FancySequentialSearch(input_L []int, input_x int) (int, error) {
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L, input_x) err = preChecks(input_L, input_x)
@ -78,7 +75,10 @@ func FancySequentialSearch(input_L []int, input_x int) (int, error) {
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_index = SequentialSearch(input_L, input_x) output_index = SequentialSearch(input_L, input_x)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"index": output_index, "index": output_index,
} }

View File

@ -57,9 +57,6 @@ func FancyMaxSubSum(input_L []int) (int, int, int, error) {
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L) err = preChecks(input_L)
@ -69,7 +66,10 @@ func FancyMaxSubSum(input_L []int) (int, int, int, error) {
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_maxSum, output_indexFrom, output_indexTo = MaxSubSum(input_L) output_maxSum, output_indexFrom, output_indexTo = MaxSubSum(input_L)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"maxSum": output_maxSum, "maxSum": output_maxSum,
"index_from": output_indexFrom, "index_from": output_indexFrom,
@ -120,9 +120,6 @@ func FancyMaxSubSumDC(input_L []int) (int, int, int, error) {
// Start Message // Start Message
setup.DisplayStartOfAlgorithm(name, inputs) setup.DisplayStartOfAlgorithm(name, inputs)
// Metriken initialisieren
metrics.RestartMetrics()
// Prechecks: // Prechecks:
if setup.AppConfigPerformChecks() { if setup.AppConfigPerformChecks() {
err = preChecks(input_L) err = preChecks(input_L)
@ -132,7 +129,10 @@ func FancyMaxSubSumDC(input_L []int) (int, int, int, error) {
} }
// Ausführung des Algorithmus: // Ausführung des Algorithmus:
metrics.ResetMetrics()
metrics.StartMetrics()
output_maxSum, output_indexFrom, output_indexTo = MaxSubSumDC(input_L) output_maxSum, output_indexFrom, output_indexTo = MaxSubSumDC(input_L)
metrics.StopMetrics()
outputs = map[string]interface{}{ outputs = map[string]interface{}{
"maxSum": output_maxSum, "maxSum": output_maxSum,
"index_from": output_indexFrom, "index_from": output_indexFrom,

View File

@ -5,8 +5,10 @@ package metrics
* ---------------------------------------------------------------- */ * ---------------------------------------------------------------- */
import ( import (
"fmt"
"time" "time"
"ads/internal/core/utils"
"ads/internal/types" "ads/internal/types"
) )
@ -22,10 +24,18 @@ var _tmr = types.NewTimer()
* METHODS * METHODS
* ---------------------------------------------------------------- */ * ---------------------------------------------------------------- */
func RestartMetrics() { func ResetMetrics() {
_tmr.Reset()
_ctr_time.Reset() _ctr_time.Reset()
_ctr_space.Reset() _ctr_space.Reset()
_tmr.Reset()
}
func StartMetrics() {
_tmr.Start()
}
func StopMetrics() {
_tmr.Stop()
} }
func AddTimeCost(options ...int) { func AddTimeCost(options ...int) {
@ -45,6 +55,22 @@ func GetSpaceCost() int {
} }
func GetTimeElapsed() time.Duration { func GetTimeElapsed() time.Duration {
_tmr.Stop()
return _tmr.ElapsedTime() return _tmr.ElapsedTime()
} }
func GetTimeElapsedLongFormat() string {
t := _tmr.ElapsedTime()
h := utils.Floor(t.Hours())
m := utils.Floor(t.Minutes()) - h*60
s := t.Seconds() - float64(m*60)
h_string := fmt.Sprintf("%v", h)
for len(h_string) < 2 {
h_string = "0" + h_string
}
m_string := fmt.Sprintf("%v", m)
for len(m_string) < 2 {
m_string = "0" + m_string
}
s_string := fmt.Sprintf("%f", s)
return fmt.Sprintf("%[1]s:%[2]s:%[3]s", h_string, m_string, s_string)
}

View File

@ -96,7 +96,8 @@ func DisplayEndOfAlgorithm(outputs map[string]interface{}) {
} }
func DisplayMetrics() { func DisplayMetrics() {
logging.LogPlain(fmt.Sprintf("Dauer der Ausführung: t = \033[1m%[1]v\033[0m", metrics.GetTimeElapsed())) // logging.LogPlain(fmt.Sprintf("Dauer der Ausführung: t = \033[1m%[1]v\033[0m", metrics.GetTimeElapsed()))
logging.LogPlain(fmt.Sprintf("Dauer der Ausführung: t = \033[1m%[1]v\033[0m", metrics.GetTimeElapsedLongFormat()))
logging.LogPlain(fmt.Sprintf("Kosten (Zeit): T(n) = \033[1m%[1]v\033[0m", metrics.GetTimeCost())) logging.LogPlain(fmt.Sprintf("Kosten (Zeit): T(n) = \033[1m%[1]v\033[0m", metrics.GetTimeCost()))
logging.LogPlain(fmt.Sprintf("Kosten (Platz): S(n) = \033[1m%[1]v\033[0m", metrics.GetSpaceCost())) logging.LogPlain(fmt.Sprintf("Kosten (Platz): S(n) = \033[1m%[1]v\033[0m", metrics.GetSpaceCost()))
return return

View File

@ -22,6 +22,7 @@ import (
type Timer struct { type Timer struct {
time_elapsed time.Duration time_elapsed time.Duration
time_current time.Time time_current time.Time
running bool
} }
/* ---------------------------------------------------------------- * /* ---------------------------------------------------------------- *
@ -48,14 +49,18 @@ func (self Timer) ElapsedTime() time.Duration {
func (self *Timer) Start() { func (self *Timer) Start() {
self.time_current = time.Now() self.time_current = time.Now()
self.running = true
} }
func (self *Timer) Stop() { func (self *Timer) Stop() {
t0 := self.time_current if self.running {
t1 := time.Now() t0 := self.time_current
delta := t1.Sub(t0) t1 := time.Now()
self.time_current = t1 delta := t1.Sub(t0)
self.time_elapsed += delta self.time_current = t1
self.time_elapsed += delta
}
self.running = false
} }
func (self *Timer) Reset() { func (self *Timer) Reset() {
@ -63,4 +68,5 @@ func (self *Timer) Reset() {
delta := t.Sub(t) // d. h. 0 delta := t.Sub(t) // d. h. 0
self.time_current = t self.time_current = t
self.time_elapsed = delta self.time_elapsed = delta
self.running = false
} }

View File

@ -66,17 +66,21 @@ def algorithmInfos(
if state: if state:
# Initialisierung # Initialisierung
DisplayStartOfAlgorithm(name, **inputs); DisplayStartOfAlgorithm(name, **inputs);
RestartMetrics();
# Prechecks # Prechecks
if checks and callable(preChecks): if checks and callable(preChecks):
preChecks(**inputs); preChecks(**inputs);
# Ausführung des Algorithmus: # Metriken initialisieren + starten
ResetMetrics();
StartMetrics();
# Ausführung des Algorithmus:
nonnestedRecursion.trigger(); nonnestedRecursion.trigger();
nonnestedAlgorithms.trigger(); nonnestedAlgorithms.trigger();
outputs = func(*[], **inputs); outputs = func(*[], **inputs);
nonnestedAlgorithms.state = state1; nonnestedAlgorithms.state = state1;
nonnestedRecursion.state = state2; nonnestedRecursion.state = state2;
if state: if state:
# Metriken anhalten
StopMetrics();
# benenne Outputs: # benenne Outputs:
outputs_ = outputs if isinstance(outputs, tuple) else tuple([outputs]); outputs_ = outputs if isinstance(outputs, tuple) else tuple([outputs]);
outputsNamed = { outputnames[k]: value for k, value in enumerate(outputs_) }; outputsNamed = { outputnames[k]: value for k, value in enumerate(outputs_) };

View File

@ -49,6 +49,7 @@ class Counter(object):
class Timer(object): class Timer(object):
_time_elapsed: timedelta; _time_elapsed: timedelta;
_time_current: datetime; _time_current: datetime;
_running: bool
def __init__(self): def __init__(self):
self.reset(); self.reset();
@ -62,14 +63,17 @@ class Timer(object):
def start(self): def start(self):
self._time_current = datetime.now(); self._time_current = datetime.now();
self._running = True
return self; return self;
def stop(self): def stop(self):
t0 = self._time_current; if self._running:
t1 = datetime.now(); t0 = self._time_current;
delta = t1 - t0; t1 = datetime.now();
self._time_current = t1; delta = t1 - t0;
self._time_elapsed += delta; self._time_current = t1;
self._time_elapsed += delta;
self._running = False
return self; return self;
def reset(self): def reset(self):
@ -77,6 +81,7 @@ class Timer(object):
delta = t - t; delta = t - t;
self._time_current = t; self._time_current = t;
self._time_elapsed = delta; self._time_elapsed = delta;
self._running = False
return self; return self;
## Initialisierung: ## Initialisierung:
@ -88,7 +93,7 @@ _tmr = Timer();
# METHODS # METHODS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def RestartMetrics(): def ResetMetrics():
global _ctr_time; global _ctr_time;
global _ctr_space; global _ctr_space;
global _tmr; global _tmr;
@ -98,6 +103,14 @@ def RestartMetrics():
_tmr.reset(); _tmr.reset();
return; return;
def StartMetrics():
_tmr.start()
return;
def StopMetrics():
_tmr.stop()
return;
def AddTimeCost(n: int = 1): def AddTimeCost(n: int = 1):
global _ctr_time; global _ctr_time;
_ctr_time.add(n); _ctr_time.add(n);