"""Запись и обратное чтение результатов в CSV и JSON.

Столбцы: ток [А] и потокосцепление [Вб·виток]; L [Гн] входит в JSON.
Код создаёт новый подкаталог текущей рабочей папки. Для повторного запуска
измените folder: mkdir откажет, если каталог существует. Поле не рассчитывается.
Встроенный MicroPython FEMM 5 предоставляет используемые файловые модули.
"""

import os
import json
import csv

# 1. Создаём новый каталог, чтобы отделить этот набор результатов.
folder = 'micro-reference-files'
os.mkdir(folder)

# Три строки аналитической линейной катушки; единицы задаются заголовком.
rows = [[0.0, 0.0], [2.0, 0.24], [4.0, 0.48]]

# 2. Контекстный менеджер закрывает CSV после записи заголовка и данных.
with open(os.path.join(folder, 'coil.csv'), 'w', newline='') as stream:
    writer = csv.writer(stream)
    writer.writerow(['current_a', 'linkage_wb'])
    writer.writerows(rows)

# 3. Читаем CSV обратно: csv.reader возвращает текст, число переводим float.
with open(os.path.join(folder, 'coil.csv'), 'r', newline='') as stream:
    loaded = list(csv.reader(stream))
assert len(loaded) == 4
assert abs(float(loaded[3][1]) - 0.48) < 1e-12

# 4. JSON дополнительно хранит происхождение данных и параметр L.
record = {'model': 'analytical-linear-coil', 'inductance_h': 0.12, 'rows': rows}
with open(os.path.join(folder, 'coil.json'), 'w') as stream:
    json.dump(record, stream)

# 5. Сверяем восстановленные строки с исходными без нового расчёта.
with open(os.path.join(folder, 'coil.json'), 'r') as stream:
    restored = json.load(stream)
assert restored['rows'] == rows
print('Каталог результатов:', os.path.abspath(folder), sep=' ')
