Software Attributes#

The sections here tabulate the software attribute database. Each attribute (column) is described in the Attribute Schema. Some columns contain lists of strings which means that they cannot be fully sorted. Instead, they can be filtered by searching for a string with the following Sequel query:

SELECT * FROM $table WHERE <column name> LIKE '%<search string>%';

-- For example:
SELECT * FROM $table WHERE system_location LIKE '%land%';
Hide code cell content
from pathlib import Path
import yaml
import datapane as dp
import pandas as pd

software_attr_dir = Path("..", "..", "software_attributes")
model_list_inputs = yaml.safe_load( open(software_attr_dir / "database_list.yaml", "r") )
models = model_list_inputs["active"]

model_attributes_map = {
    model: yaml.safe_load( open(Path("..", "..", "software_attributes", "database", f"{model}.yaml"), "r") )
    for model in models
}

df = pd.DataFrame.from_dict(model_attributes_map, orient="index")
# print(list(df.columns))
# print(df)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[1], line 3
      1 from pathlib import Path
      2 import yaml
----> 3 import datapane as dp
      4 import pandas as pd
      6 software_attr_dir = Path("..", "..", "software_attributes")

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/datapane/__init__.py:21
     17 __version__ = "0.17.0"
     20 # Public API re-exports
---> 21 from .client import (  # isort:skip  otherwise circular import issue
     22     IN_PYTEST,
     23     DPClientError,
     24     DPMode,
     25     enable_logging,
     26     print_debug_info,
     27     get_dp_mode,
     28     set_dp_mode,
     29 )  # isort:skip  otherwise circular import issue
     31 from .blocks import (
     32     HTML,
     33     Attachment,
   (...)
     51     wrap_block,
     52 )
     53 from .processors import (
     54     FontChoice,
     55     Formatting,
   (...)
     61     upload_report,
     62 )

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/datapane/client/__init__.py:4
      1 # Copyright 2020 StackHut Limited (trading as Datapane)
      2 # SPDX-License-Identifier: Apache-2.0
      3 # flake8: noqa:F401
----> 4 from .exceptions import DPClientError
      5 from .utils import IN_PYTEST, DPMode, display_msg, enable_logging, get_dp_mode, log, print_debug_info, set_dp_mode
      7 # from .config import init  # isort:skip  otherwise circular import issue

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/datapane/client/exceptions.py:1
----> 1 from datapane.common import DPError
      4 def add_help_text(x: str) -> str:
      5     return f"{x}\nPlease run with `dp.enable_logging()`, restart your Jupyter kernel/Python instance, and/or visit https://www.github.com/datapane/datapane"

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/datapane/common/__init__.py:8
      1 """
      2 Shared code used by client and dp-server
      3 NOTE - this module should not depend on any client or server specific code and is imported first
      4 """
      5 # Copyright 2020 StackHut Limited (trading as Datapane)
      6 # SPDX-License-Identifier: Apache-2.0
      7 # flake8: noqa:F401
----> 8 from .datafiles import ArrowFormat
      9 from .dp_types import (
     10     ARROW_EXT,
     11     ARROW_MIMETYPE,
   (...)
     31     log,
     32 )
     33 from .ops_utils import pushd, timestamp

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/datapane/common/datafiles.py:6
      3 import enum
      4 from typing import IO, Dict, Type, Union
----> 6 import pandas as pd
      7 import pyarrow as pa
      8 from pandas.errors import ParserError

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/pandas/__init__.py:22
     19 del _hard_dependencies, _dependency, _missing_dependencies
     21 # numpy compat
---> 22 from pandas.compat import is_numpy_dev as _is_numpy_dev  # pyright: ignore # noqa:F401
     24 try:
     25     from pandas._libs import hashtable as _hashtable, lib as _lib, tslib as _tslib

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/pandas/compat/__init__.py:18
     15 from typing import TYPE_CHECKING
     17 from pandas._typing import F
---> 18 from pandas.compat.numpy import (
     19     is_numpy_dev,
     20     np_version_under1p21,
     21 )
     22 from pandas.compat.pyarrow import (
     23     pa_version_under1p01,
     24     pa_version_under2p0,
   (...)
     31     pa_version_under9p0,
     32 )
     34 if TYPE_CHECKING:

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/pandas/compat/numpy/__init__.py:4
      1 """ support numpy compatibility across versions """
      2 import numpy as np
----> 4 from pandas.util.version import Version
      6 # numpy versioning
      7 _np_version = np.__version__

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/pandas/util/__init__.py:2
      1 # pyright: reportUnusedImport = false
----> 2 from pandas.util._decorators import (  # noqa:F401
      3     Appender,
      4     Substitution,
      5     cache_readonly,
      6 )
      8 from pandas.core.util.hashing import (  # noqa:F401
      9     hash_array,
     10     hash_pandas_object,
     11 )
     14 def __getattr__(name):

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/pandas/util/_decorators.py:14
      6 from typing import (
      7     Any,
      8     Callable,
      9     Mapping,
     10     cast,
     11 )
     12 import warnings
---> 14 from pandas._libs.properties import cache_readonly
     15 from pandas._typing import (
     16     F,
     17     T,
     18 )
     19 from pandas.util._exceptions import find_stack_level

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/pandas/_libs/__init__.py:13
      1 __all__ = [
      2     "NaT",
      3     "NaTType",
   (...)
      9     "Interval",
     10 ]
---> 13 from pandas._libs.interval import Interval
     14 from pandas._libs.tslibs import (
     15     NaT,
     16     NaTType,
   (...)
     21     iNaT,
     22 )

File /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/pandas/_libs/interval.pyx:1, in init pandas._libs.interval()

ValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject

General#

Hide code cell source
general_df = df[[
    "github_account",
    "github_repo",
    "primary_uses",
    "active_funding",
    "development_status",
    "programming_language",
    "license_type",
    "data_collection_methods",
    "last_release_date"
]]
dp.DataTable(general_df)

Turbine Modeling#

Hide code cell source
turbine_df = df[[
    "scope",
    "system_location",
    "time_domain",
    "turbine_model",
    "loads",
    "design_optimization",
    "costs",
]]
turbine_df = turbine_df[ pd.DataFrame( turbine_df["scope"].tolist() ).isin( ["turbine", "any"] ).any(1).values ]
dp.DataTable(turbine_df)

Farm Modeling#

Hide code cell source
farm_df = df[[
    "scope",
    "system_location",
    "time_domain",
    "turbine_model",
    "wake_model",
    "loads",
    "design_optimization",
    "costs",
]]
farm_df = farm_df[ pd.DataFrame( farm_df["scope"].tolist() ).isin( ["farm", "any"] ).any(1).values ]
dp.DataTable(farm_df.dropna())

Cost Modeling#

Hide code cell source
cost_df = df[[
    "scope",
    "system_location",
    "design_optimization",
    "costs",
    "tags",
]]
cost_df = cost_df[ cost_df["costs"] == True]
dp.DataTable(cost_df.dropna())

Full Suite Modeling Comparison#

Hide code cell source
modeling_df = df[[
    "scope",
    "system_location",
    "time_domain",
    "turbine_model",
    "wake_model",
    "loads",
    "design_optimization",
    "costs",
    "tags",
]]
dp.DataTable(modeling_df)

Distribution#

Hide code cell source
distribution_df = df[[
    "supported_platforms",
    "package_manager",
    "package_manager_url",
    "installation_complexity",
]]
dp.DataTable(distribution_df)

Documentation#

Hide code cell source
documentation_df = df[[
    "documentation_url",
    "has_user_docs",
    "has_developer_docs",
    "has_api_docs",
    "has_cli_docs",
    "has_installation_docs",
    "has_getting_started_docs",
    "has_examples_tutorials",
    "has_design_intent_statement",
    "readability",
    "project_coverage",
]]
dp.DataTable(documentation_df)

Testing#

Hide code cell source
testing_df = df[[
    "testing_framework",
    "continuous_testing",
    "test_coverage",
    "test_documentation",
    "performance_tests",
]]
dp.DataTable(testing_df)

Interfaces#

Hide code cell source
interfaces_df = df[[
    "first_class_ui",
    "has_cli",
    "language_interfaces",
    "feature_accessibility",
]]
dp.DataTable(interfaces_df)

Input / Output#

Hide code cell source
io_df = df[[
    "filetypes",
    "file_structure_stability",
]]
dp.DataTable(io_df)