SENCE 2022 Examples¶
Open file with default program¶
import os
os.startfile('Output/SchPark01.csv') # At least on Windows
Dataclasses¶
In [1]:
from dataclasses import dataclass, astuple
@dataclass
class Point:
x: float = 0
y: float = 0
z: float = 0
def distance_square(self, other):
return (other.x - self.x)**2 +\
(other.y - self.y)**2 +\
(other.z - self.z)**2
def distance(self, other):
return self.distance_square(other)**0.5
In [2]:
some_point = Point(1, 2)
another_point = Point(4, 6)
In [3]:
some_point
Out[3]:
In [4]:
another_point
Out[4]:
In [5]:
some_point.x
Out[5]:
In [6]:
some_point == another_point
Out[6]:
In [7]:
some_point == Point(1, 2)
Out[7]:
In [8]:
some_point.distance(another_point)
Out[8]:
In [9]:
some_point.x = 3
In [10]:
some_point.distance(another_point)
Out[10]:
In [11]:
astuple(some_point)
Out[11]:
Tests¶
In [12]:
import unittest
from pathlib import Path
SCRIPT_DIR = Path('.')
OUTPUT_DIR = Path('Output')
class TestCSVSolutions(unittest.TestCase):
def test_output_folder(self):
self.assertTrue(OUTPUT_DIR.exists(), 'Please create "%s" folder' % OUTPUT_DIR)
def test_scripts_is_written(self):
py_script = '01_workshop_example.py'
self.assertTrue((SCRIPT_DIR / py_script).exists(), '"%s" should exist.' % py_script)
with open(py_script) as f:
content = f.readlines()
self.assertFalse(all(line.startswith('#') for line in content),
'"%s" should have more than just comments. Please write some code.' % py_script)
def test_csv_output_file(self):
csv_path = OUTPUT_DIR / 'SchPark01.csv'
self.assertTrue(csv_path.exists(), 'Please generate "%s" file' % csv_path)
with open(csv_path) as out:
content = out.readlines()
self.assertEqual(8760 * 4, len(content),
"CSV should have 15-minute values for a complete year")
self.assertTrue(
"2011/01/01;00:00;0.0;-0.6" in content[0], "First line of %s should be for 1st of January" % csv_path)
self.assertTrue(
"2011/12/31;23:45;0.0;8.1" in content[-1], "Last line of %s should be for 31st of December" % csv_path)
t_sum, g_sum = 0, 0
i = 0
for line in content:
cells = line.replace(' ', '').split(';')
if all(cells):
t_sum += float(cells[3])
g_sum += float(cells[2])
i += 1
t_average = t_sum / i
g_average = g_sum / i
self.assertAlmostEqual(0.97, i / 8760 / 4, msg="Most of lines should have values", places=2)
self.assertAlmostEqual(12.8, t_average, places=2)
self.assertAlmostEqual(137, g_average, places=0)
unittest.main(argv=[''], verbosity=2, exit=False);
Some links¶
- PyCharm. Excellent Python IDE : https://www.jetbrains.com/pycharm/download/