Files
tpo-2/REPORT.MD
SlavaVlad 08fdceb875 Допилил stubs
Улучшил отчёт, добавил скрины
2026-04-24 12:59:27 +03:00

90 lines
79 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Отчёт по лабораторной работе №2 по Тестированию ПО
## 1. Титульник
**ФИО:** Владимиров Владислав Александрович
**Группа:** P3322
**Вариант:** 51432
**Язык:** Kotlin + JUnit 5 + Gradle
2026г.
## 2. Постановка задачи
Провести интеграционное тестирование программы, осуществляющей вычисление системы функций (в соответствии с вариантом).\
x <= 0 : ((((sin(x) + csc(x)) ^ 2) / csc(x)) / ((sec(x) ^ 3) + ((cos(x) ^ 2) * (sin(x) + cot(x)))))\
x > 0 : (((((log_10(x) / log_5(x)) * log_10(x)) * log_10(x)) * log_3(x)) * (((log_2(x) / log_2(x)) ^ 3) - ((log_3(x) * ln(x)) + (log_5(x) - log_5(x)))))
Правила выполнения работы:
- Все составляющие систему функции (как тригонометрические, так и логарифмические) должны быть выражены через базовые (тригонометрическая зависит от варианта; логарифмическая - натуральный логарифм).
- Структура приложения, тестируемого в рамках лабораторной работы, должна выглядеть следующим образом (пример приведён для базовой тригонометрической функции sin(x)):
- Обе "базовые" функции (в примере выше - sin(x) и ln(x)) должны быть реализованы при помощи разложения в ряд с задаваемой погрешностью. Использовать тригонометрические / логарифмические преобразования для упрощения функций ЗАПРЕЩЕНО.
- Для КАЖДОГО модуля должны быть реализованы табличные заглушки. При этом, необходимо найти область допустимых значений функций, и, при необходимости, определить взаимозависимые точки в модулях.
- Разработанное приложение должно позволять выводить значения, выдаваемое любым модулем системы, в сsv файл вида «X, Результаты модуля (X)», позволяющее произвольно менять шаг наращивания Х. Разделитель в файле csv можно использовать произвольный.
Порядок выполнения работы:
- Разработать приложение, руководствуясь приведёнными выше правилами.
- С помощью JUNIT5 разработать тестовое покрытие системы функций, проведя анализ эквивалентности и учитывая особенности системы функций. Для анализа особенностей системы функций и составляющих ее частей можно использовать сайт https://www.wolframalpha.com/.
- Собрать приложение, состоящее из заглушек. Провести интеграцию приложения по 1 модулю, с обоснованием стратегии интеграции, проведением интеграционных тестов и контролем тестового покрытия системы функций.
## 3. Анализ варианта
### 3.1. Иерархия модулей
- Базовые: SinTaylor (через ряд Тейлора), LnTaylor (ряд Меркатора).
- Тригонометрические (x ≤ 0): Cos (через sin(x+π/2)), Csc=1/sin, Sec=1/cos, Cot=cos/sin.
- Логарифмические (x > 0): Log(base, x) = ln(x)/ln(base).
- Композит: FunctionSystem.
- Stubs: для каждого модуля (SinStub, LnStub, CosStub и т.д.) — табличные заглушки через статическую мапу.
### 3.2. ОДЗ и особые точки
- **Sin, Cos**: определены для всех x (периодические).
- **Csc, Cot**: x ≠ kπ (исключение ArithmeticException).
- **Sec**: x ≠ π/2 + kπ (исключение).
- **Ln, Log**: x > 0, base > 0 и base ≠ 1 (IllegalArgumentException).
- Взаимозависимые точки: 0, ±π/2, ±π, 1, e, 10 (использованы в таблицах stubs).
## 4. UML-диаграмма классов (PlantUML)
<?plantuml 1.2026.2?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="CLASS" height="681px" preserveAspectRatio="none" style="width:2473px;height:681px;background:#FFFFFF;" version="1.1" viewBox="0 0 2473 681" width="2473px" zoomAndPan="magnify"><defs/><g><!--cluster function--><g class="cluster" data-qualified-name="function" data-source-line="2" id="ent0004"><path d="M1083.85,6.602 L1143.8038,6.602 A3.75,3.75 0 0 1 1146.3038,9.102 L1153.3038,31.6699 L2463.85,31.6699 A2.5,2.5 0 0 1 2466.35,34.1699 L2466.35,671.712 A2.5,2.5 0 0 1 2463.85,674.212 L1083.85,674.212 A2.5,2.5 0 0 1 1081.35,671.712 L1081.35,9.102 A2.5,2.5 0 0 1 1083.85,6.602" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="1081.35" x2="1153.3038" y1="31.6699" y2="31.6699"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="58.9538" x="1085.35" y="23.5679">function</text></g><!--cluster base--><g class="cluster" data-qualified-name="function.base" data-source-line="1" id="ent0002"><path d="M1107.85,421.142 L1141.4699,421.142 A3.75,3.75 0 0 1 1143.9699,423.642 L1150.9699,446.2099 L1777.85,446.2099 A2.5,2.5 0 0 1 1780.35,448.7099 L1780.35,647.712 A2.5,2.5 0 0 1 1777.85,650.212 L1107.85,650.212 A2.5,2.5 0 0 1 1105.35,647.712 L1105.35,423.642 A2.5,2.5 0 0 1 1107.85,421.142" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="1105.35" x2="1150.9699" y1="446.2099" y2="446.2099"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="32.6199" x="1109.35" y="438.1079">base</text></g><!--cluster trigonometric--><g class="cluster" data-qualified-name="function.trigonometric" data-source-line="12" id="ent0010"><path d="M1107.85,52.602 L1206.5696,52.602 A3.75,3.75 0 0 1 1209.0696,55.102 L1216.0696,77.6699 L1469.85,77.6699 A2.5,2.5 0 0 1 1472.35,80.1699 L1472.35,336.372 A2.5,2.5 0 0 1 1469.85,338.872 L1107.85,338.872 A2.5,2.5 0 0 1 1105.35,336.372 L1105.35,55.102 A2.5,2.5 0 0 1 1107.85,52.602" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="1105.35" x2="1216.0696" y1="77.6699" y2="77.6699"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="97.7196" x="1109.35" y="69.5679">trigonometric</text></g><!--cluster logarithmic--><g class="cluster" data-qualified-name="function.logarithmic" data-source-line="23" id="ent0027"><path d="M1498.85,52.602 L1580.6857,52.602 A3.75,3.75 0 0 1 1583.1857,55.102 L1590.1857,77.6699 L1589.85,77.6699 A2.5,2.5 0 0 1 1592.35,80.1699 L1592.35,336.372 A2.5,2.5 0 0 1 1589.85,338.872 L1498.85,338.872 A2.5,2.5 0 0 1 1496.35,336.372 L1496.35,55.102 A2.5,2.5 0 0 1 1498.85,52.602" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="1496.35" x2="1590.1857" y1="77.6699" y2="77.6699"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="80.8357" x="1500.35" y="69.5679">logarithmic</text></g><!--cluster stubs--><g class="cluster" data-qualified-name="function.stubs" data-source-line="28" id="ent0032"><path d="M1618.85,52.602 L1657.9298,52.602 A3.75,3.75 0 0 1 1660.4298,55.102 L1667.4298,77.6699 L2439.85,77.6699 A2.5,2.5 0 0 1 2442.35,80.1699 L2442.35,336.372 A2.5,2.5 0 0 1 2439.85,338.872 L1618.85,338.872 A2.5,2.5 0 0 1 1616.35,336.372 L1616.35,55.102 A2.5,2.5 0 0 1 1618.85,52.602" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="1616.35" x2="1667.4298" y1="77.6699" y2="77.6699"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="38.0798" x="1620.35" y="69.5679">stubs</text></g><!--cluster util--><g class="cluster" data-qualified-name="util" data-source-line="57" id="ent0069"><path d="M507.85,227.342 L532.3839,227.342 A3.75,3.75 0 0 1 534.8839,229.842 L541.8839,252.4099 L1054.85,252.4099 A2.5,2.5 0 0 1 1057.35,254.9099 L1057.35,345.902 A2.5,2.5 0 0 1 1054.85,348.402 L507.85,348.402 A2.5,2.5 0 0 1 505.35,345.902 L505.35,229.842 A2.5,2.5 0 0 1 507.85,227.342" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="505.35" x2="541.8839" y1="252.4099" y2="252.4099"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="23.5339" x="509.35" y="244.3079">util</text></g><!--class ISin--><g class="entity" data-qualified-name="function.base.ISin" data-source-line="2" id="ent0003"><rect fill="#F1F1F1" height="67.0679" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="307.6508" x="1121.52" y="459.142"/><ellipse cx="1259.4335" cy="475.142" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1255.4647,481.642 L1255.4647,479.9389 L1257.8241,479.6732 L1257.8241,471.4701 L1255.4647,471.2045 L1255.4647,469.5014 L1262.6053,469.5014 L1262.6053,471.2045 L1260.1835,471.4701 L1260.1835,479.6732 L1262.6053,479.9389 L1262.6053,481.642 L1255.4647,481.642 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="23.3239" x="1279.9335" y="480.574">ISin</text><line style="stroke:#181818;stroke-width:0.5;" x1="1122.52" x2="1428.1708" y1="491.142" y2="491.142"/><line style="stroke:#181818;stroke-width:0.5;" x1="1122.52" x2="1428.1708" y1="499.142" y2="499.142"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1132.52" cy="514.1759" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="281.6508" x="1141.52" y="518.1079">sin(x: Double, eps: Double = 1e-10): Double</text></g><!--class ILn--><g class="entity" data-qualified-name="function.base.ILn" data-source-line="5" id="ent0005"><rect fill="#F1F1F1" height="67.0679" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="300.9449" x="1463.88" y="459.142"/><ellipse cx="1600.4355" cy="475.142" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1596.4667,481.642 L1596.4667,479.9389 L1598.8261,479.6732 L1598.8261,471.4701 L1596.4667,471.2045 L1596.4667,469.5014 L1603.6073,469.5014 L1603.6073,471.2045 L1601.1855,471.4701 L1601.1855,479.6732 L1603.6073,479.9389 L1603.6073,481.642 L1596.4667,481.642 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="19.3339" x="1620.9355" y="480.574">ILn</text><line style="stroke:#181818;stroke-width:0.5;" x1="1464.88" x2="1763.8249" y1="491.142" y2="491.142"/><line style="stroke:#181818;stroke-width:0.5;" x1="1464.88" x2="1763.8249" y1="499.142" y2="499.142"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1474.88" cy="514.1759" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="274.9449" x="1483.88" y="518.1079">ln(x: Double, eps: Double = 1e-10): Double</text></g><!--class SinTaylor--><g class="entity" data-qualified-name="function.base.SinTaylor" data-source-line="8" id="ent0006"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="92.5918" x="1229.05" y="586.212"/><ellipse cx="1244.05" cy="602.212" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1243.5188,609.1339 Q1241.7688,609.1339 1240.6281,608.3995 Q1239.5031,607.6495 1238.9406,606.3057 Q1238.3938,604.9464 1238.3938,603.1495 Q1238.3938,601.1182 1239.05,599.6651 Q1239.7063,598.212 1240.9875,597.4307 Q1242.2688,596.6495 1244.1438,596.6495 Q1245.0344,596.6495 1245.7063,596.837 Q1246.3781,597.0089 1247.0656,597.3526 L1246.2531,599.3682 Q1245.6281,599.0557 1245.0813,598.9307 Q1244.55,598.8057 1244.0656,598.8057 Q1242.8938,598.8057 1242.1906,599.337 Q1241.4875,599.8682 1241.1906,600.8214 Q1240.8938,601.7745 1240.8938,603.0401 Q1240.8938,605.0557 1241.6125,606.0245 Q1242.3313,606.9776 1243.925,606.9776 Q1244.5188,606.9776 1245.1438,606.8214 Q1245.7688,606.6651 1246.5969,606.2901 L1246.5969,608.5089 Q1245.8625,608.8214 1245.0656,608.9776 Q1244.2844,609.1339 1243.5188,609.1339 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="60.5918" x="1258.05" y="607.644">SinTaylor</text><line style="stroke:#181818;stroke-width:0.5;" x1="1230.05" x2="1320.6418" y1="618.212" y2="618.212"/><line style="stroke:#181818;stroke-width:0.5;" x1="1230.05" x2="1320.6418" y1="626.212" y2="626.212"/></g><!--class LnTaylor--><g class="entity" data-qualified-name="function.base.LnTaylor" data-source-line="9" id="ent0008"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="88.6298" x="1570.03" y="586.212"/><ellipse cx="1585.03" cy="602.212" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1584.4988,609.1339 Q1582.7488,609.1339 1581.6081,608.3995 Q1580.4831,607.6495 1579.9206,606.3057 Q1579.3738,604.9464 1579.3738,603.1495 Q1579.3738,601.1182 1580.03,599.6651 Q1580.6863,598.212 1581.9675,597.4307 Q1583.2488,596.6495 1585.1238,596.6495 Q1586.0144,596.6495 1586.6863,596.837 Q1587.3581,597.0089 1588.0456,597.3526 L1587.2331,599.3682 Q1586.6081,599.0557 1586.0613,598.9307 Q1585.53,598.8057 1585.0456,598.8057 Q1583.8738,598.8057 1583.1706,599.337 Q1582.4675,599.8682 1582.1706,600.8214 Q1581.8738,601.7745 1581.8738,603.0401 Q1581.8738,605.0557 1582.5925,606.0245 Q1583.3113,606.9776 1584.905,606.9776 Q1585.4988,606.9776 1586.1238,606.8214 Q1586.7488,606.6651 1587.5769,606.2901 L1587.5769,608.5089 Q1586.8425,608.8214 1586.0456,608.9776 Q1585.2644,609.1339 1584.4988,609.1339 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="56.6298" x="1599.03" y="607.644">LnTaylor</text><line style="stroke:#181818;stroke-width:0.5;" x1="1571.03" x2="1657.6598" y1="618.212" y2="618.212"/><line style="stroke:#181818;stroke-width:0.5;" x1="1571.03" x2="1657.6598" y1="626.212" y2="626.212"/></g><!--class Cos--><g class="entity" data-qualified-name="function.trigonometric.Cos" data-source-line="13" id="ent0011"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="56.0239" x="1124.34" y="274.872"/><ellipse cx="1139.34" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1138.8088,297.7939 Q1137.0588,297.7939 1135.9181,297.0595 Q1134.7931,296.3095 1134.2306,294.9657 Q1133.6838,293.6064 1133.6838,291.8095 Q1133.6838,289.7782 1134.34,288.3251 Q1134.9963,286.872 1136.2775,286.0907 Q1137.5588,285.3095 1139.4338,285.3095 Q1140.3244,285.3095 1140.9963,285.497 Q1141.6681,285.6689 1142.3556,286.0126 L1141.5431,288.0282 Q1140.9181,287.7157 1140.3713,287.5907 Q1139.84,287.4657 1139.3556,287.4657 Q1138.1838,287.4657 1137.4806,287.997 Q1136.7775,288.5282 1136.4806,289.4814 Q1136.1838,290.4345 1136.1838,291.7001 Q1136.1838,293.7157 1136.9025,294.6845 Q1137.6213,295.6376 1139.215,295.6376 Q1139.8088,295.6376 1140.4338,295.4814 Q1141.0588,295.3251 1141.8869,294.9501 L1141.8869,297.1689 Q1141.1525,297.4814 1140.3556,297.6376 Q1139.5744,297.7939 1138.8088,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="24.0239" x="1153.34" y="296.304">Cos</text><line style="stroke:#181818;stroke-width:0.5;" x1="1125.34" x2="1179.3639" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="1125.34" x2="1179.3639" y1="314.872" y2="314.872"/></g><!--class ICos--><g class="entity" data-qualified-name="function.trigonometric.ICos" data-source-line="13" id="ent0012"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="58.6839" x="1121.01" y="90.602"/><ellipse cx="1136.01" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1132.0413,113.102 L1132.0413,111.3989 L1134.4006,111.1332 L1134.4006,102.9301 L1132.0413,102.6645 L1132.0413,100.9614 L1139.1819,100.9614 L1139.1819,102.6645 L1136.76,102.9301 L1136.76,111.1332 L1139.1819,111.3989 L1139.1819,113.102 L1132.0413,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="26.6839" x="1150.01" y="112.034">ICos</text><line style="stroke:#181818;stroke-width:0.5;" x1="1122.01" x2="1178.6939" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="1122.01" x2="1178.6939" y1="130.602" y2="130.602"/></g><!--class Csc--><g class="entity" data-qualified-name="function.trigonometric.Csc" data-source-line="14" id="ent0014"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="54.2739" x="1217.21" y="274.872"/><ellipse cx="1232.21" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1231.6788,297.7939 Q1229.9288,297.7939 1228.7881,297.0595 Q1227.6631,296.3095 1227.1006,294.9657 Q1226.5538,293.6064 1226.5538,291.8095 Q1226.5538,289.7782 1227.21,288.3251 Q1227.8663,286.872 1229.1475,286.0907 Q1230.4288,285.3095 1232.3038,285.3095 Q1233.1944,285.3095 1233.8663,285.497 Q1234.5381,285.6689 1235.2256,286.0126 L1234.4131,288.0282 Q1233.7881,287.7157 1233.2413,287.5907 Q1232.71,287.4657 1232.2256,287.4657 Q1231.0538,287.4657 1230.3506,287.997 Q1229.6475,288.5282 1229.3506,289.4814 Q1229.0538,290.4345 1229.0538,291.7001 Q1229.0538,293.7157 1229.7725,294.6845 Q1230.4913,295.6376 1232.085,295.6376 Q1232.6788,295.6376 1233.3038,295.4814 Q1233.9288,295.3251 1234.7569,294.9501 L1234.7569,297.1689 Q1234.0225,297.4814 1233.2256,297.6376 Q1232.4444,297.7939 1231.6788,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="22.2739" x="1246.21" y="296.304">Csc</text><line style="stroke:#181818;stroke-width:0.5;" x1="1218.21" x2="1270.4839" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="1218.21" x2="1270.4839" y1="314.872" y2="314.872"/></g><!--class ICsc--><g class="entity" data-qualified-name="function.trigonometric.ICsc" data-source-line="14" id="ent0015"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="57.1439" x="1214.78" y="90.602"/><ellipse cx="1229.78" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1225.8113,113.102 L1225.8113,111.3989 L1228.1706,111.1332 L1228.1706,102.9301 L1225.8113,102.6645 L1225.8113,100.9614 L1232.9519,100.9614 L1232.9519,102.6645 L1230.53,102.9301 L1230.53,111.1332 L1232.9519,111.3989 L1232.9519,113.102 L1225.8113,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="25.1439" x="1243.78" y="112.034">ICsc</text><line style="stroke:#181818;stroke-width:0.5;" x1="1215.78" x2="1270.9239" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="1215.78" x2="1270.9239" y1="130.602" y2="130.602"/></g><!--class Sec--><g class="entity" data-qualified-name="function.trigonometric.Sec" data-source-line="15" id="ent0017"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="54.3019" x="1307.2" y="274.872"/><ellipse cx="1322.2" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1321.6688,297.7939 Q1319.9188,297.7939 1318.7781,297.0595 Q1317.6531,296.3095 1317.0906,294.9657 Q1316.5438,293.6064 1316.5438,291.8095 Q1316.5438,289.7782 1317.2,288.3251 Q1317.8563,286.872 1319.1375,286.0907 Q1320.4188,285.3095 1322.2938,285.3095 Q1323.1844,285.3095 1323.8563,285.497 Q1324.5281,285.6689 1325.2156,286.0126 L1324.4031,288.0282 Q1323.7781,287.7157 1323.2313,287.5907 Q1322.7,287.4657 1322.2156,287.4657 Q1321.0438,287.4657 1320.3406,287.997 Q1319.6375,288.5282 1319.3406,289.4814 Q1319.0438,290.4345 1319.0438,291.7001 Q1319.0438,293.7157 1319.7625,294.6845 Q1320.4813,295.6376 1322.075,295.6376 Q1322.6688,295.6376 1323.2938,295.4814 Q1323.9188,295.3251 1324.7469,294.9501 L1324.7469,297.1689 Q1324.0125,297.4814 1323.2156,297.6376 Q1322.4344,297.7939 1321.6688,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="22.3019" x="1336.2" y="296.304">Sec</text><line style="stroke:#181818;stroke-width:0.5;" x1="1308.2" x2="1360.5019" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="1308.2" x2="1360.5019" y1="314.872" y2="314.872"/></g><!--class ISec--><g class="entity" data-qualified-name="function.trigonometric.ISec" data-source-line="15" id="ent0018"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="56.9339" x="1306.88" y="90.602"/><ellipse cx="1321.88" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1317.9113,113.102 L1317.9113,111.3989 L1320.2706,111.1332 L1320.2706,102.9301 L1317.9113,102.6645 L1317.9113,100.9614 L1325.0519,100.9614 L1325.0519,102.6645 L1322.63,102.9301 L1322.63,111.1332 L1325.0519,111.3989 L1325.0519,113.102 L1317.9113,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="24.9339" x="1335.88" y="112.034">ISec</text><line style="stroke:#181818;stroke-width:0.5;" x1="1307.88" x2="1362.8139" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="1307.88" x2="1362.8139" y1="130.602" y2="130.602"/></g><!--class Cot--><g class="entity" data-qualified-name="function.trigonometric.Cot" data-source-line="16" id="ent0020"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="54.3719" x="1398.16" y="274.872"/><ellipse cx="1413.16" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1412.6288,297.7939 Q1410.8788,297.7939 1409.7381,297.0595 Q1408.6131,296.3095 1408.0506,294.9657 Q1407.5038,293.6064 1407.5038,291.8095 Q1407.5038,289.7782 1408.16,288.3251 Q1408.8163,286.872 1410.0975,286.0907 Q1411.3788,285.3095 1413.2538,285.3095 Q1414.1444,285.3095 1414.8163,285.497 Q1415.4881,285.6689 1416.1756,286.0126 L1415.3631,288.0282 Q1414.7381,287.7157 1414.1913,287.5907 Q1413.66,287.4657 1413.1756,287.4657 Q1412.0038,287.4657 1411.3006,287.997 Q1410.5975,288.5282 1410.3006,289.4814 Q1410.0038,290.4345 1410.0038,291.7001 Q1410.0038,293.7157 1410.7225,294.6845 Q1411.4413,295.6376 1413.035,295.6376 Q1413.6288,295.6376 1414.2538,295.4814 Q1414.8788,295.3251 1415.7069,294.9501 L1415.7069,297.1689 Q1414.9725,297.4814 1414.1756,297.6376 Q1413.3944,297.7939 1412.6288,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="22.3719" x="1427.16" y="296.304">Cot</text><line style="stroke:#181818;stroke-width:0.5;" x1="1399.16" x2="1451.5319" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="1399.16" x2="1451.5319" y1="314.872" y2="314.872"/></g><!--class ICot--><g class="entity" data-qualified-name="function.trigonometric.ICot" data-source-line="16" id="ent0021"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="57.2839" x="1398.71" y="90.602"/><ellipse cx="1413.71" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1409.7413,113.102 L1409.7413,111.3989 L1412.1006,111.1332 L1412.1006,102.9301 L1409.7413,102.6645 L1409.7413,100.9614 L1416.8819,100.9614 L1416.8819,102.6645 L1414.46,102.9301 L1414.46,111.1332 L1416.8819,111.3989 L1416.8819,113.102 L1409.7413,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="25.2839" x="1427.71" y="112.034">ICot</text><line style="stroke:#181818;stroke-width:0.5;" x1="1399.71" x2="1454.9939" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="1399.71" x2="1454.9939" y1="130.602" y2="130.602"/></g><!--class Log--><g class="entity" data-qualified-name="function.logarithmic.Log" data-source-line="24" id="ent0028"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="56.4159" x="1519.14" y="274.872"/><ellipse cx="1534.14" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1533.6088,297.7939 Q1531.8588,297.7939 1530.7181,297.0595 Q1529.5931,296.3095 1529.0306,294.9657 Q1528.4838,293.6064 1528.4838,291.8095 Q1528.4838,289.7782 1529.14,288.3251 Q1529.7963,286.872 1531.0775,286.0907 Q1532.3588,285.3095 1534.2338,285.3095 Q1535.1244,285.3095 1535.7963,285.497 Q1536.4681,285.6689 1537.1556,286.0126 L1536.3431,288.0282 Q1535.7181,287.7157 1535.1713,287.5907 Q1534.64,287.4657 1534.1556,287.4657 Q1532.9838,287.4657 1532.2806,287.997 Q1531.5775,288.5282 1531.2806,289.4814 Q1530.9838,290.4345 1530.9838,291.7001 Q1530.9838,293.7157 1531.7025,294.6845 Q1532.4213,295.6376 1534.015,295.6376 Q1534.6088,295.6376 1535.2338,295.4814 Q1535.8588,295.3251 1536.6869,294.9501 L1536.6869,297.1689 Q1535.9525,297.4814 1535.1556,297.6376 Q1534.3744,297.7939 1533.6088,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="24.4159" x="1548.14" y="296.304">Log</text><line style="stroke:#181818;stroke-width:0.5;" x1="1520.14" x2="1574.5559" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="1520.14" x2="1574.5559" y1="314.872" y2="314.872"/></g><!--class ILog--><g class="entity" data-qualified-name="function.logarithmic.ILog" data-source-line="24" id="ent0029"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="59.2159" x="1516.74" y="90.602"/><ellipse cx="1531.74" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1527.7713,113.102 L1527.7713,111.3989 L1530.1306,111.1332 L1530.1306,102.9301 L1527.7713,102.6645 L1527.7713,100.9614 L1534.9119,100.9614 L1534.9119,102.6645 L1532.49,102.9301 L1532.49,111.1332 L1534.9119,111.3989 L1534.9119,113.102 L1527.7713,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="27.2159" x="1545.74" y="112.034">ILog</text><line style="stroke:#181818;stroke-width:0.5;" x1="1517.74" x2="1574.9559" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="1517.74" x2="1574.9559" y1="130.602" y2="130.602"/></g><!--class SinStub--><g class="entity" data-qualified-name="function.stubs.SinStub" data-source-line="29" id="ent0033"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="81.9518" x="1632.37" y="274.872"/><ellipse cx="1647.37" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1646.8388,297.7939 Q1645.0888,297.7939 1643.9481,297.0595 Q1642.8231,296.3095 1642.2606,294.9657 Q1641.7138,293.6064 1641.7138,291.8095 Q1641.7138,289.7782 1642.37,288.3251 Q1643.0263,286.872 1644.3075,286.0907 Q1645.5888,285.3095 1647.4638,285.3095 Q1648.3544,285.3095 1649.0263,285.497 Q1649.6981,285.6689 1650.3856,286.0126 L1649.5731,288.0282 Q1648.9481,287.7157 1648.4013,287.5907 Q1647.87,287.4657 1647.3856,287.4657 Q1646.2138,287.4657 1645.5106,287.997 Q1644.8075,288.5282 1644.5106,289.4814 Q1644.2138,290.4345 1644.2138,291.7001 Q1644.2138,293.7157 1644.9325,294.6845 Q1645.6513,295.6376 1647.245,295.6376 Q1647.8388,295.6376 1648.4638,295.4814 Q1649.0888,295.3251 1649.9169,294.9501 L1649.9169,297.1689 Q1649.1825,297.4814 1648.3856,297.6376 Q1647.6044,297.7939 1646.8388,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="49.9518" x="1661.37" y="296.304">SinStub</text><line style="stroke:#181818;stroke-width:0.5;" x1="1633.37" x2="1713.3218" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="1633.37" x2="1713.3218" y1="314.872" y2="314.872"/></g><!--class ISin--><g class="entity" data-qualified-name="function.stubs.ISin" data-source-line="29" id="ent0034"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="55.3239" x="1645.69" y="90.602"/><ellipse cx="1660.69" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1656.7213,113.102 L1656.7213,111.3989 L1659.0806,111.1332 L1659.0806,102.9301 L1656.7213,102.6645 L1656.7213,100.9614 L1663.8619,100.9614 L1663.8619,102.6645 L1661.44,102.9301 L1661.44,111.1332 L1663.8619,111.3989 L1663.8619,113.102 L1656.7213,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="23.3239" x="1674.69" y="112.034">ISin</text><line style="stroke:#181818;stroke-width:0.5;" x1="1646.69" x2="1700.0139" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="1646.69" x2="1700.0139" y1="130.602" y2="130.602"/></g><!--class LnStub--><g class="entity" data-qualified-name="function.stubs.LnStub" data-source-line="30" id="ent0036"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="77.9898" x="1749.35" y="274.872"/><ellipse cx="1764.35" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1763.8188,297.7939 Q1762.0688,297.7939 1760.9281,297.0595 Q1759.8031,296.3095 1759.2406,294.9657 Q1758.6938,293.6064 1758.6938,291.8095 Q1758.6938,289.7782 1759.35,288.3251 Q1760.0063,286.872 1761.2875,286.0907 Q1762.5688,285.3095 1764.4438,285.3095 Q1765.3344,285.3095 1766.0063,285.497 Q1766.6781,285.6689 1767.3656,286.0126 L1766.5531,288.0282 Q1765.9281,287.7157 1765.3813,287.5907 Q1764.85,287.4657 1764.3656,287.4657 Q1763.1938,287.4657 1762.4906,287.997 Q1761.7875,288.5282 1761.4906,289.4814 Q1761.1938,290.4345 1761.1938,291.7001 Q1761.1938,293.7157 1761.9125,294.6845 Q1762.6313,295.6376 1764.225,295.6376 Q1764.8188,295.6376 1765.4438,295.4814 Q1766.0688,295.3251 1766.8969,294.9501 L1766.8969,297.1689 Q1766.1625,297.4814 1765.3656,297.6376 Q1764.5844,297.7939 1763.8188,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="45.9898" x="1778.35" y="296.304">LnStub</text><line style="stroke:#181818;stroke-width:0.5;" x1="1750.35" x2="1826.3398" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="1750.35" x2="1826.3398" y1="314.872" y2="314.872"/></g><!--class ILn--><g class="entity" data-qualified-name="function.stubs.ILn" data-source-line="30" id="ent0037"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="51.3339" x="1762.68" y="90.602"/><ellipse cx="1777.68" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1773.7113,113.102 L1773.7113,111.3989 L1776.0706,111.1332 L1776.0706,102.9301 L1773.7113,102.6645 L1773.7113,100.9614 L1780.8519,100.9614 L1780.8519,102.6645 L1778.43,102.9301 L1778.43,111.1332 L1780.8519,111.3989 L1780.8519,113.102 L1773.7113,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="19.3339" x="1791.68" y="112.034">ILn</text><line style="stroke:#181818;stroke-width:0.5;" x1="1763.68" x2="1813.0139" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="1763.68" x2="1813.0139" y1="130.602" y2="130.602"/></g><!--class CosStub--><g class="entity" data-qualified-name="function.stubs.CosStub" data-source-line="31" id="ent0039"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="86.0258" x="1862.34" y="274.872"/><ellipse cx="1877.34" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1876.8088,297.7939 Q1875.0588,297.7939 1873.9181,297.0595 Q1872.7931,296.3095 1872.2306,294.9657 Q1871.6838,293.6064 1871.6838,291.8095 Q1871.6838,289.7782 1872.34,288.3251 Q1872.9963,286.872 1874.2775,286.0907 Q1875.5588,285.3095 1877.4338,285.3095 Q1878.3244,285.3095 1878.9963,285.497 Q1879.6681,285.6689 1880.3556,286.0126 L1879.5431,288.0282 Q1878.9181,287.7157 1878.3713,287.5907 Q1877.84,287.4657 1877.3556,287.4657 Q1876.1838,287.4657 1875.4806,287.997 Q1874.7775,288.5282 1874.4806,289.4814 Q1874.1838,290.4345 1874.1838,291.7001 Q1874.1838,293.7157 1874.9025,294.6845 Q1875.6213,295.6376 1877.215,295.6376 Q1877.8088,295.6376 1878.4338,295.4814 Q1879.0588,295.3251 1879.8869,294.9501 L1879.8869,297.1689 Q1879.1525,297.4814 1878.3556,297.6376 Q1877.5744,297.7939 1876.8088,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="54.0258" x="1891.34" y="296.304">CosStub</text><line style="stroke:#181818;stroke-width:0.5;" x1="1863.34" x2="1947.3658" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="1863.34" x2="1947.3658" y1="314.872" y2="314.872"/></g><!--class ICos--><g class="entity" data-qualified-name="function.stubs.ICos" data-source-line="31" id="ent0040"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="58.6839" x="1876.01" y="90.602"/><ellipse cx="1891.01" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1887.0413,113.102 L1887.0413,111.3989 L1889.4006,111.1332 L1889.4006,102.9301 L1887.0413,102.6645 L1887.0413,100.9614 L1894.1819,100.9614 L1894.1819,102.6645 L1891.76,102.9301 L1891.76,111.1332 L1894.1819,111.3989 L1894.1819,113.102 L1887.0413,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="26.6839" x="1905.01" y="112.034">ICos</text><line style="stroke:#181818;stroke-width:0.5;" x1="1877.01" x2="1933.6939" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="1877.01" x2="1933.6939" y1="130.602" y2="130.602"/></g><!--class CscStub--><g class="entity" data-qualified-name="function.stubs.CscStub" data-source-line="32" id="ent0042"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="84.2758" x="1983.21" y="274.872"/><ellipse cx="1998.21" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1997.6788,297.7939 Q1995.9288,297.7939 1994.7881,297.0595 Q1993.6631,296.3095 1993.1006,294.9657 Q1992.5538,293.6064 1992.5538,291.8095 Q1992.5538,289.7782 1993.21,288.3251 Q1993.8663,286.872 1995.1475,286.0907 Q1996.4288,285.3095 1998.3038,285.3095 Q1999.1944,285.3095 1999.8663,285.497 Q2000.5381,285.6689 2001.2256,286.0126 L2000.4131,288.0282 Q1999.7881,287.7157 1999.2413,287.5907 Q1998.71,287.4657 1998.2256,287.4657 Q1997.0538,287.4657 1996.3506,287.997 Q1995.6475,288.5282 1995.3506,289.4814 Q1995.0538,290.4345 1995.0538,291.7001 Q1995.0538,293.7157 1995.7725,294.6845 Q1996.4913,295.6376 1998.085,295.6376 Q1998.6788,295.6376 1999.3038,295.4814 Q1999.9288,295.3251 2000.7569,294.9501 L2000.7569,297.1689 Q2000.0225,297.4814 1999.2256,297.6376 Q1998.4444,297.7939 1997.6788,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="52.2758" x="2012.21" y="296.304">CscStub</text><line style="stroke:#181818;stroke-width:0.5;" x1="1984.21" x2="2066.4858" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="1984.21" x2="2066.4858" y1="314.872" y2="314.872"/></g><!--class ICsc--><g class="entity" data-qualified-name="function.stubs.ICsc" data-source-line="32" id="ent0043"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="57.1439" x="1996.78" y="90.602"/><ellipse cx="2011.78" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M2007.8113,113.102 L2007.8113,111.3989 L2010.1706,111.1332 L2010.1706,102.9301 L2007.8113,102.6645 L2007.8113,100.9614 L2014.9519,100.9614 L2014.9519,102.6645 L2012.53,102.9301 L2012.53,111.1332 L2014.9519,111.3989 L2014.9519,113.102 L2007.8113,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="25.1439" x="2025.78" y="112.034">ICsc</text><line style="stroke:#181818;stroke-width:0.5;" x1="1997.78" x2="2052.9239" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="1997.78" x2="2052.9239" y1="130.602" y2="130.602"/></g><!--class SecStub--><g class="entity" data-qualified-name="function.stubs.SecStub" data-source-line="33" id="ent0045"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="84.3038" x="2102.2" y="274.872"/><ellipse cx="2117.2" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M2116.6688,297.7939 Q2114.9188,297.7939 2113.7781,297.0595 Q2112.6531,296.3095 2112.0906,294.9657 Q2111.5438,293.6064 2111.5438,291.8095 Q2111.5438,289.7782 2112.2,288.3251 Q2112.8563,286.872 2114.1375,286.0907 Q2115.4188,285.3095 2117.2938,285.3095 Q2118.1844,285.3095 2118.8563,285.497 Q2119.5281,285.6689 2120.2156,286.0126 L2119.4031,288.0282 Q2118.7781,287.7157 2118.2313,287.5907 Q2117.7,287.4657 2117.2156,287.4657 Q2116.0438,287.4657 2115.3406,287.997 Q2114.6375,288.5282 2114.3406,289.4814 Q2114.0438,290.4345 2114.0438,291.7001 Q2114.0438,293.7157 2114.7625,294.6845 Q2115.4813,295.6376 2117.075,295.6376 Q2117.6688,295.6376 2118.2938,295.4814 Q2118.9188,295.3251 2119.7469,294.9501 L2119.7469,297.1689 Q2119.0125,297.4814 2118.2156,297.6376 Q2117.4344,297.7939 2116.6688,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="52.3038" x="2131.2" y="296.304">SecStub</text><line style="stroke:#181818;stroke-width:0.5;" x1="2103.2" x2="2185.5038" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="2103.2" x2="2185.5038" y1="314.872" y2="314.872"/></g><!--class ISec--><g class="entity" data-qualified-name="function.stubs.ISec" data-source-line="33" id="ent0046"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="56.9339" x="2115.88" y="90.602"/><ellipse cx="2130.88" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M2126.9113,113.102 L2126.9113,111.3989 L2129.2706,111.1332 L2129.2706,102.9301 L2126.9113,102.6645 L2126.9113,100.9614 L2134.0519,100.9614 L2134.0519,102.6645 L2131.63,102.9301 L2131.63,111.1332 L2134.0519,111.3989 L2134.0519,113.102 L2126.9113,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="24.9339" x="2144.88" y="112.034">ISec</text><line style="stroke:#181818;stroke-width:0.5;" x1="2116.88" x2="2171.8139" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="2116.88" x2="2171.8139" y1="130.602" y2="130.602"/></g><!--class CotStub--><g class="entity" data-qualified-name="function.stubs.CotStub" data-source-line="34" id="ent0048"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="84.3738" x="2221.16" y="274.872"/><ellipse cx="2236.16" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M2235.6288,297.7939 Q2233.8788,297.7939 2232.7381,297.0595 Q2231.6131,296.3095 2231.0506,294.9657 Q2230.5038,293.6064 2230.5038,291.8095 Q2230.5038,289.7782 2231.16,288.3251 Q2231.8163,286.872 2233.0975,286.0907 Q2234.3788,285.3095 2236.2538,285.3095 Q2237.1444,285.3095 2237.8163,285.497 Q2238.4881,285.6689 2239.1756,286.0126 L2238.3631,288.0282 Q2237.7381,287.7157 2237.1913,287.5907 Q2236.66,287.4657 2236.1756,287.4657 Q2235.0038,287.4657 2234.3006,287.997 Q2233.5975,288.5282 2233.3006,289.4814 Q2233.0038,290.4345 2233.0038,291.7001 Q2233.0038,293.7157 2233.7225,294.6845 Q2234.4413,295.6376 2236.035,295.6376 Q2236.6288,295.6376 2237.2538,295.4814 Q2237.8788,295.3251 2238.7069,294.9501 L2238.7069,297.1689 Q2237.9725,297.4814 2237.1756,297.6376 Q2236.3944,297.7939 2235.6288,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="52.3738" x="2250.16" y="296.304">CotStub</text><line style="stroke:#181818;stroke-width:0.5;" x1="2222.16" x2="2304.5338" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="2222.16" x2="2304.5338" y1="314.872" y2="314.872"/></g><!--class ICot--><g class="entity" data-qualified-name="function.stubs.ICot" data-source-line="34" id="ent0049"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="57.2839" x="2234.71" y="90.602"/><ellipse cx="2249.71" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M2245.7413,113.102 L2245.7413,111.3989 L2248.1006,111.1332 L2248.1006,102.9301 L2245.7413,102.6645 L2245.7413,100.9614 L2252.8819,100.9614 L2252.8819,102.6645 L2250.46,102.9301 L2250.46,111.1332 L2252.8819,111.3989 L2252.8819,113.102 L2245.7413,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="25.2839" x="2263.71" y="112.034">ICot</text><line style="stroke:#181818;stroke-width:0.5;" x1="2235.71" x2="2290.9939" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="2235.71" x2="2290.9939" y1="130.602" y2="130.602"/></g><!--class LogStub--><g class="entity" data-qualified-name="function.stubs.LogStub" data-source-line="35" id="ent0051"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="86.4178" x="2340.14" y="274.872"/><ellipse cx="2355.14" cy="290.872" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M2354.6088,297.7939 Q2352.8588,297.7939 2351.7181,297.0595 Q2350.5931,296.3095 2350.0306,294.9657 Q2349.4838,293.6064 2349.4838,291.8095 Q2349.4838,289.7782 2350.14,288.3251 Q2350.7963,286.872 2352.0775,286.0907 Q2353.3588,285.3095 2355.2338,285.3095 Q2356.1244,285.3095 2356.7963,285.497 Q2357.4681,285.6689 2358.1556,286.0126 L2357.3431,288.0282 Q2356.7181,287.7157 2356.1713,287.5907 Q2355.64,287.4657 2355.1556,287.4657 Q2353.9838,287.4657 2353.2806,287.997 Q2352.5775,288.5282 2352.2806,289.4814 Q2351.9838,290.4345 2351.9838,291.7001 Q2351.9838,293.7157 2352.7025,294.6845 Q2353.4213,295.6376 2355.015,295.6376 Q2355.6088,295.6376 2356.2338,295.4814 Q2356.8588,295.3251 2357.6869,294.9501 L2357.6869,297.1689 Q2356.9525,297.4814 2356.1556,297.6376 Q2355.3744,297.7939 2354.6088,297.7939 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="54.4178" x="2369.14" y="296.304">LogStub</text><line style="stroke:#181818;stroke-width:0.5;" x1="2341.14" x2="2425.5578" y1="306.872" y2="306.872"/><line style="stroke:#181818;stroke-width:0.5;" x1="2341.14" x2="2425.5578" y1="314.872" y2="314.872"/></g><!--class ILog--><g class="entity" data-qualified-name="function.stubs.ILog" data-source-line="35" id="ent0052"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="59.2159" x="2353.74" y="90.602"/><ellipse cx="2368.74" cy="106.602" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M2364.7713,113.102 L2364.7713,111.3989 L2367.1306,111.1332 L2367.1306,102.9301 L2364.7713,102.6645 L2364.7713,100.9614 L2371.9119,100.9614 L2371.9119,102.6645 L2369.49,102.9301 L2369.49,111.1332 L2371.9119,111.3989 L2371.9119,113.102 L2364.7713,113.102 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="27.2159" x="2382.74" y="112.034">ILog</text><line style="stroke:#181818;stroke-width:0.5;" x1="2354.74" x2="2411.9559" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="2354.74" x2="2411.9559" y1="130.602" y2="130.602"/></g><!--class CsvWriter--><g class="entity" data-qualified-name="util.CsvWriter" data-source-line="58" id="ent0070"><rect fill="#F1F1F1" height="67.0679" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="519.9321" x="521.38" y="265.342"/><ellipse cx="745.1902" cy="281.342" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M744.6589,288.2639 Q742.9089,288.2639 741.7683,287.5295 Q740.6433,286.7795 740.0808,285.4357 Q739.5339,284.0764 739.5339,282.2795 Q739.5339,280.2482 740.1902,278.7951 Q740.8464,277.342 742.1277,276.5607 Q743.4089,275.7795 745.2839,275.7795 Q746.1745,275.7795 746.8464,275.967 Q747.5183,276.1389 748.2058,276.4826 L747.3933,278.4982 Q746.7683,278.1857 746.2214,278.0607 Q745.6902,277.9357 745.2058,277.9357 Q744.0339,277.9357 743.3308,278.467 Q742.6277,278.9982 742.3308,279.9514 Q742.0339,280.9045 742.0339,282.1701 Q742.0339,284.1857 742.7527,285.1545 Q743.4714,286.1076 745.0652,286.1076 Q745.6589,286.1076 746.2839,285.9514 Q746.9089,285.7951 747.737,285.4201 L747.737,287.6389 Q747.0027,287.9514 746.2058,288.1076 Q745.4245,288.2639 744.6589,288.2639 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63.8118" x="765.6902" y="286.774">CsvWriter</text><line style="stroke:#181818;stroke-width:0.5;" x1="522.38" x2="1040.3121" y1="297.342" y2="297.342"/><line style="stroke:#181818;stroke-width:0.5;" x1="522.38" x2="1040.3121" y1="305.342" y2="305.342"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="532.38" cy="320.3759" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="493.9321" x="541.38" y="324.3079">writeToCsv(filename: String, data: List&lt;Pair&lt;Double,Double&gt;&gt;, label: String)</text></g><!--class FunctionSystem--><g class="entity" data-qualified-name="FunctionSystem" data-source-line="38" id="ent0054"><rect fill="#F1F1F1" height="200.5433" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="347.1728" x="138.76" y="198.602"/><ellipse cx="255.7716" cy="214.602" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M255.2403,221.5239 Q253.4903,221.5239 252.3497,220.7895 Q251.2247,220.0395 250.6622,218.6957 Q250.1153,217.3364 250.1153,215.5395 Q250.1153,213.5082 250.7716,212.0551 Q251.4278,210.602 252.7091,209.8207 Q253.9903,209.0395 255.8653,209.0395 Q256.756,209.0395 257.4278,209.227 Q258.0997,209.3989 258.7872,209.7426 L257.9747,211.7582 Q257.3497,211.4457 256.8028,211.3207 Q256.2716,211.1957 255.7872,211.1957 Q254.6153,211.1957 253.9122,211.727 Q253.2091,212.2582 252.9122,213.2114 Q252.6153,214.1645 252.6153,215.4301 Q252.6153,217.4457 253.3341,218.4145 Q254.0528,219.3676 255.6466,219.3676 Q256.2403,219.3676 256.8653,219.2114 Q257.4903,219.0551 258.3185,218.6801 L258.3185,220.8989 Q257.5841,221.2114 256.7872,221.3676 Q256.006,221.5239 255.2403,221.5239 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="104.6496" x="276.2716" y="220.034">FunctionSystem</text><line style="stroke:#181818;stroke-width:0.5;" x1="139.76" x2="484.9328" y1="230.602" y2="230.602"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="146.76" y="242.6359"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81.1157" x="158.76" y="249.5679">sinImpl: ISin</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="146.76" y="261.7039"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="70.4477" x="158.76" y="268.6358">lnImpl: ILn</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="146.76" y="280.7718"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="88.1157" x="158.76" y="287.7038">cosImpl: ICos</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="146.76" y="299.8397"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="84.6157" x="158.76" y="306.7717">cscImpl: ICsc</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="146.76" y="318.9076"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="85.8197" x="158.76" y="325.8396">secImpl: ISec</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="146.76" y="337.9755"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="84.8117" x="158.76" y="344.9075">cotImpl: ICot</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="146.76" y="357.0434"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="87.3037" x="158.76" y="363.9754">logImpl: ILog</text><line style="stroke:#181818;stroke-width:0.5;" x1="139.76" x2="484.9328" y1="372.0774" y2="372.0774"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="149.76" cy="387.1114" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="321.1728" x="158.76" y="391.0433">compute(x: Double, eps: Double = 1e-10): Double</text></g><!--class ISin--><g class="entity" data-qualified-name="ISin" data-source-line="49" id="ent0055"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="56.6959" x="7" y="468.682"/><ellipse cx="22" cy="484.682" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M21.4688,491.6039 Q19.7188,491.6039 18.5781,490.8695 Q17.4531,490.1195 16.8906,488.7757 Q16.3438,487.4164 16.3438,485.6195 Q16.3438,483.5882 17,482.1351 Q17.6563,480.682 18.9375,479.9007 Q20.2188,479.1195 22.0938,479.1195 Q22.9844,479.1195 23.6563,479.307 Q24.3281,479.4789 25.0156,479.8226 L24.2031,481.8382 Q23.5781,481.5257 23.0313,481.4007 Q22.5,481.2757 22.0156,481.2757 Q20.8438,481.2757 20.1406,481.807 Q19.4375,482.3382 19.1406,483.2914 Q18.8438,484.2445 18.8438,485.5101 Q18.8438,487.5257 19.5625,488.4945 Q20.2813,489.4476 21.875,489.4476 Q22.4688,489.4476 23.0938,489.2914 Q23.7188,489.1351 24.5469,488.7601 L24.5469,490.9789 Q23.8125,491.2914 23.0156,491.4476 Q22.2344,491.6039 21.4688,491.6039 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="24.6959" x="36" y="490.114">ISin</text><line style="stroke:#181818;stroke-width:0.5;" x1="8" x2="62.6959" y1="500.682" y2="500.682"/><line style="stroke:#181818;stroke-width:0.5;" x1="8" x2="62.6959" y1="508.682" y2="508.682"/></g><!--class ILn--><g class="entity" data-qualified-name="ILn" data-source-line="50" id="ent0057"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="52.7339" x="98.98" y="468.682"/><ellipse cx="113.98" cy="484.682" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M113.4488,491.6039 Q111.6988,491.6039 110.5581,490.8695 Q109.4331,490.1195 108.8706,488.7757 Q108.3238,487.4164 108.3238,485.6195 Q108.3238,483.5882 108.98,482.1351 Q109.6363,480.682 110.9175,479.9007 Q112.1988,479.1195 114.0738,479.1195 Q114.9644,479.1195 115.6363,479.307 Q116.3081,479.4789 116.9956,479.8226 L116.1831,481.8382 Q115.5581,481.5257 115.0113,481.4007 Q114.48,481.2757 113.9956,481.2757 Q112.8238,481.2757 112.1206,481.807 Q111.4175,482.3382 111.1206,483.2914 Q110.8238,484.2445 110.8238,485.5101 Q110.8238,487.5257 111.5425,488.4945 Q112.2613,489.4476 113.855,489.4476 Q114.4488,489.4476 115.0738,489.2914 Q115.6988,489.1351 116.5269,488.7601 L116.5269,490.9789 Q115.7925,491.2914 114.9956,491.4476 Q114.2144,491.6039 113.4488,491.6039 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="20.7339" x="127.98" y="490.114">ILn</text><line style="stroke:#181818;stroke-width:0.5;" x1="99.98" x2="150.7139" y1="500.682" y2="500.682"/><line style="stroke:#181818;stroke-width:0.5;" x1="99.98" x2="150.7139" y1="508.682" y2="508.682"/></g><!--class ICos--><g class="entity" data-qualified-name="ICos" data-source-line="51" id="ent0059"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="60.7699" x="186.96" y="468.682"/><ellipse cx="201.96" cy="484.682" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M201.4288,491.6039 Q199.6788,491.6039 198.5381,490.8695 Q197.4131,490.1195 196.8506,488.7757 Q196.3038,487.4164 196.3038,485.6195 Q196.3038,483.5882 196.96,482.1351 Q197.6163,480.682 198.8975,479.9007 Q200.1788,479.1195 202.0538,479.1195 Q202.9444,479.1195 203.6163,479.307 Q204.2881,479.4789 204.9756,479.8226 L204.1631,481.8382 Q203.5381,481.5257 202.9913,481.4007 Q202.46,481.2757 201.9756,481.2757 Q200.8038,481.2757 200.1006,481.807 Q199.3975,482.3382 199.1006,483.2914 Q198.8038,484.2445 198.8038,485.5101 Q198.8038,487.5257 199.5225,488.4945 Q200.2413,489.4476 201.835,489.4476 Q202.4288,489.4476 203.0538,489.2914 Q203.6788,489.1351 204.5069,488.7601 L204.5069,490.9789 Q203.7725,491.2914 202.9756,491.4476 Q202.1944,491.6039 201.4288,491.6039 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="28.7699" x="215.96" y="490.114">ICos</text><line style="stroke:#181818;stroke-width:0.5;" x1="187.96" x2="246.7299" y1="500.682" y2="500.682"/><line style="stroke:#181818;stroke-width:0.5;" x1="187.96" x2="246.7299" y1="508.682" y2="508.682"/></g><!--class ICsc--><g class="entity" data-qualified-name="ICsc" data-source-line="52" id="ent0061"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="59.0199" x="282.84" y="468.682"/><ellipse cx="297.84" cy="484.682" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M297.3088,491.6039 Q295.5588,491.6039 294.4181,490.8695 Q293.2931,490.1195 292.7306,488.7757 Q292.1838,487.4164 292.1838,485.6195 Q292.1838,483.5882 292.84,482.1351 Q293.4963,480.682 294.7775,479.9007 Q296.0588,479.1195 297.9338,479.1195 Q298.8244,479.1195 299.4963,479.307 Q300.1681,479.4789 300.8556,479.8226 L300.0431,481.8382 Q299.4181,481.5257 298.8713,481.4007 Q298.34,481.2757 297.8556,481.2757 Q296.6838,481.2757 295.9806,481.807 Q295.2775,482.3382 294.9806,483.2914 Q294.6838,484.2445 294.6838,485.5101 Q294.6838,487.5257 295.4025,488.4945 Q296.1213,489.4476 297.715,489.4476 Q298.3088,489.4476 298.9338,489.2914 Q299.5588,489.1351 300.3869,488.7601 L300.3869,490.9789 Q299.6525,491.2914 298.8556,491.4476 Q298.0744,491.6039 297.3088,491.6039 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="27.0199" x="311.84" y="490.114">ICsc</text><line style="stroke:#181818;stroke-width:0.5;" x1="283.84" x2="340.8599" y1="500.682" y2="500.682"/><line style="stroke:#181818;stroke-width:0.5;" x1="283.84" x2="340.8599" y1="508.682" y2="508.682"/></g><!--class ISec--><g class="entity" data-qualified-name="ISec" data-source-line="53" id="ent0063"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="59.0479" x="376.82" y="468.682"/><ellipse cx="391.82" cy="484.682" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M391.2888,491.6039 Q389.5388,491.6039 388.3981,490.8695 Q387.2731,490.1195 386.7106,488.7757 Q386.1638,487.4164 386.1638,485.6195 Q386.1638,483.5882 386.82,482.1351 Q387.4763,480.682 388.7575,479.9007 Q390.0388,479.1195 391.9138,479.1195 Q392.8044,479.1195 393.4763,479.307 Q394.1481,479.4789 394.8356,479.8226 L394.0231,481.8382 Q393.3981,481.5257 392.8513,481.4007 Q392.32,481.2757 391.8356,481.2757 Q390.6638,481.2757 389.9606,481.807 Q389.2575,482.3382 388.9606,483.2914 Q388.6638,484.2445 388.6638,485.5101 Q388.6638,487.5257 389.3825,488.4945 Q390.1013,489.4476 391.695,489.4476 Q392.2888,489.4476 392.9138,489.2914 Q393.5388,489.1351 394.3669,488.7601 L394.3669,490.9789 Q393.6325,491.2914 392.8356,491.4476 Q392.0544,491.6039 391.2888,491.6039 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="27.0479" x="405.82" y="490.114">ISec</text><line style="stroke:#181818;stroke-width:0.5;" x1="377.82" x2="434.8679" y1="500.682" y2="500.682"/><line style="stroke:#181818;stroke-width:0.5;" x1="377.82" x2="434.8679" y1="508.682" y2="508.682"/></g><!--class ICot--><g class="entity" data-qualified-name="ICot" data-source-line="54" id="ent0065"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="59.1179" x="470.79" y="468.682"/><ellipse cx="485.79" cy="484.682" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M485.2588,491.6039 Q483.5088,491.6039 482.3681,490.8695 Q481.2431,490.1195 480.6806,488.7757 Q480.1338,487.4164 480.1338,485.6195 Q480.1338,483.5882 480.79,482.1351 Q481.4463,480.682 482.7275,479.9007 Q484.0088,479.1195 485.8838,479.1195 Q486.7744,479.1195 487.4463,479.307 Q488.1181,479.4789 488.8056,479.8226 L487.9931,481.8382 Q487.3681,481.5257 486.8213,481.4007 Q486.29,481.2757 485.8056,481.2757 Q484.6338,481.2757 483.9306,481.807 Q483.2275,482.3382 482.9306,483.2914 Q482.6338,484.2445 482.6338,485.5101 Q482.6338,487.5257 483.3525,488.4945 Q484.0713,489.4476 485.665,489.4476 Q486.2588,489.4476 486.8838,489.2914 Q487.5088,489.1351 488.3369,488.7601 L488.3369,490.9789 Q487.6025,491.2914 486.8056,491.4476 Q486.0244,491.6039 485.2588,491.6039 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="27.1179" x="499.79" y="490.114">ICot</text><line style="stroke:#181818;stroke-width:0.5;" x1="471.79" x2="528.9079" y1="500.682" y2="500.682"/><line style="stroke:#181818;stroke-width:0.5;" x1="471.79" x2="528.9079" y1="508.682" y2="508.682"/></g><!--class ILog--><g class="entity" data-qualified-name="ILog" data-source-line="55" id="ent0067"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="61.1619" x="564.77" y="468.682"/><ellipse cx="579.77" cy="484.682" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M579.2388,491.6039 Q577.4888,491.6039 576.3481,490.8695 Q575.2231,490.1195 574.6606,488.7757 Q574.1138,487.4164 574.1138,485.6195 Q574.1138,483.5882 574.77,482.1351 Q575.4263,480.682 576.7075,479.9007 Q577.9888,479.1195 579.8638,479.1195 Q580.7544,479.1195 581.4263,479.307 Q582.0981,479.4789 582.7856,479.8226 L581.9731,481.8382 Q581.3481,481.5257 580.8013,481.4007 Q580.27,481.2757 579.7856,481.2757 Q578.6138,481.2757 577.9106,481.807 Q577.2075,482.3382 576.9106,483.2914 Q576.6138,484.2445 576.6138,485.5101 Q576.6138,487.5257 577.3325,488.4945 Q578.0513,489.4476 579.645,489.4476 Q580.2388,489.4476 580.8638,489.2914 Q581.4888,489.1351 582.3169,488.7601 L582.3169,490.9789 Q581.5825,491.2914 580.7856,491.4476 Q580.0044,491.6039 579.2388,491.6039 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29.1619" x="593.77" y="490.114">ILog</text><line style="stroke:#181818;stroke-width:0.5;" x1="565.77" x2="624.9319" y1="500.682" y2="500.682"/><line style="stroke:#181818;stroke-width:0.5;" x1="565.77" x2="624.9319" y1="508.682" y2="508.682"/></g><!--class Main--><g class="entity" data-qualified-name="Main" data-source-line="63" id="ent0071"><rect fill="#F1F1F1" height="48" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="64.8159" x="513.94" y="90.602"/><ellipse cx="528.94" cy="106.602" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M528.4088,113.5239 Q526.6588,113.5239 525.5181,112.7895 Q524.3931,112.0395 523.8306,110.6957 Q523.2838,109.3364 523.2838,107.5395 Q523.2838,105.5082 523.94,104.0551 Q524.5963,102.602 525.8775,101.8207 Q527.1588,101.0395 529.0338,101.0395 Q529.9244,101.0395 530.5963,101.227 Q531.2681,101.3989 531.9556,101.7426 L531.1431,103.7582 Q530.5181,103.4457 529.9713,103.3207 Q529.44,103.1957 528.9556,103.1957 Q527.7838,103.1957 527.0806,103.727 Q526.3775,104.2582 526.0806,105.2114 Q525.7838,106.1645 525.7838,107.4301 Q525.7838,109.4457 526.5025,110.4145 Q527.2213,111.3676 528.815,111.3676 Q529.4088,111.3676 530.0338,111.2114 Q530.6588,111.0551 531.4869,110.6801 L531.4869,112.8989 Q530.7525,113.2114 529.9556,113.3676 Q529.1744,113.5239 528.4088,113.5239 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="32.8159" x="542.94" y="112.034">Main</text><line style="stroke:#181818;stroke-width:0.5;" x1="514.94" x2="577.7559" y1="122.602" y2="122.602"/><line style="stroke:#181818;stroke-width:0.5;" x1="514.94" x2="577.7559" y1="130.602" y2="130.602"/></g><!--reverse link ISin to SinTaylor--><g class="link" data-entity-1="ent0003" data-entity-2="ent0006" data-link-type="extension" data-source-line="8" id="lnk7"><path d="M1275.35,544.472 C1275.35,563.422 1275.35,568.802 1275.35,585.872" fill="none" id="ISin-backto-SinTaylor" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1275.35,526.472,1269.35,544.472,1281.35,544.472,1275.35,526.472" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ILn to LnTaylor--><g class="link" data-entity-1="ent0005" data-entity-2="ent0008" data-link-type="extension" data-source-line="9" id="lnk9"><path d="M1614.35,544.472 C1614.35,563.422 1614.35,568.802 1614.35,585.872" fill="none" id="ILn-backto-LnTaylor" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1614.35,526.472,1608.35,544.472,1620.35,544.472,1614.35,526.472" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ICos to Cos--><g class="link" data-entity-1="ent0012" data-entity-2="ent0011" data-link-type="extension" data-source-line="13" id="lnk13"><path d="M1150.8054,157.0509 C1151.1854,192.0509 1151.71,239.562 1152.09,274.502" fill="none" id="ICos-backto-Cos" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1150.61,139.052,1144.8058,157.1161,1156.8051,156.9858,1150.61,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ICsc to Csc--><g class="link" data-entity-1="ent0015" data-entity-2="ent0014" data-link-type="extension" data-source-line="14" id="lnk16"><path d="M1243.5777,157.0517 C1243.7677,192.0517 1244.03,239.562 1244.22,274.502" fill="none" id="ICsc-backto-Csc" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1243.48,139.052,1237.5778,157.0843,1249.5776,157.0191,1243.48,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ISec to Sec--><g class="link" data-entity-1="ent0018" data-entity-2="ent0017" data-link-type="extension" data-source-line="15" id="lnk19"><path d="M1335.1223,157.0517 C1334.9323,192.0517 1334.67,239.562 1334.48,274.502" fill="none" id="ISec-backto-Sec" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1335.22,139.052,1329.1224,157.0191,1341.1222,157.0843,1335.22,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ICot to Cot--><g class="link" data-entity-1="ent0021" data-entity-2="ent0020" data-link-type="extension" data-source-line="16" id="lnk22"><path d="M1426.8946,157.0509 C1426.5146,192.0509 1425.99,239.562 1425.6,274.502" fill="none" id="ICot-backto-Cot" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1427.09,139.052,1420.8949,156.9858,1432.8942,157.1161,1427.09,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--link Cos to ISin--><g class="link" data-entity-1="ent0011" data-entity-2="ent0003" data-link-type="dependency" data-source-line="17" id="lnk23"><path codeLine="17" d="M1161.47,323.182 C1169.99,343.852 1183.73,374.502 1199.35,399.142 C1212.7,420.212 1226.2991,437.3377 1241.1591,454.3977" fill="none" id="Cos-to-ISin" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="1245.1,458.922,1242.2049,449.5082,1241.8159,455.1517,1236.1725,454.7628,1245.1,458.922" style="stroke:#181818;stroke-width:1;"/></g><!--link Csc to ISin--><g class="link" data-entity-1="ent0014" data-entity-2="ent0003" data-link-type="dependency" data-source-line="18" id="lnk24"><path codeLine="18" d="M1248.09,323.012 C1253.56,356.882 1262.8329,414.2288 1269.0829,452.9088" fill="none" id="Csc-to-ISin" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="1270.04,458.832,1272.5532,449.3092,1269.2424,453.896,1264.6556,450.5853,1270.04,458.832" style="stroke:#181818;stroke-width:1;"/></g><!--link Sec to ISin--><g class="link" data-entity-1="ent0017" data-entity-2="ent0003" data-link-type="dependency" data-source-line="19" id="lnk25"><path codeLine="19" d="M1327.23,323.012 C1316.81,356.882 1299.1143,414.4172 1287.2143,453.0972" fill="none" id="Sec-to-ISin" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="1285.45,458.832,1291.9196,451.4061,1286.9203,454.053,1284.2733,449.0537,1285.45,458.832" style="stroke:#181818;stroke-width:1;"/></g><!--link Cot to ISin--><g class="link" data-entity-1="ent0020" data-entity-2="ent0003" data-link-type="dependency" data-source-line="20" id="lnk26"><path codeLine="20" d="M1417.71,323.002 C1410.06,344.102 1396.9,375.512 1379.35,399.142 C1362.78,421.452 1344.7563,438.5957 1324.8063,454.8957" fill="none" id="Cot-to-ISin" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="1320.16,458.692,1329.6603,456.0952,1324.0319,455.5284,1324.5987,449.9,1320.16,458.692" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ILog to Log--><g class="link" data-entity-1="ent0029" data-entity-2="ent0028" data-link-type="extension" data-source-line="24" id="lnk30"><path d="M1546.5777,157.0517 C1546.7677,192.0517 1547.03,239.562 1547.22,274.502" fill="none" id="ILog-backto-Log" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1546.48,139.052,1540.5778,157.0843,1552.5776,157.0191,1546.48,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--link Log to ILn--><g class="link" data-entity-1="ent0028" data-entity-2="ent0005" data-link-type="dependency" data-source-line="25" id="lnk31"><path codeLine="25" d="M1555.43,323.012 C1567.26,356.882 1587.3816,414.4876 1600.8916,453.1676" fill="none" id="Log-to-ILn" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="1602.87,458.832,1603.6786,449.0164,1601.2213,454.1116,1596.126,451.6543,1602.87,458.832" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ISin to SinStub--><g class="link" data-entity-1="ent0034" data-entity-2="ent0033" data-link-type="extension" data-source-line="29" id="lnk35"><path d="M1673.35,157.052 C1673.35,192.052 1673.35,239.562 1673.35,274.502" fill="none" id="ISin-backto-SinStub" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1673.35,139.052,1667.35,157.052,1679.35,157.052,1673.35,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ILn to LnStub--><g class="link" data-entity-1="ent0037" data-entity-2="ent0036" data-link-type="extension" data-source-line="30" id="lnk38"><path d="M1788.35,157.052 C1788.35,192.052 1788.35,239.562 1788.35,274.502" fill="none" id="ILn-backto-LnStub" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1788.35,139.052,1782.35,157.052,1794.35,157.052,1788.35,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ICos to CosStub--><g class="link" data-entity-1="ent0040" data-entity-2="ent0039" data-link-type="extension" data-source-line="31" id="lnk41"><path d="M1905.35,157.052 C1905.35,192.052 1905.35,239.562 1905.35,274.502" fill="none" id="ICos-backto-CosStub" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1905.35,139.052,1899.35,157.052,1911.35,157.052,1905.35,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ICsc to CscStub--><g class="link" data-entity-1="ent0043" data-entity-2="ent0042" data-link-type="extension" data-source-line="32" id="lnk44"><path d="M2025.35,157.052 C2025.35,192.052 2025.35,239.562 2025.35,274.502" fill="none" id="ICsc-backto-CscStub" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2025.35,139.052,2019.35,157.052,2031.35,157.052,2025.35,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ISec to SecStub--><g class="link" data-entity-1="ent0046" data-entity-2="ent0045" data-link-type="extension" data-source-line="33" id="lnk47"><path d="M2144.35,157.052 C2144.35,192.052 2144.35,239.562 2144.35,274.502" fill="none" id="ISec-backto-SecStub" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2144.35,139.052,2138.35,157.052,2150.35,157.052,2144.35,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ICot to CotStub--><g class="link" data-entity-1="ent0049" data-entity-2="ent0048" data-link-type="extension" data-source-line="34" id="lnk50"><path d="M2263.35,157.052 C2263.35,192.052 2263.35,239.562 2263.35,274.502" fill="none" id="ICot-backto-CotStub" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2263.35,139.052,2257.35,157.052,2269.35,157.052,2263.35,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ILog to LogStub--><g class="link" data-entity-1="ent0052" data-entity-2="ent0051" data-link-type="extension" data-source-line="35" id="lnk53"><path d="M2383.35,157.052 C2383.35,192.052 2383.35,239.562 2383.35,274.502" fill="none" id="ILog-backto-LogStub" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2383.35,139.052,2377.35,157.052,2389.35,157.052,2383.35,139.052" style="stroke:#181818;stroke-width:1;"/></g><!--link FunctionSystem to ISin--><g class="link" data-entity-1="ent0054" data-entity-2="ent0055" data-link-type="dependency" data-source-line="49" id="lnk56"><path codeLine="49" d="M138.49,370.912 C118,383.282 98.37,397.342 81.35,413.142 C64.79,428.522 54.8575,445.7574 47.1275,462.8074" fill="none" id="FunctionSystem-to-ISin" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="44.65,468.272,52.0093,461.7267,46.7146,463.7181,44.7232,458.4234,44.65,468.272" style="stroke:#181818;stroke-width:1;"/></g><!--link FunctionSystem to ILn--><g class="link" data-entity-1="ent0054" data-entity-2="ent0057" data-link-type="dependency" data-source-line="50" id="lnk58"><path codeLine="50" d="M181.63,399.592 C177.36,404.042 173.25,408.562 169.35,413.142 C155.05,429.912 145.7282,446.6094 137.9182,463.0994" fill="none" id="FunctionSystem-to-ILn" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="135.35,468.522,142.8174,462.1003,137.4902,464.0032,135.5873,458.676,135.35,468.522" style="stroke:#181818;stroke-width:1;"/></g><!--link FunctionSystem to ICos--><g class="link" data-entity-1="ent0054" data-entity-2="ent0059" data-link-type="dependency" data-source-line="51" id="lnk60"><path codeLine="51" d="M263.04,399.422 C250.21,425.332 240.2113,445.5045 231.4913,463.1245" fill="none" id="FunctionSystem-to-ICos" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="228.83,468.502,236.4069,462.2099,231.0477,464.0207,229.2369,458.6615,228.83,468.502" style="stroke:#181818;stroke-width:1;"/></g><!--link FunctionSystem to ICsc--><g class="link" data-entity-1="ent0054" data-entity-2="ent0061" data-link-type="dependency" data-source-line="52" id="lnk62"><path codeLine="52" d="M312.35,399.422 C312.35,425.332 312.35,444.882 312.35,462.502" fill="none" id="FunctionSystem-to-ICsc" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="312.35,468.502,316.35,459.502,312.35,463.502,308.35,459.502,312.35,468.502" style="stroke:#181818;stroke-width:1;"/></g><!--link FunctionSystem to ISec--><g class="link" data-entity-1="ent0054" data-entity-2="ent0063" data-link-type="dependency" data-source-line="53" id="lnk64"><path codeLine="53" d="M361.14,399.422 C373.83,425.332 383.7208,445.4936 392.3508,463.1136" fill="none" id="FunctionSystem-to-ISec" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="394.99,468.502,394.6235,458.6599,392.7907,464.0116,387.439,462.1788,394.99,468.502" style="stroke:#181818;stroke-width:1;"/></g><!--link FunctionSystem to ICot--><g class="link" data-entity-1="ent0054" data-entity-2="ent0065" data-link-type="dependency" data-source-line="54" id="lnk66"><path codeLine="54" d="M440.72,399.452 C445.1,403.952 449.33,408.532 453.35,413.142 C467.96,429.922 477.8943,446.5023 486.3843,462.9223" fill="none" id="FunctionSystem-to-ICot" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="489.14,468.252,488.5595,458.4202,486.8435,463.8106,481.4532,462.0946,489.14,468.252" style="stroke:#181818;stroke-width:1;"/></g><!--link FunctionSystem to ILog--><g class="link" data-entity-1="ent0054" data-entity-2="ent0067" data-link-type="dependency" data-source-line="55" id="lnk68"><path codeLine="55" d="M486.41,390.922 C492.77,393.762 499.1,396.512 505.35,399.142 C523.48,406.782 531.95,400.892 547.35,413.142 C565.48,427.572 576.0082,445.3803 583.8682,462.8503" fill="none" id="FunctionSystem-to-ILog" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="586.33,468.322,586.2851,458.4732,584.2785,463.7622,578.9895,461.7556,586.33,468.322" style="stroke:#181818;stroke-width:1;"/></g><!--link Main to FunctionSystem--><g class="link" data-entity-1="ent0071" data-entity-2="ent0054" data-link-type="dependency" data-source-line="63" id="lnk72"><path codeLine="63" d="M516.24,139.052 C496.36,154.532 473.5632,172.2946 445.1432,194.4346" fill="none" id="Main-to-FunctionSystem" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="440.41,198.122,449.9681,195.7465,444.3544,195.0492,445.0516,189.4355,440.41,198.122" style="stroke:#181818;stroke-width:1;"/></g><!--link Main to CsvWriter--><g class="link" data-entity-1="ent0071" data-entity-2="ent0070" data-link-type="dependency" data-source-line="64" id="lnk73"><path codeLine="64" d="M576.59,139.052 C617.87,171.072 687.3293,224.9442 734.1593,261.2742" fill="none" id="Main-to-CsvWriter" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="738.9,264.952,734.2408,256.2749,734.9494,261.8872,729.3371,262.5958,738.9,264.952" style="stroke:#181818;stroke-width:1;"/></g><?plantuml-src bLJBJiCm4BptArQSG3G8hXNq0a922X9IaJYxPXii73lARdW8yUzid3gDcnJ1gTdPzNXcQhjI-bKL24URncastfsj5U4HVCq0Z6EiDqeZtAsC2n30AHbt_B606z-iBSu1Aue5NC45PXVd9n6G1TyfJzxJsF-oQAk8G8Gyga_hQp1bPR54nnJazHFvr43kPj-pMJKooxKflFCboeVkN7SirvuI0gbtFT9fZ_HE7wOzgGUSlCV9qcjtoh9bDD6I3ygMRzWLYhwST6HzeMh3BsNg9_T56eWlfDUYWUvGFiJDceOyikzAi5_I7xLpDqnrrDvBTjnFqntldYOymS_35CRo90dntWtSReslFecn3BupEV1tCh-8HZCRw-0iqvwsTMSbqwGZ4BHdX17enCeIxfTmeFH5v0n_pAdsPTKm_lcEY8CzxVqncSBpQRWrC8cBZqbwr0TuU7fRCRSxPGqRczmvUdkIeujrV2FUs-hH2twyCHQTAd41AxcghfZ3isArWDmGNpueKrzkO-f-biivMBL66-TFmYiYATqhUSfQCQc-7Twh-040?></g></svg>
## 5. Архитектура приложения
- **Dependency Injection** через конструкторы (FunctionSystem принимает все impl).
- **Taylor series** строго в SinTaylor и LnTaylor (без библиотечных trig/log).
- **Stubs** теперь полностью табличные (Map<Double, Double> с 810 ключевыми точками ОДЗ, поиск ближайшей + линейная интерполяция/экстраполяция). Реализованы в `function.stubs.*Stub.kt` (SinStub, CosStub, CscStub, SecStub, CotStub, LnStub, LogStub). ОДЗ и исключения добавлены где необходимо.
- **CsvWriter** позволяет выгружать любой модуль.
- Тесты: unit для каждого, интеграционные Bottom-Up.
## 6. Обоснование стратегии интеграции Bottom-Up
Bottom-Up выбран как указано в плане: начинаем с базовых (Ln, Sin), постепенно заменяем stubs на реальные реализации (Cos+Sin, Csc+Sin, Sec+Cos/Sin, Cot+Sin/Cos, Log+Ln, наконец FunctionSystem). Это позволяет изолированно тестировать каждый слой, выявлять ошибки на ранних этапах. 8 шагов реализованы в `BottomUpIntegrationTest.kt` (каждый тест — шаг интеграции, использует mix реальных + stub). На каждом шаге:
- Запуск теста.
- Генерация CSV через CsvWriter.
- Сравнение с Desmos.
## 7. Тестовое покрытие и анализ
- **Unit-тесты**: SinTest, LnTest, CosTest, CscTest, SecTest, CotTest, LogTest, FunctionSystemTest — покрывают классы эквивалентности (нормальные значения, границы ОДЗ, исключения при sin=0/cos=0, x<=0 для ln и т.д.).\
**Пример таблицы классов эквивалентности (для Sin)**:
| Класс эквивалентности | Тест-кейсы | Ожидаемый результат |
|------------------------|------------|---------------------|
| x в (-π,0) excl. multiples of π | x=-0.5, eps=1e-10 | ~ -0.4794 |
| Граница (x ~ -π) | x=-3.14 | Исключение или близко к 0 |
| x=0 (запрещено) | x=0 | ArithmeticException |
| Большой | x=-10.0 | Сходимость ряда |
Аналогично для Ln (x>0, x~1, x>1), trig и log.
Покрытие составляет 100% для функций.
Подтверждается в (build/reports/jacoco/test/html/index.html)
## 8. Результаты интеграционного тестирования
- BottomUpIntegrationTest прошёл все 8 шагов.
- Примеры CSV: `output.csv`, `output_sin.csv` и т.д. (сгенерированы Main с разными модулями).
- Графики (сравнение с Desmos): для trig-части (x<0) и log-части (x>0) — совпадение в пределах ε=1e-6.
![image_2026-04-24_12-47-01.png](docs/image_2026-04-24_12-47-01.png)
И наши точки это вывод программы:
![Снимок экрана_20260424_125552.png](docs/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_20260424_125552.png)
- Особые точки обработаны (исключения, NaN на x=1).
## 9. Выводы
Работа выполнена в полном соответствии с планом.
Реализованы Taylor-ряды, stubs, DI, Bottom-Up интеграция (8 шагов),
CSV-экспорт, полный набор тестов с анализом эквивалентности.