Code Quality#
This page contains information on various code quality metrics that are collected during the development cycle. Some of these are autogenerated while others rely on manual scripts and updating the documentation, so these will be updating as needed and when appropriate. All plots show the corresponding commit hash when hovering over a point with the mouse pointer.
Live Code Quality Metrics#
Live code quality metrics are computed when develop branch is updated. Live Chart. Note these charts are computed within github actions and are somewhat noisy
Performance History#
The plot below shows the runtime performance over a series of commits for a 3-turbine test case with 1,440 atmospheric conditions. This data is collected on NREL's Kestrel supercomputer.
Show code cell content
from bokeh.plotting import figure, show, output_notebook
from bokeh.models import ColumnDataSource, HoverTool, Range1d
import pandas as pd
from datetime import datetime
output_notebook()
COLORS = ['blue', 'green', 'red', 'cyan', 'magenta', 'y', 'k']
columns = ["commit_hash", "commit_hash_8char", "date", "jensen", "gauss", "gch", "cc", "emgauss", "tooltip_label"]
data = [
("df25a9cfacd3d652361d2bd37f568af00acb2631", "df25a9cf", datetime(2021, 12, 29), 1.2691, 1.2584, 1.6432, None, None, "df25a9cf"),
("b797390a43298a815f3ff57955cfdc71ecf3e866", "b797390a", datetime(2022, 1, 3), 0.6867, 1.2354, 1.8026, None, None, "b797390a"),
("01a02d5f91b2f4a863eebe88a618974b0749d1c4", "01a02d5f", datetime(2022, 1, 4), 0.2329, 0.5661, 0.9869, None, None, "01a02d5f"),
("dd847210082035d43b0273ae63a76a53cb8d2e12", "dd847210", datetime(2022, 1, 6), 0.2290, 0.5815, 0.9822, None, None, "dd847210"),
("33779269e98cc882a5f066c462d8ec1eadf37a1a", "33779269", datetime(2022, 1, 10), 0.2300, 0.5845, 1.0114, None, None, "33779269"),
("12890e029a7155b074b9b325d320d1798338e287", "12890e02", datetime(2022, 1, 11), 0.2296, 0.5660, 1.0114, None, None, "12890e02"),
("66dafc08bd620d96deda7d526b0e4bfc3b086650", "66dafc08", datetime(2022, 1, 12), 0.2342, 0.5937, 1.0284, None, None, "66dafc08"),
("a325819b3b03b84bd76ad455e3f9b4600744ba14", "a325819b", datetime(2022, 1, 13), 0.2349, 0.5711, 1.0072, None, None, "a325819b"),
("8a2c1a610295c007f0222ce737723c341189811d", "8a2c1a61", datetime(2022, 1, 14), 0.2338, 0.5837, 1.0242, None, None, "8a2c1a61"),
("c6bc79b0cfbc8ce5d6da0d33b68028157d2e93c0", "c6bc79b0", datetime(2022, 1, 14), 0.2374, 0.5653, 0.9781, None, None, "c6bc79b0"),
("03e1f461c152e4f221fe92c834f2787680cf5772", "03e1f461", datetime(2022, 1, 18), 0.2423, 0.5820, 1.0411, 1.2251, None, "PR #56"),
("9e96d6c412b64fe76a57e7de8af3b00c21d18348", "9e96d6c4", datetime(2022, 1, 19), 0.2507, 0.5674, 1.0053, 1.1828, None, "v3.0rc1"),
("2a98428f9c6fb9bb4302ae09809441bf3e7162b0", "2a98428f", datetime(2022, 2, 15), 0.1662, 0.5699, 1.0081, 1.1906, None, "PR #317"),
("9b4e85cf1b41ba7001aaba1a830b93e176f3dd43", "9b4e85cf", datetime(2022, 3, 1), 0.1710, 0.6143, 1.0626, 1.2013, None, "v3.0"),
("d18f4d263ecabf502242592f9d60815a07c7b89c", "d18f4d26", datetime(2022, 3, 4), 0.1766, 0.6020, 1.0612, 1.2088, None, "v3.0.1"),
("a23241bb9e45078e36a4662d48c9d3fe0c3316e4", "a23241bb", datetime(2022, 4, 6), 0.1764, 0.6044, 1.0656, 1.2067, None, "v3.1"),
("c2006b0011a5df036c306c15e75763ec492dafda", "c2006b00", datetime(2022, 6, 22), 0.1801, 0.6082, 1.0603, 1.2025, None, "v3.1.1"),
("0c2adf3e702b6427da946a6ba9dbedbea22738be", "0c2adf3e", datetime(2022, 9, 16), 0.1753, 0.6202, 1.0486, 1.1962, None, "v3.2"),
("39c466000b1874e06a6f58da9c30bb877fc8d4d2", "39c46600", datetime(2022, 11, 20), 0.1738, 0.6140, 1.0498, 1.1783, None, "v3.2.1"),
("8436fd78b002e5792f5d0dd1409332d171036d49", "8436fd78", datetime(2023, 2, 8), 0.1980, 0.6334, 1.0631, 1.2009, None, "v3.2.2"),
("07a45b66c5facfea06c40bd82e34040c97560640", "07a45b66", datetime(2023, 2, 8), 0.1831, 0.6070, 1.0233, 1.1991, None, "07a45b66"),
("1d84538c334a502c6ad7df48b8cc2309d6a6436d", "1d84538c", datetime(2023, 2, 22), 0.1771, 0.6226, 1.0541, 1.2044, None, "1d84538c"),
("4d528a3d6456621a382d409b5145a877b5414b88", "4d528a3d", datetime(2023, 2, 23), 0.1768, 0.6026, 1.0366, 1.1958, None, "4d528a3d"),
("8c637b36b66069b216cb94ae87d4c0a91e9b211e", "8c637b36", datetime(2023, 2, 27), 0.2052, 0.6264, 1.0655, 1.2137, None, "8c637b36"),
("4d23fa6dd78d0497deb4fd62783f0b3ee4204579", "4d23fa6d", datetime(2023, 2, 27), 0.1996, 0.6083, 1.0465, 1.2184, None, "4d23fa6d"),
("015f6874c320efee2c0d1ae76eea4a5b043d69d6", "015f6874", datetime(2023, 3, 1), 0.2204, 0.6383, 1.0633, 1.2093, None, "015f6874"),
("26f06d449da208ce64724b1463b07ad20746cbdc", "26f06d44", datetime(2023, 3, 6), 0.1848, 0.6186, 1.0410, 1.2076, None, "26f06d44"),
("6b9d6bb8bec6e3ea548f5858e2a8ea5986264fc8", "6b9d6bb8", datetime(2023, 3, 6), 0.1946, 0.6247, 1.0742, 1.2250, None, "6b9d6bb8"),
("b796bd0fd92ba6b91d590f6cb60bb7ab3bca9932", "b796bd0f", datetime(2023, 3, 6), 0.2027, 0.6333, 1.0612, 1.2038, None, "b796bd0f"),
("780aef7c7b4b9cafea3e323d536a34a4af5818b4", "780aef7c", datetime(2023, 3, 7), 0.1922, 0.6292, 1.0494, 1.2125, None, "780aef7c"),
("9f93ad9bf85e4a0e6baf5b62ea4b3ef143729861", "9f93ad9b", datetime(2023, 3, 7), 0.2007, 0.6342, 1.0611, 1.2059, None, "9f93ad9b"),
("16628a0ba45a675df762245694e0a7666a3478f8", "16628a0b", datetime(2023, 3, 7), 0.2110, 0.6405, 1.0799, 1.2101, None, "v3.3"),
("01684c8559604344bd09791268131819a09770a8", "01684c85", datetime(2023, 3, 17), 0.2067, 0.6334, 1.0691, 1.1924, None, "01684c85"),
("e9231fb893c765b723fa4c1e087a58761b6aa471", "e9231fb8", datetime(2023, 3, 20), 0.2082, 0.6357, 1.0728, 1.2212, None, "e9231fb8"),
("219889e243ffc69c71b6f7747f5af751d5694de1", "219889e2", datetime(2023, 3, 23), 0.1912, 0.6182, 1.0651, 1.2033, None, "219889e2"),
("6124d2a82a7a823722210bc2e8516d355ba19eb3", "6124d2a8", datetime(2023, 4, 5), 0.2064, 0.6419, 1.0711, 1.1933, None, "6124d2a8"),
("f6e4287f712cc866893e71b1ea7a7546e4567bf9", "f6e4287f", datetime(2023, 4, 25), 0.1944, 0.6103, 1.0460, 1.2236, None, "f6e4287f"),
("f2797fef396f2f19b02abb1f9555b678dac614f1", "f2797fef", datetime(2023, 4, 25), 0.1997, 0.6357, 1.0648, 1.2128, None, "f2797fef"),
("b4e538f530048fec58eaca5170be82c67dbdcceb", "b4e538f5", datetime(2023, 4, 25), 0.2103, 0.6415, 1.0679, 1.2248, None, "b4e538f5"),
("68820b715ed6b2c981aa11d29c0102e879280d79", "68820b71", datetime(2023, 4, 25), 0.2076, 0.6354, 1.0625, 1.2018, None, "68820b71"),
("03deffeda91fa8d8ab188d57b9fa302a7be008e0", "03deffed", datetime(2023, 4, 25), 0.2138, 0.6453, 1.0738, 1.2148, None, "03deffed"),
("0d2bfecc271d561f67050659684b4797af8ee740", "0d2bfecc", datetime(2023, 4, 25), 0.2117, 0.6464, 1.0855, 1.2213, None, "0d2bfecc"),
("1d03a465593f56c99a64a576d185d4ed17b659f2", "1d03a465", datetime(2023, 4, 25), 0.2060, 0.6376, 1.0722, 1.2129, None, "1d03a465"),
("78a953b7ef9a36b62e5b446c80ed68abfddbfb74", "78a953b7", datetime(2023, 5, 4), 0.2170, 0.6323, 1.0673, 1.2116, None, "78a953b7"),
("6c4f70ffbf3d4d2922d41d0032ae1b93d8a23c99", "6c4f70ff", datetime(2023, 5, 4), 0.2123, 0.6407, 1.0688, 1.2183, None, "6c4f70ff"),
("ab03282623d0262b20b8c132efcdcace2dace766", "ab032826", datetime(2023, 5, 6), 0.1846, 0.6147, 1.0605, 1.2106, None, "ab032826"),
("d2f7a45af27a6b40027d6f6a0f4f0be0c6dee5d9", "d2f7a45a", datetime(2023, 5, 6), 0.1924, 0.6259, 1.0525, 1.1896, None, "d2f7a45a"),
("98b23f3d517481b127f190f5f8b7ebfae7f8b6b2", "98b23f3d", datetime(2023, 5, 6), 0.1940, 0.6177, 1.0524, 1.1916, None, "98b23f3d"),
("452425de723cc1640d999022389672caf9bffbd0", "452425de", datetime(2023, 5, 6), 0.2075, 0.6297, 1.0647, 1.2017, None, "452425de"),
("85dadb1a566c9fa8dc84cb9837b98bd5d23b8d58", "85dadb1a", datetime(2023, 5, 7), 0.1853, 0.6164, 1.0244, 1.1917, None, "85dadb1a"),
("432ee7f96c1f6cccd05a0034c86c720cdb63a3e6", "432ee7f9", datetime(2023, 5, 10), 0.1813, 0.6003, 1.0310, 1.1856, None, "432ee7f9"),
("ebd70ecaef14c0e239337eb6e36506303378a31a", "ebd70eca", datetime(2023, 5, 10), 0.1814, 0.6012, 1.0402, 1.2075, 0.3262, "ebd70eca"),
("77fa7155d55bdf3fd43e29f58fe57feffcb107cf", "77fa7155", datetime(2023, 5, 11), 0.1763, 0.6095, 1.0507, 1.2181, 0.3431, "77fa7155"),
("d5d4b1346bd6acba9ba41b4bf546640de162a9d6", "d5d4b134", datetime(2023, 5, 12), 0.1921, 0.6277, 1.0608, 1.2104, 0.3342, "d5d4b134"),
("d5d4b1346bd6acba9ba41b4bf546640de162a9d6", "d5d4b134", datetime(2023, 5, 16), 0.1783, 0.6172, 1.0474, 1.1958, 0.3263, "d5d4b134"),
("7c879f1ce18b52d9b0a8eecf877d03e66afc975b", "7c879f1c", datetime(2023, 5, 16), 0.1754, 0.5924, 1.0241, 1.1966, 0.3096, "7c879f1c"),
("2aa9f2a55686f2ee5dc407e8e0223eb25176d906", "2aa9f2a5", datetime(2023, 5, 16), 0.1843, 0.6066, 1.0405, 1.1988, 0.3263, "2aa9f2a5"),
("5e5bb7f4e653621e7a81ff4bcaa27dbc1f759de7", "5e5bb7f4", datetime(2023, 5, 16), 0.1911, 0.6197, 1.0425, 1.1792, 0.3426, "v3.4"),
("d91953a499dfb88b457a1e7a07903debbda4058b", "d91953a4", datetime(2023, 6, 1), 0.1839, 0.6171, 1.0521, 1.1919, 0.3269, "d91953a4"),
("76742879c81c9baced49b9fc60abbf1d2eba65ff", "76742879", datetime(2023, 7, 3), 0.1818, 0.6128, 1.0514, 1.1965, 0.3338, "76742879"),
("9c73a41eaca95bb718ac79980a1799dfa1c48cf3", "9c73a41e", datetime(2023, 7, 6), 0.1795, 0.6011, 1.0335, 1.2146, 0.3142, "9c73a41e"),
("67104dd714de939be136646af68edd9643ddfcd3", "67104dd7", datetime(2023, 7, 6), 0.1869, 0.5838, 0.7982, 0.9479, 0.3153, "67104dd7"),
("e6906feebdee6bdd2103f0bd390679e6a1b0052d", "e6906fee", datetime(2023, 7, 7), 0.1751, 0.5780, 0.7820, 0.9452, 0.3136, "e6906fee"),
("8908ab47eaa8a3d7e7c9126484b524f751e41f55", "8908ab47", datetime(2023, 7, 10), 0.1739, 0.5472, 0.7007, 0.8955, 0.3012, "8908ab47"),
("063d8b58464f95520c9887ac4f575e6c1f6880d8", "063d8b58", datetime(2023, 7, 11), 0.1758, 0.5891, 0.7337, 0.8818, 0.3062, "063d8b58"),
("59e53a66aef134a3c9e912f9468ca667b599d4e5", "59e53a66", datetime(2023, 7, 27), 0.1918, 0.6174, 1.0461, 1.1964, 0.3380, "59e53a66"),
("cd14608474be8561c188d2aa7a772b8ac753fb70", "cd146084", datetime(2023, 8, 3), 0.1799, 0.5783, 0.7979, 0.9539, 0.3214, "cd146084"),
("db958c4b779ffc825689e052958020864cbcde63", "db958c4b", datetime(2023, 8, 15), 0.1683, 0.5486, 0.7048, 0.8803, 0.2955, "db958c4b"),
("8ece0f5f7d3bfd66f4f83198debf5627344af534", "8ece0f5f", datetime(2023, 8, 15), 0.1697, 0.5529, 0.7032, 0.8925, 0.2899, "8ece0f5f"),
("77ea50d9bd5d01f7110dbebf1ba689a25eee9d96", "77ea50d9", datetime(2023, 9, 11), 0.1858, 0.5741, 0.7973, 0.9559, 0.3191, "77ea50d9"),
("05b900c228d427bfa8e531527b546cdeb822cfc9", "05b900c2", datetime(2023, 10, 4), 0.1842, 0.5622, 0.7196, 0.8759, 0.2821, "05b900c2"),
("2dccbbd0ca67a274a2aeb9996f262014b3137fc0", "2dccbbd0", datetime(2023, 10, 20), 0.1708, 0.5382, 0.6906, 0.8738, 0.2908, "2dccbbd0"),
("e9c90aa521917e587dd9497d529822f359eec3e2", "e9c90aa5", datetime(2023, 10, 26), 0.1778, 0.5911, 0.7423, 0.8710, 0.2858, "e9c90aa5"),
("6c3ddb48b59d286899a8efd5989d741f86c4ade3", "6c3ddb48", datetime(2023, 10, 26), 0.1700, 0.5585, 0.6991, 0.8823, 0.2887, "6c3ddb48"),
("31fe1b69ff863f0a610aec5b22424382ec3cc933", "31fe1b69", datetime(2023, 10, 26), 0.1661, 0.5548, 0.7630, 0.9317, 0.2969, "v3.5"),
("a4768d08e172e009efb7ccafb8dc37a90753df7f", "a4768d08", datetime(2023, 11, 8), 0.1725, 0.5768, 0.7635, 0.8827, 0.2990, "a4768d08"),
("1a2e86847d7942d9ecac20d91d2f4cd73685b230", "1a2e8684", datetime(2023, 11, 15), 0.1764, 0.5933, 0.7970, 0.8984, 0.2972, "1a2e8684"),
("bc4fd2812636baba036d6f5648c6e77bcfb263e4", "bc4fd281", datetime(2023, 11, 15), 0.1728, 0.5468, 0.7200, 0.8730, 0.2886, "bc4fd281"),
("34a7e0cd84226520f5a39cf3345699f012aad505", "34a7e0cd", datetime(2023, 11, 28), 0.1697, 0.5541, 0.7179, 0.8844, 0.2929, "34a7e0cd"),
("e1dd6b73ae1d9552e0fe9679c0d35199c113d647", "e1dd6b73", datetime(2023, 11, 30), 0.1715, 0.5709, 0.7846, 0.9334, 0.2871, "e1dd6b73"),
("599f2266ad55f73f4afaf80d4d1e32523a256d3b", "599f2266", datetime(2023, 12, 1), 0.1892, 0.5930, 0.7877, 0.9125, 0.2928, "599f2266"),
("52b8a5f595f565b149a227b26bea7786d742f15c", "52b8a5f5", datetime(2023, 12, 6), 0.1747, 0.5856, 0.7290, 0.8946, 0.2960, "52b8a5f5"),
("6f2256dab34c9d9548bd6d4d81594605d75434bd", "6f2256da", datetime(2023, 12, 6), 0.1799, 0.5777, 0.7798, 0.9518, 0.3016, "6f2256da"),
("b6de318f12c93872daec8762edecb66d311504b5", "b6de318f", datetime(2023, 12, 6), 0.1820, 0.5993, 0.8048, 0.9650, 0.3211, "b6de318f"),
("94357caf7092f6bfb6d8b51b9daf1ae9b47f26dc", "94357caf", datetime(2023, 12, 7), 0.1731, 0.5623, 0.7093, 0.8866, 0.2924, "94357caf"),
("64ae6789f1860734ab4d6d34cd7c4313a85274fc", "64ae6789", datetime(2023, 12, 8), 0.1701, 0.5625, 0.7113, 0.8901, 0.2897, "64ae6789"),
("da61128340ac0e520b4583eb759bf771512332f6", "da611283", datetime(2023, 12, 13), 0.1713, 0.5603, 0.6923, 0.8770, 0.2882, "da611283"),
("bbcb8c33f4f35036c8156c57cea60fea5c5e17af", "bbcb8c33", datetime(2023, 12, 13), 0.1748, 0.5769, 0.6966, 0.8766, 0.2840, "bbcb8c33"),
("ebdf9a146359606dc5e13363beee6dd82ad1c247", "ebdf9a14", datetime(2023, 12, 13), 0.1782, 0.5622, 0.7108, 0.8755, 0.2895, "ebdf9a14"),
("b88dc7bb15370da91956ca24db3875245dc073d2", "b88dc7bb", datetime(2024, 1, 4), 0.1836, 0.5699, 0.7204, 0.8891, 0.2957, "b88dc7bb"),
("a88a15432ef01f7600e3ccd7b9d2b4ba89a01df0", "a88a1543", datetime(2024, 2, 7), 0.1922, 0.5925, 0.7759, 0.8914, 0.2937, "a88a1543"),
("c7f8f36178f35ccd8e08e0ce10a77fc487f78a14", "c7f8f361", datetime(2024, 2, 20), 0.1801, 0.5775, 0.7097, 0.8755, 0.2907, "c7f8f361"),
("4b331398bc4a08edcd32539157cff2866f481875", "4b331398", datetime(2024, 3, 19), 0.1810, 0.5678, 0.7276, 0.8805, 0.2958, "4b331398"),
("faba9890d5d07d9d8720464547602df1ff73124b", "faba9890", datetime(2024, 3, 26), 0.1839, 0.5771, 0.7172, 0.8974, 0.2981, "faba9890"),
("3fba47f290480d1795f2d9f813179bc61844778b", "3fba47f2", datetime(2024, 4, 5), 0.1963, 0.5967, 0.8054, 0.9267, 0.2930, "3fba47f2"),
("abc785646aff61557c7ed4c8850ea1117c65e8ea", "abc78564", datetime(2024, 4, 5), 0.1878, 0.5878, 0.7231, 0.8906, 0.2978, "abc78564"),
]
df = pd.DataFrame(data=data, columns=columns)
data_source = ColumnDataSource(df)
Show code cell source
## Run-time performance
hover_tool = HoverTool(
tooltips=[
# ("index", "$index"),
("git ref", "@tooltip_label"),
# ("date", "@date"),
],
# formatters={
# '@date': 'datetime',
# },
)
p = figure(
title="5x5 Wind Farm Timing Test",
x_axis_type="datetime",
tooltips=hover_tool.tooltips,
width=600,
height=450
)
p.line("date", "jensen", source=data_source, color=COLORS[0], legend_label="jensen")
p.scatter("date", "jensen", source=data_source, line_color=COLORS[0], fill_color=COLORS[0], size=6, legend_label="jensen")
p.line("date", "gauss", source=data_source, color=COLORS[1], legend_label="gauss")
p.scatter("date", "gauss", source=data_source, line_color=COLORS[1], fill_color=COLORS[1], size=6, legend_label="gauss")
p.line("date", "gch", source=data_source, color=COLORS[2], legend_label="gch")
p.scatter("date", "gch", source=data_source, line_color=COLORS[2], fill_color=COLORS[2], size=6, legend_label="gch")
p.line("date", "cc", source=data_source, color=COLORS[3], legend_label="cc")
p.scatter("date", "cc", source=data_source, line_color=COLORS[3], fill_color=COLORS[3], size=6, legend_label="cc")
p.line("date", "emgauss", source=data_source, color=COLORS[4], legend_label="cc")
p.scatter("date", "emgauss", source=data_source, line_color=COLORS[4], fill_color=COLORS[4], size=6, legend_label="empirical gauss")
p.xaxis.axis_label = "Commit date"
p.yaxis.axis_label = "Time to solution (s)"
p.legend.location = "bottom_left"
p.legend.click_policy="mute"
p.legend.border_line_width = 1
p.legend.border_line_color = "black"
p.legend.border_line_alpha = 0.5
show(p)