diff --git a/.gitignore b/.gitignore
index 6e96d8144..79f7be6ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -128,3 +128,6 @@ target/
# mkdocs intemediate files
docs/generated
+
+docs/CONTRIBUTING.md
+docs/index.md
diff --git a/auto_doc.py b/auto_doc.py
index 1fd5b40f8..91d3f358d 100644
--- a/auto_doc.py
+++ b/auto_doc.py
@@ -19,6 +19,14 @@
import keras_autodoc
+JSON_METHODS = [
+ "extract_fields_from_json",
+ "from_json",
+ "from_response_json",
+ "json",
+ "update_from_response_json",
+]
+
PAGES = {
"api/login.md": {
"login": ["hopsworks.login"],
@@ -181,18 +189,509 @@
"hopsworks.core.opensearch_api.OpenSearchApi"
),
},
+ "api/connection_api.md": {
+ "connection": ["hsfs.connection.Connection"],
+ "connection_properties": keras_autodoc.get_properties(
+ "hsfs.connection.Connection"
+ ),
+ "connection_methods": keras_autodoc.get_methods("hsfs.connection.Connection"),
+ },
+ "api/spine_group_api.md": {
+ "fg": ["hsfs.feature_group.SpineGroup"],
+ "fg_create": ["hsfs.feature_store.FeatureStore.get_or_create_spine_group"],
+ "fg_get": ["hsfs.feature_store.FeatureStore.get_or_create_spine_group"],
+ "fg_properties": keras_autodoc.get_properties(
+ "hsfs.feature_group.SpineGroup",
+ exclude=[
+ "expectation_suite",
+ "location",
+ "online_enabled",
+ "statistics",
+ "statistics_config",
+ "subject",
+ ],
+ ),
+ "fg_methods": keras_autodoc.get_methods(
+ "hsfs.feature_group.SpineGroup",
+ exclude=[
+ "append_features",
+ "compute_statistics",
+ "delete_expectation_suite",
+ "from_response_json",
+ "get_all_validation_reports",
+ "get_expectation_suite",
+ "get_latest_validation_report",
+ "get_statistics",
+ "get_validation_history",
+ "save_expectation_suite",
+ "save_validation_report",
+ "update_from_response_json",
+ "update_statistics_config",
+ "validate",
+ ],
+ ),
+ },
+ "api/training_dataset_api.md": {
+ "td": ["hsfs.training_dataset.TrainingDataset"],
+ "td_create": ["hsfs.feature_store.FeatureStore.create_training_dataset"],
+ "td_get": ["hsfs.feature_store.FeatureStore.get_training_dataset"],
+ "td_properties": keras_autodoc.get_properties(
+ "hsfs.training_dataset.TrainingDataset"
+ ),
+ "td_methods": keras_autodoc.get_methods(
+ "hsfs.training_dataset.TrainingDataset"
+ ),
+ },
+ "api/feature_view_api.md": {
+ "fv": ["hsfs.feature_view.FeatureView"],
+ "fv_create": ["hsfs.feature_store.FeatureStore.create_feature_view"],
+ "fv_get": ["hsfs.feature_store.FeatureStore.get_feature_view"],
+ "fvs_get": ["hsfs.feature_store.FeatureStore.get_feature_views"],
+ "fv_properties": keras_autodoc.get_properties("hsfs.feature_view.FeatureView"),
+ "fv_methods": keras_autodoc.get_methods("hsfs.feature_view.FeatureView"),
+ },
+ "api/feature_api.md": {
+ "feature": ["hsfs.feature.Feature"],
+ "feature_properties": keras_autodoc.get_properties("hsfs.feature.Feature"),
+ "feature_methods": keras_autodoc.get_methods("hsfs.feature.Feature"),
+ },
+ "api/expectation_suite_api.md": {
+ "expectation_suite": ["hsfs.expectation_suite.ExpectationSuite"],
+ "expectation_suite_attach": [
+ "hsfs.feature_group.FeatureGroup.save_expectation_suite"
+ ],
+ "single_expectation_api": [
+ "hsfs.expectation_suite.ExpectationSuite.add_expectation",
+ "hsfs.expectation_suite.ExpectationSuite.replace_expectation",
+ "hsfs.expectation_suite.ExpectationSuite.remove_expectation",
+ ],
+ "expectation_suite_properties": keras_autodoc.get_properties(
+ "hsfs.expectation_suite.ExpectationSuite"
+ ),
+ "expectation_suite_methods": keras_autodoc.get_methods(
+ "hsfs.expectation_suite.ExpectationSuite"
+ ),
+ },
+ "api/feature_store_api.md": {
+ "fs": ["hsfs.feature_store.FeatureStore"],
+ "fs_get": ["hsfs.connection.Connection.get_feature_store"],
+ "fs_properties": keras_autodoc.get_properties(
+ "hsfs.feature_store.FeatureStore"
+ ),
+ "fs_methods": keras_autodoc.get_methods("hsfs.feature_store.FeatureStore"),
+ },
+ "api/feature_group_api.md": {
+ "fg": ["hsfs.feature_group.FeatureGroup"],
+ "fg_create": [
+ "hsfs.feature_store.FeatureStore.create_feature_group",
+ "hsfs.feature_store.FeatureStore.get_or_create_feature_group",
+ ],
+ "fg_get": ["hsfs.feature_store.FeatureStore.get_feature_group"],
+ "fg_properties": keras_autodoc.get_properties(
+ "hsfs.feature_group.FeatureGroup"
+ ),
+ "fg_methods": keras_autodoc.get_methods("hsfs.feature_group.FeatureGroup"),
+ },
+ "api/external_feature_group_api.md": {
+ "fg": ["hsfs.feature_group.ExternalFeatureGroup"],
+ "fg_create": ["hsfs.feature_store.FeatureStore.create_external_feature_group"],
+ "fg_get": ["hsfs.feature_store.FeatureStore.get_external_feature_group"],
+ "fg_properties": keras_autodoc.get_properties(
+ "hsfs.feature_group.ExternalFeatureGroup"
+ ),
+ "fg_methods": keras_autodoc.get_methods(
+ "hsfs.feature_group.ExternalFeatureGroup"
+ ),
+ },
+ "api/storage_connector_api.md": {
+ "sc_get": [
+ "hsfs.feature_store.FeatureStore.get_storage_connector",
+ "hsfs.feature_store.FeatureStore.get_online_storage_connector",
+ ],
+ "hopsfs_methods": keras_autodoc.get_methods(
+ "hsfs.storage_connector.HopsFSConnector", exclude=["from_response_json"]
+ ),
+ "hopsfs_properties": keras_autodoc.get_properties(
+ "hsfs.storage_connector.HopsFSConnector"
+ ),
+ "s3_methods": keras_autodoc.get_methods(
+ "hsfs.storage_connector.S3Connector", exclude=["from_response_json"]
+ ),
+ "s3_properties": keras_autodoc.get_properties(
+ "hsfs.storage_connector.S3Connector"
+ ),
+ "redshift_methods": keras_autodoc.get_methods(
+ "hsfs.storage_connector.RedshiftConnector", exclude=["from_response_json"]
+ ),
+ "redshift_properties": keras_autodoc.get_properties(
+ "hsfs.storage_connector.RedshiftConnector"
+ ),
+ "adls_methods": keras_autodoc.get_methods(
+ "hsfs.storage_connector.AdlsConnector", exclude=["from_response_json"]
+ ),
+ "adls_properties": keras_autodoc.get_properties(
+ "hsfs.storage_connector.AdlsConnector"
+ ),
+ "snowflake_methods": keras_autodoc.get_methods(
+ "hsfs.storage_connector.SnowflakeConnector", exclude=["from_response_json"]
+ ),
+ "snowflake_properties": keras_autodoc.get_properties(
+ "hsfs.storage_connector.SnowflakeConnector"
+ ),
+ "jdbc_methods": keras_autodoc.get_methods(
+ "hsfs.storage_connector.JdbcConnector", exclude=["from_response_json"]
+ ),
+ "jdbc_properties": keras_autodoc.get_properties(
+ "hsfs.storage_connector.JdbcConnector"
+ ),
+ "gcs_methods": keras_autodoc.get_methods(
+ "hsfs.storage_connector.GcsConnector", exclude=["from_response_json"]
+ ),
+ "gcs_properties": keras_autodoc.get_properties(
+ "hsfs.storage_connector.GcsConnector"
+ ),
+ "bigquery_methods": keras_autodoc.get_methods(
+ "hsfs.storage_connector.BigQueryConnector", exclude=["from_response_json"]
+ ),
+ "bigquery_properties": keras_autodoc.get_properties(
+ "hsfs.storage_connector.BigQueryConnector"
+ ),
+ "kafka_methods": keras_autodoc.get_methods(
+ "hsfs.storage_connector.KafkaConnector", exclude=["from_response_json"]
+ ),
+ "kafka_properties": keras_autodoc.get_properties(
+ "hsfs.storage_connector.KafkaConnector"
+ ),
+ },
+ "api/statistics_config_api.md": {
+ "statistics_config": ["hsfs.statistics_config.StatisticsConfig"],
+ "statistics_config_properties": keras_autodoc.get_properties(
+ "hsfs.statistics_config.StatisticsConfig"
+ ),
+ },
+ "api/transformation_functions_api.md": {
+ "transformation_function": [
+ "hsfs.transformation_function.TransformationFunction"
+ ],
+ "transformation_function_properties": keras_autodoc.get_properties(
+ "hsfs.transformation_function.TransformationFunction"
+ ),
+ "transformation_function_methods": keras_autodoc.get_methods(
+ "hsfs.transformation_function.TransformationFunction",
+ exclude=[
+ "from_response_json",
+ "update_from_response_json",
+ "json",
+ "to_dict",
+ ],
+ ),
+ "create_transformation_function": [
+ "hsfs.feature_store.FeatureStore.create_transformation_function"
+ ],
+ "get_transformation_function": [
+ "hsfs.feature_store.FeatureStore.get_transformation_function"
+ ],
+ "get_transformation_functions": [
+ "hsfs.feature_store.FeatureStore.get_transformation_functions"
+ ],
+ },
+ "api/validation_report_api.md": {
+ "validation_report": ["hsfs.validation_report.ValidationReport"],
+ "validation_report_validate": [
+ "hsfs.feature_group.FeatureGroup.validate",
+ "hsfs.feature_group.FeatureGroup.insert",
+ ],
+ "validation_report_get": [
+ "hsfs.feature_group.FeatureGroup.get_latest_validation_report",
+ "hsfs.feature_group.FeatureGroup.get_all_validation_reports",
+ ],
+ "validation_report_properties": keras_autodoc.get_properties(
+ "hsfs.validation_report.ValidationReport"
+ ),
+ "validation_report_methods": keras_autodoc.get_methods(
+ "hsfs.validation_report.ValidationReport"
+ ),
+ },
+ "api/job.md": {
+ "job_configuration": ["hsfs.core.job_configuration.JobConfiguration"],
+ "job": ["hsfs.core.job.Job"],
+ "job_methods": [
+ "hsfs.core.job.Job.get_state",
+ "hsfs.core.job.Job.get_final_state",
+ ],
+ },
+ "api/query_api.md": {
+ "query_methods": keras_autodoc.get_methods(
+ "hsfs.constructor.query.Query",
+ exclude=["json", "to_dict"],
+ ),
+ "query_properties": keras_autodoc.get_properties(
+ "hsfs.constructor.query.Query"
+ ),
+ },
+ "api/links.md": {
+ "links_properties": keras_autodoc.get_properties(
+ "hsfs.core.explicit_provenance.Links"
+ ),
+ "artifact_properties": keras_autodoc.get_properties(
+ "hsfs.core.explicit_provenance.Artifact"
+ ),
+ },
+ "api/statistics_api.md": {
+ "statistics": ["hsfs.statistics.Statistics"],
+ "statistics_properties": keras_autodoc.get_properties(
+ "hsfs.statistics.Statistics"
+ ),
+ },
+ "api/split_statistics_api.md": {
+ "split_statistics": ["hsfs.split_statistics.SplitStatistics"],
+ "split_statistics_properties": keras_autodoc.get_properties(
+ "hsfs.split_statistics.SplitStatistics"
+ ),
+ },
+ "api/feature_descriptive_statistics_api.md": {
+ "feature_descriptive_statistics": [
+ "hsfs.core.feature_descriptive_statistics.FeatureDescriptiveStatistics"
+ ],
+ "feature_descriptive_statistics_properties": keras_autodoc.get_properties(
+ "hsfs.core.feature_descriptive_statistics.FeatureDescriptiveStatistics"
+ ),
+ },
+ "api/feature_monitoring_config_api.md": {
+ "feature_monitoring_config": [
+ "hsfs.core.feature_monitoring_config.FeatureMonitoringConfig"
+ ],
+ "feature_monitoring_config_properties": keras_autodoc.get_properties(
+ "hsfs.core.feature_monitoring_config.FeatureMonitoringConfig"
+ ),
+ "feature_monitoring_config_methods": keras_autodoc.get_methods(
+ "hsfs.core.feature_monitoring_config.FeatureMonitoringConfig",
+ exclude=[
+ "from_response_json",
+ "update_from_response_json",
+ "json",
+ "to_dict",
+ ],
+ ),
+ # from feature group
+ "feature_monitoring_config_creation_fg": [
+ "hsfs.feature_group.FeatureGroup.create_statistics_monitoring",
+ "hsfs.feature_group.FeatureGroup.create_feature_monitoring",
+ ],
+ # from feature view
+ "feature_monitoring_config_creation_fv": [
+ "hsfs.feature_view.FeatureView.create_statistics_monitoring",
+ "hsfs.feature_view.FeatureView.create_feature_monitoring",
+ ],
+ # retrieval
+ "feature_monitoring_config_retrieval_fg": [
+ "hsfs.feature_group.FeatureGroup.get_feature_monitoring_configs",
+ ],
+ "feature_monitoring_config_retrieval_fv": [
+ "hsfs.feature_view.FeatureView.get_feature_monitoring_configs",
+ ],
+ },
+ "api/feature_monitoring_result_api.md": {
+ "feature_monitoring_result": [
+ "hsfs.core.feature_monitoring_result.FeatureMonitoringResult"
+ ],
+ "feature_monitoring_result_retrieval": [
+ "hsfs.core.feature_monitoring_config.FeatureMonitoringConfig.get_history"
+ ],
+ "feature_monitoring_result_properties": keras_autodoc.get_properties(
+ "hsfs.core.feature_monitoring_result.FeatureMonitoringResult"
+ ),
+ },
+ "api/feature_monitoring_window_config_api.md": {
+ "feature_monitoring_window_config": [
+ "hsfs.core.monitoring_window_config.MonitoringWindowConfig"
+ ],
+ "feature_monitoring_window_config_properties": keras_autodoc.get_properties(
+ "hsfs.core.monitoring_window_config.MonitoringWindowConfig"
+ ),
+ },
+ "api/embedding_index_api.md": {
+ "embedding_index": ["hsfs.embedding.EmbeddingIndex"],
+ "embedding_index_properties": keras_autodoc.get_properties(
+ "hsfs.embedding.EmbeddingIndex"
+ ),
+ "embedding_index_methods": keras_autodoc.get_methods(
+ "hsfs.embedding.EmbeddingIndex", exclude=["from_response_json"]
+ ),
+ },
+ "api/embedding_feature_api.md": {
+ "embedding_feature": ["hsfs.embedding.EmbeddingFeature"],
+ "embedding_feature_properties": keras_autodoc.get_properties(
+ "hsfs.embedding.EmbeddingFeature"
+ ),
+ },
+ "api/similarity_function_type_api.md": {
+ "similarity_function_type": ["hsfs.embedding.SimilarityFunctionType"],
+ },
+ # Model registry
+ "connection_api.md": {
+ "connection": ["hsml.connection.Connection"],
+ "connection_properties": keras_autodoc.get_properties(
+ "hsml.connection.Connection", exclude=["trust_store_path"]
+ ),
+ "connection_methods": keras_autodoc.get_methods("hsml.connection.Connection"),
+ },
+ "model-registry/model_registry_api.md": {
+ "mr_get": ["hsml.connection.Connection.get_model_registry"],
+ "mr_modules": keras_autodoc.get_properties(
+ "hsml.model_registry.ModelRegistry",
+ exclude=[
+ "project_id",
+ "project_name",
+ "model_registry_id",
+ "shared_registry_project_name",
+ ],
+ ),
+ "mr_properties": keras_autodoc.get_properties(
+ "hsml.model_registry.ModelRegistry",
+ exclude=[
+ "python",
+ "sklearn",
+ "tensorflow",
+ "torch",
+ ],
+ ),
+ "mr_methods": keras_autodoc.get_methods(
+ "hsml.model_registry.ModelRegistry", exclude=["from_response_json"]
+ ),
+ },
+ "model-registry/model_api.md": {
+ "ml_create_tf": ["hsml.model_registry.ModelRegistry.tensorflow.create_model"],
+ "ml_create_th": ["hsml.model_registry.ModelRegistry.torch.create_model"],
+ "ml_create_sl": ["hsml.model_registry.ModelRegistry.sklearn.create_model"],
+ "ml_create_py": ["hsml.model_registry.ModelRegistry.python.create_model"],
+ "ml_get": ["hsml.model_registry.ModelRegistry.get_model"],
+ "ml_properties": keras_autodoc.get_properties("hsml.model.Model"),
+ "ml_methods": keras_autodoc.get_methods(
+ "hsml.model.Model",
+ exclude=[
+ "from_response_json",
+ "json",
+ "to_dict",
+ "update_from_response_json",
+ ],
+ ),
+ },
+ "model-registry/model_schema.md": {},
+ "model-registry/model_schema_api.md": {
+ "schema": ["hsml.schema.Schema"],
+ "schema_dict": ["hsml.schema.Schema.to_dict"],
+ "model_schema": ["hsml.model_schema.ModelSchema"],
+ "model_schema_dict": ["hsml.model_schema.ModelSchema.to_dict"],
+ },
+ "model-registry/links.md": {
+ "links_properties": keras_autodoc.get_properties(
+ "hsml.core.explicit_provenance.Links"
+ ),
+ "artifact_properties": keras_autodoc.get_properties(
+ "hsml.core.explicit_provenance.Artifact"
+ ),
+ },
+ # Model Serving
+ "model-serving/model_serving_api.md": {
+ "ms_get": ["hsml.connection.Connection.get_model_serving"],
+ "ms_properties": keras_autodoc.get_properties(
+ "hsml.model_serving.ModelServing"
+ ),
+ "ms_methods": keras_autodoc.get_methods(
+ "hsml.model_serving.ModelServing", exclude=["from_response_json"]
+ ),
+ },
+ "model-serving/deployment_api.md": {
+ "ms_get_model_serving": ["hsml.connection.Connection.get_model_serving"],
+ "ms_get_deployments": [
+ "hsml.model_serving.ModelServing.get_deployment",
+ "hsml.model_serving.ModelServing.get_deployment_by_id",
+ "hsml.model_serving.ModelServing.get_deployments",
+ ],
+ "ms_create_deployment": ["hsml.model_serving.ModelServing.create_deployment"],
+ "m_deploy": ["hsml.model.Model.deploy"],
+ "p_deploy": ["hsml.predictor.Predictor.deploy"],
+ "dep_properties": keras_autodoc.get_properties("hsml.deployment.Deployment"),
+ "dep_methods": keras_autodoc.get_methods(
+ "hsml.deployment.Deployment", exclude=JSON_METHODS + ["from_predictor"]
+ ),
+ },
+ "model-serving/predictor_api.md": {
+ "ms_get_model_serving": ["hsml.connection.Connection.get_model_serving"],
+ "ms_create_predictor": ["hsml.model_serving.ModelServing.create_predictor"],
+ "pred_properties": keras_autodoc.get_properties("hsml.predictor.Predictor"),
+ "pred_methods": keras_autodoc.get_methods(
+ "hsml.predictor.Predictor",
+ exclude=JSON_METHODS + ["for_model"],
+ ),
+ },
+ "model-serving/transformer_api.md": {
+ "ms_get_model_serving": ["hsml.connection.Connection.get_model_serving"],
+ "ms_create_transformer": ["hsml.model_serving.ModelServing.create_transformer"],
+ "trans_properties": keras_autodoc.get_properties(
+ "hsml.transformer.Transformer"
+ ),
+ "trans_methods": keras_autodoc.get_methods(
+ "hsml.transformer.Transformer", exclude=JSON_METHODS
+ ),
+ },
+ "model-serving/inference_logger_api.md": {
+ "il": ["hsml.inference_logger.InferenceLogger"],
+ "il_properties": keras_autodoc.get_properties(
+ "hsml.inference_logger.InferenceLogger"
+ ),
+ "il_methods": keras_autodoc.get_methods(
+ "hsml.inference_logger.InferenceLogger", exclude=JSON_METHODS
+ ),
+ },
+ "model-serving/inference_batcher_api.md": {
+ "ib": ["hsml.inference_batcher.InferenceBatcher"],
+ "ib_properties": keras_autodoc.get_properties(
+ "hsml.inference_batcher.InferenceBatcher"
+ ),
+ "ib_methods": keras_autodoc.get_methods(
+ "hsml.inference_batcher.InferenceBatcher", exclude=JSON_METHODS
+ ),
+ },
+ "model-serving/resources_api.md": {
+ "res": ["hsml.resources.Resources"],
+ "res_properties": keras_autodoc.get_properties("hsml.resources.Resources"),
+ "res_methods": keras_autodoc.get_methods(
+ "hsml.resources.Resources", exclude=JSON_METHODS
+ ),
+ },
+ "model-serving/predictor_state_api.md": {
+ "ps_get": ["hsml.deployment.Deployment.get_state"],
+ "ps_properties": keras_autodoc.get_properties(
+ "hsml.predictor_state.PredictorState"
+ ),
+ "ps_methods": keras_autodoc.get_methods(
+ "hsml.predictor_state.PredictorState", exclude=JSON_METHODS
+ ),
+ },
+ "model-serving/predictor_state_condition_api.md": {
+ "psc_get": ["hsml.predictor_state.PredictorState.condition"],
+ "psc_properties": keras_autodoc.get_properties(
+ "hsml.predictor_state_condition.PredictorStateCondition"
+ ),
+ "psc_methods": keras_autodoc.get_methods(
+ "hsml.predictor_state_condition.PredictorStateCondition",
+ exclude=JSON_METHODS,
+ ),
+ },
}
hw_dir = pathlib.Path(__file__).resolve().parents[0]
if "GITHUB_SHA" in os.environ:
commit_sha = os.environ["GITHUB_SHA"]
project_url = (
- f"https://github.com/logicalclocks/feature-store-api/tree/{commit_sha}/python"
+ f"https://github.com/logicalclocks/hopsworks-api/tree/{commit_sha}/python"
)
else:
branch_name = os.environ.get("GITHUB_BASE_REF", "master")
project_url = (
- f"https://github.com/logicalclocks/feature-store-api/blob/{branch_name}/python"
+ f"https://github.com/logicalclocks/hopsworks-api/blob/{branch_name}/python"
)
@@ -202,7 +701,13 @@ def generate(dest_dir):
project_url=project_url,
template_dir="./docs/templates",
titles_size="###",
- extra_aliases={},
+ extra_aliases={
+ "hsfs.core.query.Query": "hsfs.Query",
+ "hsfs.storage_connector.StorageConnector": "hsfs.StorageConnector",
+ "hsfs.statistics_config.StatisticsConfig": "hsfs.StatisticsConfig",
+ "hsfs.training_dataset_feature.TrainingDatasetFeature": "hsfs.TrainingDatasetFeature",
+ "pandas.core.frame.DataFrame": "pandas.DataFrame",
+ },
max_signature_line_length=100,
)
shutil.copyfile(hw_dir / "CONTRIBUTING.md", dest_dir / "CONTRIBUTING.md")
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
deleted file mode 100644
index b97326e6f..000000000
--- a/docs/CONTRIBUTING.md
+++ /dev/null
@@ -1,215 +0,0 @@
-## Python development setup
----
-
-- Fork and clone the repository
-
-- Create a new Python environment with your favourite environment manager, e.g. virtualenv or conda
-
-- Install repository in editable mode with development dependencies:
-
- ```bash
- cd python
- pip install -e ".[dev]"
- ```
-
-- Install [pre-commit](https://pre-commit.com/) and then activate its hooks. pre-commit is a framework for managing and maintaining multi-language pre-commit hooks. The Feature Store uses pre-commit to ensure code-style and code formatting through [ruff](https://docs.astral.sh/ruff/). Run the following commands from the `python` directory:
-
- ```bash
- cd python
- pip install --user pre-commit
- pre-commit install
- ```
-
- Afterwards, pre-commit will run whenever you commit.
-
-- To run formatting and code-style separately, you can configure your IDE, such as VSCode, to use `ruff`, or run it via the command line:
-
- ```bash
- # linting
- ruff check python --fix
- # formatting
- ruff format python
- ```
-
-### Python documentation
-
-We follow a few best practices for writing the Python documentation:
-
-1. Use the google docstring style:
-
- ```python
- """[One Line Summary]
-
- [Extended Summary]
-
- [!!! example
- import xyz
- ]
-
- # Arguments
- arg1: Type[, optional]. Description[, defaults to `default`]
- arg2: Type[, optional]. Description[, defaults to `default`]
-
- # Returns
- Type. Description.
-
- # Raises
- Exception. Description.
- """
- ```
-
- If Python 3 type annotations are used, they are inserted automatically.
-
-
-2. Hopsworks entity engine methods (e.g. ExecutionEngine etc.) only require a single line docstring.
-3. Private REST Api implementations (e.g. GitRemoteApi etc.) should be fully documented with docstrings without defaults.
-4. Public Api such as metadata objects and public REST Api implementations should be fully documented with defaults.
-
-#### Setup and Build Documentation
-
-We use `mkdocs` together with `mike` ([for versioning](https://github.com/jimporter/mike/)) to build the documentation and a plugin called `keras-autodoc` to auto generate Python API documentation from docstrings.
-
-**Background about `mike`:**
- `mike` builds the documentation and commits it as a new directory to the gh-pages branch. Each directory corresponds to one version of the documentation. Additionally, `mike` maintains a json in the root of gh-pages with the mappings of versions/aliases for each of the directories available. With aliases you can define extra names like `dev` or `latest`, to indicate stable and unstable releases.
-
-1. Currently we are using our own version of `keras-autodoc`
-
- ```bash
- pip install git+https://github.com/logicalclocks/keras-autodoc
- ```
-
-2. Install HOPSWORKS with `docs` extras:
-
- ```bash
- pip install -e .[dev,docs]
- ```
-
-3. To build the docs, first run the auto doc script:
-
- ```bash
- cd ..
- python auto_doc.py
- ```
-
-##### Option 1: Build only current version of docs
-
-4. Either build the docs, or serve them dynamically:
-
- Note: Links and pictures might not resolve properly later on when checking with this build.
- The reason for that is that the docs are deployed with versioning on docs.hopsworks.ai and
- therefore another level is added to all paths, e.g. `docs.hopsworks.ai/[version-or-alias]`.
- Using relative links should not be affected by this, however, building the docs with version
- (Option 2) is recommended.
-
- ```bash
- mkdocs build
- # or
- mkdocs serve
- ```
-
-##### Option 2 (Preferred): Build multi-version doc with `mike`
-
-###### Versioning on docs.hopsworks.ai
-
-On docs.hopsworks.ai we implement the following versioning scheme:
-
-- current master branches (e.g. of hopsworks corresponding to master of Hopsworks): rendered as current Hopsworks snapshot version, e.g. **3.1.0-SNAPSHOT [dev]**, where `dev` is an alias to indicate that this is an unstable version.
-- the latest release: rendered with full current version, e.g. **3.0.1 [latest]** with `latest` alias to indicate that this is the latest stable release.
-- previous stable releases: rendered without alias, e.g. **3.0.0**.
-
-###### Build Instructions
-
-4. For this you can either checkout and make a local copy of the `upstream/gh-pages` branch, where
-`mike` maintains the current state of docs.hopsworks.ai, or just build documentation for the branch you are updating:
-
- Building *one* branch:
-
- Checkout your dev branch with modified docs:
- ```bash
- git checkout [dev-branch]
- ```
-
- Generate API docs if necessary:
- ```bash
- python auto_doc.py
- ```
-
- Build docs with a version and alias
- ```bash
- mike deploy [version] [alias] --update-alias
-
- # for example, if you are updating documentation to be merged to master,
- # which will become the new SNAPSHOT version:
- mike deploy 3.1.0-SNAPSHOT dev --update-alias
-
- # if you are updating docs of the latest stable release branch
- mike deploy [version] latest --update-alias
-
- # if you are updating docs of a previous stable release branch
- mike deploy [version]
- ```
-
- If no gh-pages branch existed in your local repository, this will have created it.
-
- **Important**: If no previous docs were built, you will have to choose a version as default to be loaded as index, as follows
-
- ```bash
- mike set-default [version-or-alias]
- ```
-
- You can now checkout the gh-pages branch and serve:
- ```bash
- git checkout gh-pages
- mike serve
- ```
-
- You can also list all available versions/aliases:
- ```bash
- mike list
- ```
-
- Delete and reset your local gh-pages branch:
- ```bash
- mike delete --all
-
- # or delete single version
- mike delete [version-or-alias]
- ```
-
-#### Adding new API documentation
-
-To add new documentation for APIs, you need to add information about the method/class to document to the `auto_doc.py` script:
-
-```python
-PAGES = {
- "connection.md": [
- "hopsworks.connection.Connection.connection"
- ]
- "new_template.md": [
- "module",
- "xyz.asd"
- ]
-}
-```
-
-Now you can add a template markdown file to the `docs/templates` directory with the name you specified in the auto-doc script. The `new_template.md` file should contain a tag to identify the place at which the API documentation should be inserted:
-
-```
-## The XYZ package
-
-{{module}}
-
-Some extra content here.
-
-!!! example
- ```python
- import xyz
- ```
-
-{{xyz.asd}}
-```
-
-Finally, run the `auto_doc.py` script, as decribed above, to update the documentation.
-
-For information about Markdown syntax and possible Admonitions/Highlighting etc. see
-the [Material for Mkdocs themes reference documentation](https://squidfunk.github.io/mkdocs-material/reference/abbreviations/).
diff --git a/hsfs/docs/assets/images/hopsworks-logo.png b/docs/assets/images/hopsworks-logo.png
similarity index 100%
rename from hsfs/docs/assets/images/hopsworks-logo.png
rename to docs/assets/images/hopsworks-logo.png
diff --git a/hsfs/docs/templates/api/connection_api.md b/docs/templates/api/connection_api.md
similarity index 100%
rename from hsfs/docs/templates/api/connection_api.md
rename to docs/templates/api/connection_api.md
diff --git a/hsfs/docs/templates/api/embedding_feature_api.md b/docs/templates/api/embedding_feature_api.md
similarity index 100%
rename from hsfs/docs/templates/api/embedding_feature_api.md
rename to docs/templates/api/embedding_feature_api.md
diff --git a/hsfs/docs/templates/api/embedding_index_api.md b/docs/templates/api/embedding_index_api.md
similarity index 100%
rename from hsfs/docs/templates/api/embedding_index_api.md
rename to docs/templates/api/embedding_index_api.md
diff --git a/hsfs/docs/templates/api/expectation_api.md b/docs/templates/api/expectation_api.md
similarity index 100%
rename from hsfs/docs/templates/api/expectation_api.md
rename to docs/templates/api/expectation_api.md
diff --git a/hsfs/docs/templates/api/expectation_suite_api.md b/docs/templates/api/expectation_suite_api.md
similarity index 100%
rename from hsfs/docs/templates/api/expectation_suite_api.md
rename to docs/templates/api/expectation_suite_api.md
diff --git a/hsfs/docs/templates/api/external_feature_group_api.md b/docs/templates/api/external_feature_group_api.md
similarity index 100%
rename from hsfs/docs/templates/api/external_feature_group_api.md
rename to docs/templates/api/external_feature_group_api.md
diff --git a/hsfs/docs/templates/api/feature_api.md b/docs/templates/api/feature_api.md
similarity index 100%
rename from hsfs/docs/templates/api/feature_api.md
rename to docs/templates/api/feature_api.md
diff --git a/hsfs/docs/templates/api/feature_descriptive_statistics_api.md b/docs/templates/api/feature_descriptive_statistics_api.md
similarity index 100%
rename from hsfs/docs/templates/api/feature_descriptive_statistics_api.md
rename to docs/templates/api/feature_descriptive_statistics_api.md
diff --git a/hsfs/docs/templates/api/feature_group_api.md b/docs/templates/api/feature_group_api.md
similarity index 100%
rename from hsfs/docs/templates/api/feature_group_api.md
rename to docs/templates/api/feature_group_api.md
diff --git a/hsfs/docs/templates/api/feature_monitoring_config_api.md b/docs/templates/api/feature_monitoring_config_api.md
similarity index 100%
rename from hsfs/docs/templates/api/feature_monitoring_config_api.md
rename to docs/templates/api/feature_monitoring_config_api.md
diff --git a/hsfs/docs/templates/api/feature_monitoring_result_api.md b/docs/templates/api/feature_monitoring_result_api.md
similarity index 100%
rename from hsfs/docs/templates/api/feature_monitoring_result_api.md
rename to docs/templates/api/feature_monitoring_result_api.md
diff --git a/hsfs/docs/templates/api/feature_monitoring_window_config_api.md b/docs/templates/api/feature_monitoring_window_config_api.md
similarity index 100%
rename from hsfs/docs/templates/api/feature_monitoring_window_config_api.md
rename to docs/templates/api/feature_monitoring_window_config_api.md
diff --git a/hsfs/docs/templates/api/feature_store_api.md b/docs/templates/api/feature_store_api.md
similarity index 100%
rename from hsfs/docs/templates/api/feature_store_api.md
rename to docs/templates/api/feature_store_api.md
diff --git a/hsfs/docs/templates/api/feature_view_api.md b/docs/templates/api/feature_view_api.md
similarity index 100%
rename from hsfs/docs/templates/api/feature_view_api.md
rename to docs/templates/api/feature_view_api.md
diff --git a/hsfs/docs/templates/api/job.md b/docs/templates/api/job.md
similarity index 100%
rename from hsfs/docs/templates/api/job.md
rename to docs/templates/api/job.md
diff --git a/hsfs/docs/templates/api/links.md b/docs/templates/api/links.md
similarity index 100%
rename from hsfs/docs/templates/api/links.md
rename to docs/templates/api/links.md
diff --git a/hsfs/docs/templates/api/query_api.md b/docs/templates/api/query_api.md
similarity index 100%
rename from hsfs/docs/templates/api/query_api.md
rename to docs/templates/api/query_api.md
diff --git a/hsfs/docs/templates/api/rule_api.md b/docs/templates/api/rule_api.md
similarity index 100%
rename from hsfs/docs/templates/api/rule_api.md
rename to docs/templates/api/rule_api.md
diff --git a/hsfs/docs/templates/api/rule_definition_api.md b/docs/templates/api/rule_definition_api.md
similarity index 100%
rename from hsfs/docs/templates/api/rule_definition_api.md
rename to docs/templates/api/rule_definition_api.md
diff --git a/hsfs/docs/templates/api/similarity_function_type_api.md b/docs/templates/api/similarity_function_type_api.md
similarity index 100%
rename from hsfs/docs/templates/api/similarity_function_type_api.md
rename to docs/templates/api/similarity_function_type_api.md
diff --git a/hsfs/docs/templates/api/spine_group_api.md b/docs/templates/api/spine_group_api.md
similarity index 100%
rename from hsfs/docs/templates/api/spine_group_api.md
rename to docs/templates/api/spine_group_api.md
diff --git a/hsfs/docs/templates/api/split_statistics_api.md b/docs/templates/api/split_statistics_api.md
similarity index 100%
rename from hsfs/docs/templates/api/split_statistics_api.md
rename to docs/templates/api/split_statistics_api.md
diff --git a/hsfs/docs/templates/api/statistics_api.md b/docs/templates/api/statistics_api.md
similarity index 100%
rename from hsfs/docs/templates/api/statistics_api.md
rename to docs/templates/api/statistics_api.md
diff --git a/hsfs/docs/templates/api/statistics_config_api.md b/docs/templates/api/statistics_config_api.md
similarity index 100%
rename from hsfs/docs/templates/api/statistics_config_api.md
rename to docs/templates/api/statistics_config_api.md
diff --git a/hsfs/docs/templates/api/storage_connector_api.md b/docs/templates/api/storage_connector_api.md
similarity index 100%
rename from hsfs/docs/templates/api/storage_connector_api.md
rename to docs/templates/api/storage_connector_api.md
diff --git a/hsfs/docs/templates/api/training_dataset_api.md b/docs/templates/api/training_dataset_api.md
similarity index 100%
rename from hsfs/docs/templates/api/training_dataset_api.md
rename to docs/templates/api/training_dataset_api.md
diff --git a/hsfs/docs/templates/api/transformation_functions_api.md b/docs/templates/api/transformation_functions_api.md
similarity index 100%
rename from hsfs/docs/templates/api/transformation_functions_api.md
rename to docs/templates/api/transformation_functions_api.md
diff --git a/hsfs/docs/templates/api/validation_api.md b/docs/templates/api/validation_api.md
similarity index 100%
rename from hsfs/docs/templates/api/validation_api.md
rename to docs/templates/api/validation_api.md
diff --git a/hsfs/docs/templates/api/validation_report_api.md b/docs/templates/api/validation_report_api.md
similarity index 100%
rename from hsfs/docs/templates/api/validation_report_api.md
rename to docs/templates/api/validation_report_api.md
diff --git a/hsml/docs/templates/connection_api.md b/docs/templates/connection_api.md
similarity index 100%
rename from hsml/docs/templates/connection_api.md
rename to docs/templates/connection_api.md
diff --git a/hsml/docs/templates/model-registry/links.md b/docs/templates/model-registry/links.md
similarity index 100%
rename from hsml/docs/templates/model-registry/links.md
rename to docs/templates/model-registry/links.md
diff --git a/hsml/docs/templates/model-registry/model_api.md b/docs/templates/model-registry/model_api.md
similarity index 100%
rename from hsml/docs/templates/model-registry/model_api.md
rename to docs/templates/model-registry/model_api.md
diff --git a/hsml/docs/templates/model-registry/model_registry_api.md b/docs/templates/model-registry/model_registry_api.md
similarity index 100%
rename from hsml/docs/templates/model-registry/model_registry_api.md
rename to docs/templates/model-registry/model_registry_api.md
diff --git a/hsml/docs/templates/model-registry/model_schema_api.md b/docs/templates/model-registry/model_schema_api.md
similarity index 100%
rename from hsml/docs/templates/model-registry/model_schema_api.md
rename to docs/templates/model-registry/model_schema_api.md
diff --git a/hsml/docs/templates/model-serving/deployment_api.md b/docs/templates/model-serving/deployment_api.md
similarity index 100%
rename from hsml/docs/templates/model-serving/deployment_api.md
rename to docs/templates/model-serving/deployment_api.md
diff --git a/hsml/docs/templates/model-serving/inference_batcher_api.md b/docs/templates/model-serving/inference_batcher_api.md
similarity index 100%
rename from hsml/docs/templates/model-serving/inference_batcher_api.md
rename to docs/templates/model-serving/inference_batcher_api.md
diff --git a/hsml/docs/templates/model-serving/inference_logger_api.md b/docs/templates/model-serving/inference_logger_api.md
similarity index 100%
rename from hsml/docs/templates/model-serving/inference_logger_api.md
rename to docs/templates/model-serving/inference_logger_api.md
diff --git a/hsml/docs/templates/model-serving/model_serving_api.md b/docs/templates/model-serving/model_serving_api.md
similarity index 100%
rename from hsml/docs/templates/model-serving/model_serving_api.md
rename to docs/templates/model-serving/model_serving_api.md
diff --git a/hsml/docs/templates/model-serving/predictor_api.md b/docs/templates/model-serving/predictor_api.md
similarity index 100%
rename from hsml/docs/templates/model-serving/predictor_api.md
rename to docs/templates/model-serving/predictor_api.md
diff --git a/hsml/docs/templates/model-serving/predictor_state_api.md b/docs/templates/model-serving/predictor_state_api.md
similarity index 100%
rename from hsml/docs/templates/model-serving/predictor_state_api.md
rename to docs/templates/model-serving/predictor_state_api.md
diff --git a/hsml/docs/templates/model-serving/predictor_state_condition_api.md b/docs/templates/model-serving/predictor_state_condition_api.md
similarity index 100%
rename from hsml/docs/templates/model-serving/predictor_state_condition_api.md
rename to docs/templates/model-serving/predictor_state_condition_api.md
diff --git a/hsml/docs/templates/model-serving/resources_api.md b/docs/templates/model-serving/resources_api.md
similarity index 100%
rename from hsml/docs/templates/model-serving/resources_api.md
rename to docs/templates/model-serving/resources_api.md
diff --git a/hsml/docs/templates/model-serving/transformer_api.md b/docs/templates/model-serving/transformer_api.md
similarity index 100%
rename from hsml/docs/templates/model-serving/transformer_api.md
rename to docs/templates/model-serving/transformer_api.md
diff --git a/hsfs/auto_doc.py b/hsfs/auto_doc.py
deleted file mode 100644
index a98af258b..000000000
--- a/hsfs/auto_doc.py
+++ /dev/null
@@ -1,384 +0,0 @@
-import os
-import pathlib
-import shutil
-
-import keras_autodoc
-
-PAGES = {
- "api/connection_api.md": {
- "connection": ["hsfs.connection.Connection"],
- "connection_properties": keras_autodoc.get_properties(
- "hsfs.connection.Connection"
- ),
- "connection_methods": keras_autodoc.get_methods("hsfs.connection.Connection"),
- },
- "api/spine_group_api.md": {
- "fg": ["hsfs.feature_group.SpineGroup"],
- "fg_create": ["hsfs.feature_store.FeatureStore.get_or_create_spine_group"],
- "fg_get": ["hsfs.feature_store.FeatureStore.get_or_create_spine_group"],
- "fg_properties": keras_autodoc.get_properties(
- "hsfs.feature_group.SpineGroup",
- exclude=[
- "expectation_suite",
- "location",
- "online_enabled",
- "statistics",
- "statistics_config",
- "subject",
- ],
- ),
- "fg_methods": keras_autodoc.get_methods(
- "hsfs.feature_group.SpineGroup",
- exclude=[
- "append_features",
- "compute_statistics",
- "delete_expectation_suite",
- "from_response_json",
- "get_all_validation_reports",
- "get_expectation_suite",
- "get_latest_validation_report",
- "get_statistics",
- "get_validation_history",
- "save_expectation_suite",
- "save_validation_report",
- "update_from_response_json",
- "update_statistics_config",
- "validate",
- ],
- ),
- },
- "api/training_dataset_api.md": {
- "td": ["hsfs.training_dataset.TrainingDataset"],
- "td_create": ["hsfs.feature_store.FeatureStore.create_training_dataset"],
- "td_get": ["hsfs.feature_store.FeatureStore.get_training_dataset"],
- "td_properties": keras_autodoc.get_properties(
- "hsfs.training_dataset.TrainingDataset"
- ),
- "td_methods": keras_autodoc.get_methods(
- "hsfs.training_dataset.TrainingDataset"
- ),
- },
- "api/feature_view_api.md": {
- "fv": ["hsfs.feature_view.FeatureView"],
- "fv_create": ["hsfs.feature_store.FeatureStore.create_feature_view"],
- "fv_get": ["hsfs.feature_store.FeatureStore.get_feature_view"],
- "fvs_get": ["hsfs.feature_store.FeatureStore.get_feature_views"],
- "fv_properties": keras_autodoc.get_properties("hsfs.feature_view.FeatureView"),
- "fv_methods": keras_autodoc.get_methods("hsfs.feature_view.FeatureView"),
- },
- "api/feature_api.md": {
- "feature": ["hsfs.feature.Feature"],
- "feature_properties": keras_autodoc.get_properties("hsfs.feature.Feature"),
- "feature_methods": keras_autodoc.get_methods("hsfs.feature.Feature"),
- },
- "api/expectation_suite_api.md": {
- "expectation_suite": ["hsfs.expectation_suite.ExpectationSuite"],
- "expectation_suite_attach": [
- "hsfs.feature_group.FeatureGroup.save_expectation_suite"
- ],
- "single_expectation_api": [
- "hsfs.expectation_suite.ExpectationSuite.add_expectation",
- "hsfs.expectation_suite.ExpectationSuite.replace_expectation",
- "hsfs.expectation_suite.ExpectationSuite.remove_expectation",
- ],
- "expectation_suite_properties": keras_autodoc.get_properties(
- "hsfs.expectation_suite.ExpectationSuite"
- ),
- "expectation_suite_methods": keras_autodoc.get_methods(
- "hsfs.expectation_suite.ExpectationSuite"
- ),
- },
- "api/feature_store_api.md": {
- "fs": ["hsfs.feature_store.FeatureStore"],
- "fs_get": ["hsfs.connection.Connection.get_feature_store"],
- "fs_properties": keras_autodoc.get_properties(
- "hsfs.feature_store.FeatureStore"
- ),
- "fs_methods": keras_autodoc.get_methods("hsfs.feature_store.FeatureStore"),
- },
- "api/feature_group_api.md": {
- "fg": ["hsfs.feature_group.FeatureGroup"],
- "fg_create": [
- "hsfs.feature_store.FeatureStore.create_feature_group",
- "hsfs.feature_store.FeatureStore.get_or_create_feature_group",
- ],
- "fg_get": ["hsfs.feature_store.FeatureStore.get_feature_group"],
- "fg_properties": keras_autodoc.get_properties(
- "hsfs.feature_group.FeatureGroup"
- ),
- "fg_methods": keras_autodoc.get_methods("hsfs.feature_group.FeatureGroup"),
- },
- "api/external_feature_group_api.md": {
- "fg": ["hsfs.feature_group.ExternalFeatureGroup"],
- "fg_create": ["hsfs.feature_store.FeatureStore.create_external_feature_group"],
- "fg_get": ["hsfs.feature_store.FeatureStore.get_external_feature_group"],
- "fg_properties": keras_autodoc.get_properties(
- "hsfs.feature_group.ExternalFeatureGroup"
- ),
- "fg_methods": keras_autodoc.get_methods(
- "hsfs.feature_group.ExternalFeatureGroup"
- ),
- },
- "api/storage_connector_api.md": {
- "sc_get": [
- "hsfs.feature_store.FeatureStore.get_storage_connector",
- "hsfs.feature_store.FeatureStore.get_online_storage_connector",
- ],
- "hopsfs_methods": keras_autodoc.get_methods(
- "hsfs.storage_connector.HopsFSConnector", exclude=["from_response_json"]
- ),
- "hopsfs_properties": keras_autodoc.get_properties(
- "hsfs.storage_connector.HopsFSConnector"
- ),
- "s3_methods": keras_autodoc.get_methods(
- "hsfs.storage_connector.S3Connector", exclude=["from_response_json"]
- ),
- "s3_properties": keras_autodoc.get_properties(
- "hsfs.storage_connector.S3Connector"
- ),
- "redshift_methods": keras_autodoc.get_methods(
- "hsfs.storage_connector.RedshiftConnector", exclude=["from_response_json"]
- ),
- "redshift_properties": keras_autodoc.get_properties(
- "hsfs.storage_connector.RedshiftConnector"
- ),
- "adls_methods": keras_autodoc.get_methods(
- "hsfs.storage_connector.AdlsConnector", exclude=["from_response_json"]
- ),
- "adls_properties": keras_autodoc.get_properties(
- "hsfs.storage_connector.AdlsConnector"
- ),
- "snowflake_methods": keras_autodoc.get_methods(
- "hsfs.storage_connector.SnowflakeConnector", exclude=["from_response_json"]
- ),
- "snowflake_properties": keras_autodoc.get_properties(
- "hsfs.storage_connector.SnowflakeConnector"
- ),
- "jdbc_methods": keras_autodoc.get_methods(
- "hsfs.storage_connector.JdbcConnector", exclude=["from_response_json"]
- ),
- "jdbc_properties": keras_autodoc.get_properties(
- "hsfs.storage_connector.JdbcConnector"
- ),
- "gcs_methods": keras_autodoc.get_methods(
- "hsfs.storage_connector.GcsConnector", exclude=["from_response_json"]
- ),
- "gcs_properties": keras_autodoc.get_properties(
- "hsfs.storage_connector.GcsConnector"
- ),
- "bigquery_methods": keras_autodoc.get_methods(
- "hsfs.storage_connector.BigQueryConnector", exclude=["from_response_json"]
- ),
- "bigquery_properties": keras_autodoc.get_properties(
- "hsfs.storage_connector.BigQueryConnector"
- ),
- "kafka_methods": keras_autodoc.get_methods(
- "hsfs.storage_connector.KafkaConnector", exclude=["from_response_json"]
- ),
- "kafka_properties": keras_autodoc.get_properties(
- "hsfs.storage_connector.KafkaConnector"
- ),
- },
- "api/statistics_config_api.md": {
- "statistics_config": ["hsfs.statistics_config.StatisticsConfig"],
- "statistics_config_properties": keras_autodoc.get_properties(
- "hsfs.statistics_config.StatisticsConfig"
- ),
- },
- "api/transformation_functions_api.md": {
- "transformation_function": [
- "hsfs.transformation_function.TransformationFunction"
- ],
- "transformation_function_properties": keras_autodoc.get_properties(
- "hsfs.transformation_function.TransformationFunction"
- ),
- "transformation_function_methods": keras_autodoc.get_methods(
- "hsfs.transformation_function.TransformationFunction",
- exclude=[
- "from_response_json",
- "update_from_response_json",
- "json",
- "to_dict",
- ],
- ),
- "create_transformation_function": [
- "hsfs.feature_store.FeatureStore.create_transformation_function"
- ],
- "get_transformation_function": [
- "hsfs.feature_store.FeatureStore.get_transformation_function"
- ],
- "get_transformation_functions": [
- "hsfs.feature_store.FeatureStore.get_transformation_functions"
- ],
- },
- "api/validation_report_api.md": {
- "validation_report": ["hsfs.validation_report.ValidationReport"],
- "validation_report_validate": [
- "hsfs.feature_group.FeatureGroup.validate",
- "hsfs.feature_group.FeatureGroup.insert",
- ],
- "validation_report_get": [
- "hsfs.feature_group.FeatureGroup.get_latest_validation_report",
- "hsfs.feature_group.FeatureGroup.get_all_validation_reports",
- ],
- "validation_report_properties": keras_autodoc.get_properties(
- "hsfs.validation_report.ValidationReport"
- ),
- "validation_report_methods": keras_autodoc.get_methods(
- "hsfs.validation_report.ValidationReport"
- ),
- },
- "api/job.md": {
- "job_configuration": ["hsfs.core.job_configuration.JobConfiguration"],
- "job": ["hsfs.core.job.Job"],
- "job_methods": [
- "hsfs.core.job.Job.get_state",
- "hsfs.core.job.Job.get_final_state",
- ],
- },
- "api/query_api.md": {
- "query_methods": keras_autodoc.get_methods(
- "hsfs.constructor.query.Query",
- exclude=["json", "to_dict"],
- ),
- "query_properties": keras_autodoc.get_properties(
- "hsfs.constructor.query.Query"
- ),
- },
- "api/links.md": {
- "links_properties": keras_autodoc.get_properties(
- "hsfs.core.explicit_provenance.Links"
- ),
- "artifact_properties": keras_autodoc.get_properties(
- "hsfs.core.explicit_provenance.Artifact"
- ),
- },
- "api/statistics_api.md": {
- "statistics": ["hsfs.statistics.Statistics"],
- "statistics_properties": keras_autodoc.get_properties(
- "hsfs.statistics.Statistics"
- ),
- },
- "api/split_statistics_api.md": {
- "split_statistics": ["hsfs.split_statistics.SplitStatistics"],
- "split_statistics_properties": keras_autodoc.get_properties(
- "hsfs.split_statistics.SplitStatistics"
- ),
- },
- "api/feature_descriptive_statistics_api.md": {
- "feature_descriptive_statistics": [
- "hsfs.core.feature_descriptive_statistics.FeatureDescriptiveStatistics"
- ],
- "feature_descriptive_statistics_properties": keras_autodoc.get_properties(
- "hsfs.core.feature_descriptive_statistics.FeatureDescriptiveStatistics"
- ),
- },
- "api/feature_monitoring_config_api.md": {
- "feature_monitoring_config": [
- "hsfs.core.feature_monitoring_config.FeatureMonitoringConfig"
- ],
- "feature_monitoring_config_properties": keras_autodoc.get_properties(
- "hsfs.core.feature_monitoring_config.FeatureMonitoringConfig"
- ),
- "feature_monitoring_config_methods": keras_autodoc.get_methods(
- "hsfs.core.feature_monitoring_config.FeatureMonitoringConfig",
- exclude=[
- "from_response_json",
- "update_from_response_json",
- "json",
- "to_dict",
- ],
- ),
- # from feature group
- "feature_monitoring_config_creation_fg": [
- "hsfs.feature_group.FeatureGroup.create_statistics_monitoring",
- "hsfs.feature_group.FeatureGroup.create_feature_monitoring",
- ],
- # from feature view
- "feature_monitoring_config_creation_fv": [
- "hsfs.feature_view.FeatureView.create_statistics_monitoring",
- "hsfs.feature_view.FeatureView.create_feature_monitoring",
- ],
- # retrieval
- "feature_monitoring_config_retrieval_fg": [
- "hsfs.feature_group.FeatureGroup.get_feature_monitoring_configs",
- ],
- "feature_monitoring_config_retrieval_fv": [
- "hsfs.feature_view.FeatureView.get_feature_monitoring_configs",
- ],
- },
- "api/feature_monitoring_result_api.md": {
- "feature_monitoring_result": [
- "hsfs.core.feature_monitoring_result.FeatureMonitoringResult"
- ],
- "feature_monitoring_result_retrieval": [
- "hsfs.core.feature_monitoring_config.FeatureMonitoringConfig.get_history"
- ],
- "feature_monitoring_result_properties": keras_autodoc.get_properties(
- "hsfs.core.feature_monitoring_result.FeatureMonitoringResult"
- ),
- },
- "api/feature_monitoring_window_config_api.md": {
- "feature_monitoring_window_config": [
- "hsfs.core.monitoring_window_config.MonitoringWindowConfig"
- ],
- "feature_monitoring_window_config_properties": keras_autodoc.get_properties(
- "hsfs.core.monitoring_window_config.MonitoringWindowConfig"
- ),
- },
- "api/embedding_index_api.md": {
- "embedding_index": ["hsfs.embedding.EmbeddingIndex"],
- "embedding_index_properties": keras_autodoc.get_properties(
- "hsfs.embedding.EmbeddingIndex"
- ),
- "embedding_index_methods": keras_autodoc.get_methods(
- "hsfs.embedding.EmbeddingIndex", exclude=["from_response_json"]
- ),
- },
- "api/embedding_feature_api.md": {
- "embedding_feature": ["hsfs.embedding.EmbeddingFeature"],
- "embedding_feature_properties": keras_autodoc.get_properties(
- "hsfs.embedding.EmbeddingFeature"
- ),
- },
- "api/similarity_function_type_api.md": {
- "similarity_function_type": ["hsfs.embedding.SimilarityFunctionType"],
- },
-}
-
-hsfs_dir = pathlib.Path(__file__).resolve().parents[0]
-if "GITHUB_SHA" in os.environ:
- commit_sha = os.environ["GITHUB_SHA"]
- project_url = (
- f"https://github.com/logicalclocks/feature-store-api/tree/{commit_sha}/python"
- )
-else:
- branch_name = os.environ.get("GITHUB_BASE_REF", "master")
- project_url = (
- f"https://github.com/logicalclocks/feature-store-api/blob/{branch_name}/python"
- )
-
-
-def generate(dest_dir):
- doc_generator = keras_autodoc.DocumentationGenerator(
- PAGES,
- project_url=project_url,
- template_dir="./docs/templates",
- titles_size="###",
- extra_aliases={
- "hsfs.core.query.Query": "hsfs.Query",
- "hsfs.storage_connector.StorageConnector": "hsfs.StorageConnector",
- "hsfs.statistics_config.StatisticsConfig": "hsfs.StatisticsConfig",
- "hsfs.training_dataset_feature.TrainingDatasetFeature": "hsfs.TrainingDatasetFeature",
- "pandas.core.frame.DataFrame": "pandas.DataFrame",
- },
- max_signature_line_length=100,
- )
- shutil.copyfile(hsfs_dir / "CONTRIBUTING.md", dest_dir / "CONTRIBUTING.md")
- shutil.copyfile(hsfs_dir / "README.md", dest_dir / "index.md")
-
- doc_generator.generate(dest_dir / "generated")
-
-
-if __name__ == "__main__":
- generate(hsfs_dir / "docs")
diff --git a/hsfs/docs/CONTRIBUTING.md b/hsfs/docs/CONTRIBUTING.md
deleted file mode 100644
index 0df3de08e..000000000
--- a/hsfs/docs/CONTRIBUTING.md
+++ /dev/null
@@ -1,220 +0,0 @@
-## Python development setup
-
----
-
-- Fork and clone the repository
-
-- Create a new Python environment with your favourite environment manager (e.g. virtualenv or conda) and Python 3.9 (newer versions will return a library conflict in `auto_doc.py`)
-
-- Install repository in editable mode with development dependencies:
-
- ```bash
- cd python
- pip install -e ".[python,dev]"
- ```
-
-- Install [pre-commit](https://pre-commit.com/) and then activate its hooks. pre-commit is a framework for managing and maintaining multi-language pre-commit hooks. The Feature Store uses pre-commit to ensure code-style and code formatting through [ruff](https://docs.astral.sh/ruff/). Run the following commands from the `python` directory:
-
- ```bash
- cd python
- pip install --user pre-commit
- pre-commit install
- ```
-
- Afterwards, pre-commit will run whenever you commit.
-
-- To run formatting and code-style separately, you can configure your IDE, such as VSCode, to use `ruff`, or run it via the command line:
-
- ```bash
- # linting
- ruff check python --fix
- # formatting
- ruff format python
- ```
-
-### Python documentation
-
-We follow a few best practices for writing the Python documentation:
-
-1. Use the google docstring style:
-
- ```python
- """[One Line Summary]
-
- [Extended Summary]
-
- [!!! example
- import xyz
- ]
-
- # Arguments
- arg1: Type[, optional]. Description[, defaults to `default`]
- arg2: Type[, optional]. Description[, defaults to `default`]
-
- # Returns
- Type. Description.
-
- # Raises
- Exception. Description.
- """
- ```
-
- If Python 3 type annotations are used, they are inserted automatically.
-
-2. Feature store entity engine methods (e.g. FeatureGroupEngine etc.) only require a single line docstring.
-3. REST Api implementations (e.g. FeatureGroupApi etc.) should be fully documented with docstrings without defaults.
-4. Public Api such as metadata objects should be fully documented with defaults.
-
-#### Setup and Build Documentation
-
-We use `mkdocs` together with `mike` ([for versioning](https://github.com/jimporter/mike/)) to build the documentation and a plugin called `keras-autodoc` to auto generate Python API documentation from docstrings.
-
-**Background about `mike`:**
-`mike` builds the documentation and commits it as a new directory to the gh-pages branch. Each directory corresponds to one version of the documentation. Additionally, `mike` maintains a json in the root of gh-pages with the mappings of versions/aliases for each of the directories available. With aliases you can define extra names like `dev` or `latest`, to indicate stable and unstable releases.
-
-1. Currently we are using our own version of `keras-autodoc`
-
- ```bash
- pip install git+https://github.com/logicalclocks/keras-autodoc
- ```
-
-2. Install HSFS with `docs` extras:
-
- ```bash
- pip install -e ".[python,dev]" && pip install -r ../requirements-docs.txt
- ```
-
-3. To build the docs, first run the auto doc script:
-
- ```bash
- cd ..
- python auto_doc.py
- ```
-
-##### Option 1: Build only current version of docs
-
-4. Either build the docs, or serve them dynamically:
-
- Note: Links and pictures might not resolve properly later on when checking with this build.
- The reason for that is that the docs are deployed with versioning on docs.hopsworks.ai and
- therefore another level is added to all paths, e.g. `docs.hopsworks.ai/[version-or-alias]`.
- Using relative links should not be affected by this, however, building the docs with version
- (Option 2) is recommended.
-
- ```bash
- mkdocs build
- # or
- mkdocs serve
- ```
-
-##### Option 2 (Preferred): Build multi-version doc with `mike`
-
-###### Versioning on docs.hopsworks.ai
-
-On docs.hopsworks.ai we implement the following versioning scheme:
-
-- current master branches (e.g. of hsfs corresponding to master of Hopsworks): rendered as current Hopsworks snapshot version, e.g. **2.2.0-SNAPSHOT [dev]**, where `dev` is an alias to indicate that this is an unstable version.
-- the latest release: rendered with full current version, e.g. **2.1.5 [latest]** with `latest` alias to indicate that this is the latest stable release.
-- previous stable releases: rendered without alias, e.g. **2.1.4**.
-
-###### Build Instructions
-
-4. For this you can either checkout and make a local copy of the `upstream/gh-pages` branch, where `mike` maintains the current state of docs.hopsworks.ai, or just build documentation for the branch you are updating:
-
- Building _one_ branch:
-
- Checkout your dev branch with modified docs:
-
- ```bash
- git checkout [dev-branch]
- ```
-
- Generate API docs if necessary:
-
- ```bash
- python auto_doc.py
- ```
-
- Build docs with a version and alias
-
- ```bash
- mike deploy [version] [alias] --update-alias
-
- # for example, if you are updating documentation to be merged to master,
- # which will become the new SNAPSHOT version:
- mike deploy 2.2.0-SNAPSHOT dev --update-alias
-
- # if you are updating docs of the latest stable release branch
- mike deploy [version] latest --update-alias
-
- # if you are updating docs of a previous stable release branch
- mike deploy [version]
- ```
-
- If no gh-pages branch existed in your local repository, this will have created it.
-
- **Important**: If no previous docs were built, you will have to choose a version as default to be loaded as index, as follows
-
- ```bash
- mike set-default [version-or-alias]
- ```
-
- You can now checkout the gh-pages branch and serve:
-
- ```bash
- git checkout gh-pages
- mike serve
- ```
-
- You can also list all available versions/aliases:
-
- ```bash
- mike list
- ```
-
- Delete and reset your local gh-pages branch:
-
- ```bash
- mike delete --all
-
- # or delete single version
- mike delete [version-or-alias]
- ```
-
-#### Adding new API documentation
-
-To add new documentation for APIs, you need to add information about the method/class to document to the `auto_doc.py` script:
-
-```python
-PAGES = {
- "connection.md": [
- "hsfs.connection.Connection.connection"
- ]
- "new_template.md": [
- "module",
- "xyz.asd"
- ]
-}
-```
-
-Now you can add a template markdown file to the `docs/templates` directory with the name you specified in the auto-doc script. The `new_template.md` file should contain a tag to identify the place at which the API documentation should be inserted:
-
-````
-## The XYZ package
-
-{{module}}
-
-Some extra content here.
-
-!!! example
- ```python
- import xyz
- ```
-
-{{xyz.asd}}
-````
-
-Finally, run the `auto_doc.py` script, as decribed above, to update the documentation.
-
-For information about Markdown syntax and possible Admonitions/Highlighting etc. see
-the [Material for Mkdocs themes reference documentation](https://squidfunk.github.io/mkdocs-material/reference/abbreviations/).
diff --git a/hsfs/docs/assets/images/favicon.ico b/hsfs/docs/assets/images/favicon.ico
deleted file mode 100644
index ab7573067..000000000
Binary files a/hsfs/docs/assets/images/favicon.ico and /dev/null differ
diff --git a/hsfs/docs/assets/images/hops-logo.png b/hsfs/docs/assets/images/hops-logo.png
deleted file mode 100644
index d3625ae07..000000000
Binary files a/hsfs/docs/assets/images/hops-logo.png and /dev/null differ
diff --git a/hsfs/docs/css/custom.css b/hsfs/docs/css/custom.css
deleted file mode 100644
index 45f87459a..000000000
--- a/hsfs/docs/css/custom.css
+++ /dev/null
@@ -1,114 +0,0 @@
-[data-md-color-scheme="hopsworks"] {
- --md-primary-fg-color: #1EB382;
- --md-secondary-fg-color: #188a64;
- --md-tertiary-fg-color: #0d493550;
- --md-quaternary-fg-color: #fdfdfd;
- --border-radius-variable: 5px;
-}
-
-.md-footer__inner:not([hidden]) {
- display: none
-}
-
-/* Lex did stuff here */
-.svg_topnav{
- width: 12px;
- filter: invert(100);
-}
-.svg_topnav:hover{
- width: 12px;
- filter: invert(10);
-}
-
-.md-header[data-md-state=shadow] {
- box-shadow: 0 0 0 0;
-}
-
-.md-tabs__item {
- min-width: 2.25rem;
- min-height: 1.5rem;
-}
-
-.md-tabs__item:hover {
- background-color: var(--md-tertiary-fg-color);
- transition: background-color 450ms;
-}
-
-/*
-.md-sidebar__scrollwrap{
- background-color: var(--md-quaternary-fg-color);
- padding: 15px 5px 5px 5px;
- border-radius: var(--border-radius-variable);
-}
-*/
-.md-nav__link:focus{
-}
-
-.image_logo_02{
- width:450px;
-}
-
-/* End of Lex did stuff here */
-
-.md-header__button.md-logo {
- margin: .1rem;
- padding: .1rem;
-}
-
-.md-header__button.md-logo img, .md-header__button.md-logo svg {
- display: block;
- width: 1.8rem;
- height: 1.8rem;
- fill: currentColor;
-}
-
-.md-tabs {
- width: 100%;
- overflow: auto;
- color: var(--md-primary-bg-color);
- background-color: var(--md-secondary-fg-color);
- transition: background-color 250ms;
-}
-
-.wrapper {
- display: grid;
- grid-template-columns: repeat(4, 1fr);
- gap: 10px;
- grid-auto-rows: minmax(100px, auto);
-}
-
-.wrapper * {
- border: 2px solid green;
- text-align: center;
- padding: 70px 0;
-}
-
-.one {
- grid-column: 1 / 2;
- grid-row: 1;
-}
-.two {
- grid-column: 2 / 3;
- grid-row: 1;
-}
-.three {
- grid-column: 3 / 4;
- grid-row: 1;
-}
-.four {
- grid-column: 4 / 5;
- grid-row: 1;
-}
-.five {
- grid-column: 1 / 3;
- grid-row: 2;
-}
-.six {
- grid-column: 3 / 5;
- grid-row: 2;
-}
-
-/* Jupyter Stuff */
-.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt {
- display: none !important;
-}
diff --git a/hsfs/docs/css/dropdown.css b/hsfs/docs/css/dropdown.css
deleted file mode 100644
index 531f7b10d..000000000
--- a/hsfs/docs/css/dropdown.css
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Style The Dropdown Button */
-.dropbtn {
- color: white;
- border: none;
- cursor: pointer;
-}
-
-.md-tabs__list {
- contain: inherit;
-}
-
-.md-tabs {
- overflow: inherit;
-}
-
-
-/* The container
- needed to position the dropdown content */
-.dropdown {
- position: absolute;
- display: inline-block;
-}
-
-/* Dropdown Content (Hidden by Default) */
-.dropdown-content {
- display: none;
- font-size: 13px;
- position: absolute;
- background-color: #f9f9f9;
- min-width: 160px;
- box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
- z-index: 1000;
- border-radius: 2px;
- left: -15px;
-}
-
-/* Links inside the dropdown */
-.dropdown-content a {
- color: black;
- padding: 12px 16px;
- text-decoration: none;
- display: block;
-}
-
-/* Change color of dropdown links on hover */
-.dropdown-content a:hover {
- background-color: #f1f1f1
-}
-
-/* Show the dropdown menu on hover */
-.dropdown:hover .dropdown-content {
- display: block;
-}
-
-/* Change the background color of the dropdown button when the dropdown content is shown */
-.dropdown:hover .dropbtn {}
\ No newline at end of file
diff --git a/hsfs/docs/css/marctech.css b/hsfs/docs/css/marctech.css
deleted file mode 100644
index 8bb58c97b..000000000
--- a/hsfs/docs/css/marctech.css
+++ /dev/null
@@ -1,1047 +0,0 @@
-:root {
- --md-primary-fg-color: #1EB382;
- --md-secondary-fg-color: #188a64;
- --md-tertiary-fg-color: #0d493550;
- --md-quaternary-fg-color: #fdfdfd;
- --md-fiftuary-fg-color: #2471cf;
- --border-radius-variable: 5px;
- --border-width:1px;
- }
-
- .marctech_main a{
- color: var(--md-fiftuary-fg-color);
- border-bottom: 1px dotted var(--md-fiftuary-fg-color) !important;
- text-decoration: dotted !important;}
-
- .marctech_main a:hover{
- border-bottom: 1px dotted var(--md-primary-fg-color)!important;
- }
-
- .marctech_main a:visited{
- color: var(--md-tertiary-fg-color);
- border-bottom: 1px dotted var(--md-tertiary-fg-color) !important;
-
- }
-
- .w-layout-grid {
- display: -ms-grid;
- display: grid;
- grid-auto-columns: 1fr;
- -ms-grid-columns: 1fr 1fr;
- grid-template-columns: 1fr 1fr;
- -ms-grid-rows: auto auto;
- grid-template-rows: auto auto;
- grid-row-gap: 16px;
- grid-column-gap: 16px;
- }
-
- .image_logo{
- width: 69%;
- background-color: white;
- z-index: 50;
- padding: 0px 15px 0px 15px;
- margin-bottom: 10px;
- }
-
- .layer_02{
- pointer-events: none;
- }
-
- .round-frame{
- pointer-events: initial;
- }
-
- .marctech_main {
- margin-top:-20px;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- margin-bottom: 55px;
- }
-
- .collumns {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- height: 100%;
- -webkit-box-align: stretch;
- -webkit-align-items: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- }
-
- .col_heading {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- }
-
- .enterprisefs {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- }
-
- .enterprise_ai {
- -webkit-align-self: center;
- -ms-flex-item-align: center;
- -ms-grid-row-align: center;
- align-self: center;
- -webkit-box-flex: 1;
- -webkit-flex: 1;
- -ms-flex: 1;
- flex: 1;
- }
-
- .side-content {
- z-index: 0;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 240px;
- height: 100%;
- margin-top: 10px;
- margin-bottom: 10px;
- padding: 20px 10px;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-align-content: flex-start;
- -ms-flex-line-pack: start;
- align-content: flex-start;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 10px;
- background-color:var(--md-quaternary-fg-color);
- }
- .body {
- padding: 40px;
- font-family: Roboto, sans-serif;
- }
-
- .green {
- color: #1eb182;
- font-size: 1.2vw;
- }
-
- .rec_frame {
- position: relative;
- z-index: 1;
- display: inline-block;
- min-width: 150px;
- margin-top: 10px;
- margin-right: 10px;
- margin-left: 10px;
- padding: 10px 10px;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 10px;
- background-color: #fff;
- box-shadow: 4px 4px 0 0 rgba(88, 88, 88, 0.16);
- -webkit-transition: box-shadow 200ms ease, border-color 200ms ease;
- transition: box-shadow 200ms ease, border-color 200ms ease;
- color: #585858;
- text-align: center;
- cursor: pointer;
- }
-
- .rec_frame:hover {
- border-color: #c2c2c2;
- box-shadow: none;
- }
-
- .name_item {
- font-size: 0.7rem;
- line-height: 120%;
- font-weight: 700;
- }
-
- .name_item.db {
- position: relative;
- z-index: 3;
- text-align: left;
- }
-
- .name_item.small {
- font-size: 0.6rem;
- font-weight: 500;
- }
-
- .name_item.ingrey {
- padding-bottom: 20px;
- }
-
- .db_frame-mid {
- position: relative;
- z-index: 1;
- margin-top: -8px;
- padding: 5px 2px;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 0px 0% 50% 50%;
- background-color: #fff;
- color: #585858;
- text-align: center;
- }
-
- .db_frame-top {
- position: relative;
- z-index: 2;
- padding: 5px 2px;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 50%;
- background-color: #fff;
- color: #585858;
- text-align: center;
- }
-
- .icondb {
- position: relative;
- width: 25px;
- min-width: 25px;
- margin-right: 10px;
- }
-
- .db_frame {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 150px;
- height: 55px;
- padding: 20px 10px;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 10px;
- background-color: #fff;
- box-shadow: 4px 4px 0 0 rgba(88, 88, 88, 0.16);
- -webkit-transition: box-shadow 200ms ease, border-color 200ms ease;
- transition: box-shadow 200ms ease, border-color 200ms ease;
- color: #585858;
- text-align: center;
- cursor: pointer;
- }
-
- .db_frame:hover {
- border-color: #c2c2c2;
- box-shadow: none;
- }
-
- .grid {
- -ms-grid-rows: auto auto auto;
- grid-template-rows: auto auto auto;
- }
-
- .arrowdown {
- position: relative;
- z-index: 0;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- margin-top: -10px;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- }
-
- .heading_MT {
- margin-top: 0px !important;
- margin-bottom: 0px !important;
- font-size: 1.3rem !important;
- white-space: nowrap !important;
- }
-
- .head_col {
- padding-left: 10px;
- }
-
- .MT_heading3 {
- margin-top: 0px !important ;
- font-size: 0.8rem !important;
- }
-
- .MT_heading3.green {
- color: #1eb182 !important;
- }
-
- .column_sides {
- position: relative;
- z-index: 2;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: justify;
- -webkit-justify-content: space-between;
- -ms-flex-pack: justify;
- justify-content: space-between;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- }
-
- .hopsicon {
- width: 45px;
- height: 45px;
- }
-
- .column_center {
- z-index: 10;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- }
-
- .center-content {
- z-index: -50;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 750px;
- height: 670px;
- margin-top: 10px;
- margin-bottom: 10px;
- padding: 20px 10px;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-align-content: center;
- -ms-flex-line-pack: center;
- align-content: center;
- border-radius: 10px;
- background-color: transparent;
- }
-
- .image {
- width: 260px;
- }
-
- .layer_01 {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: stretch;
- -webkit-align-items: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- }
-
- .name_center {
- font-size: 1rem;
- font-weight: 700;
- }
-
- .rec_frame_main {
- position: relative;
- z-index: 1;
- margin-top: 10px;
- margin-right: 10px;
- margin-left: 10px;
- padding: 5px 10px;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #1eb182;
- border-radius: 10px;
- background-color: #e6fdf6;
- box-shadow: 4px 4px 0 0 #dcf7ee;
- -webkit-transition: box-shadow 200ms ease, border-color 200ms ease;
- transition: box-shadow 200ms ease, border-color 200ms ease;
- color: #1eb182;
- text-align: center;
- cursor: pointer;
- }
-
- .rec_frame_main:hover {
- border-color: #9fecd4;
- box-shadow: none;
- }
-
- .rec_frame_main.no_content {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- height: 100%;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- box-shadow: 4px 4px 0 0 #dcf7ee;
- }
-
- .rec_frame_main.no_content:hover {
- border-color: #1eb182;
- box-shadow: 4px 4px 0 0 rgba(88, 88, 88, 0.16);
- }
-
- .name_item_02 {
- font-size: 0.85rem;
- font-weight: 700;
- }
-
- .grid-infra {
- padding-top: 20px;
- -ms-grid-columns: 1fr 1fr 1fr 1fr;
- grid-template-columns: 1fr 1fr 1fr 1fr;
- -ms-grid-rows: auto;
- grid-template-rows: auto;
- }
-
- .rec_frame_main-white {
- position: relative;
- z-index: 1;
- display: inline-block;
- width: 100%;
- margin-top: 10px;
- margin-bottom: 10px;
- padding: 5px 10px;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #1eb182;
- border-radius: 10px;
- background-color: #fff;
- box-shadow: 4px 4px 0 0 rgba(88, 88, 88, 0.16);
- -webkit-transition: box-shadow 200ms ease, border-color 200ms ease;
- transition: box-shadow 200ms ease, border-color 200ms ease;
- color: #1eb182;
- text-align: center;
- cursor: pointer;
- }
-
- .rec_frame_main-white:hover {
- border-color: #c2c2c2;
- box-shadow: none;
- }
-
- .rec_frame_main-white.dotted {
- border-style: dotted;
- }
-
- .column {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: justify;
- -webkit-justify-content: space-between;
- -ms-flex-pack: justify;
- justify-content: space-between;
- -webkit-box-align: stretch;
- -webkit-align-items: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- }
-
- .columns_center {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -webkit-flex-direction: row;
- -ms-flex-direction: row;
- flex-direction: row;
- -webkit-box-pack: justify;
- -webkit-justify-content: space-between;
- -ms-flex-pack: justify;
- justify-content: space-between;
- }
-
- .non-bold {
- font-weight: 400;
- }
-
- .logo-holder {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- }
-
- .infra {
- text-align: center;
- position: relative;
- z-index: 30;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- padding: 10px;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- border: 1px dashed #000;
- border-radius: 6px;
- background-color: #fff;
- cursor: pointer;
- }
-
- .infra:hover {
- border-style: solid;
- border-color: #585858;
- }
-
- .text_and_icon {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- }
-
- .svg_icon {
- width: 33px;
- margin-right: 10px;
- margin-left: 10px;
- }
-
- .layer_02 {
- position: absolute;
- z-index: 10;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 96%;
- height: 90%;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: stretch;
- -webkit-align-items: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- border-style: solid;
- border-width: calc (var(--border-width)*2);
- border-color: #bbbbbb50 ;
- border-radius: 100%;
- background-color: transparent;
- }
-
- .round-frame {
- position: absolute;
- left: 0%;
- top: auto;
- right: auto;
- bottom: 0%;
- z-index: 10;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 120px;
- height: 120px;
- margin: 10px;
- padding: 20px;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 100%;
- background-color: #fff;
- outline-color: #fff;
- outline-offset: 0px;
- outline-style: solid;
- outline-width: 7px;
- -webkit-transition: box-shadow 200ms ease, border-color 200ms ease;
- transition: box-shadow 200ms ease, border-color 200ms ease;
- color: #585858;
- text-align: center;
- cursor: pointer;
- }
-
- .round-frame:hover {
- border-color: #c2c2c2;
- box-shadow: none;
- }
-
- .round-frame.top-left {
- left: 4%;
- top: 15%;
- right: auto;
- bottom: auto;
- }
-
- .round-frame.bottom-left {
- left: 4%;
- bottom: 15%;
- }
-
- .round-frame.top-right {
- left: auto;
- top: 15%;
- right: 4%;
- bottom: auto;
- }
-
- .round-frame.bottom-right {
- left: auto;
- top: auto;
- right: 4%;
- bottom: 15%;
- padding: 10px;
- }
-
- .side-holder {
- z-index: -1;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- height: 630px;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- }
-
- .infra-icon {
- width: 25px;
- height: 25px;
- }
-
- .div-block {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- height: 100%;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: justify;
- -webkit-justify-content: space-between;
- -ms-flex-pack: justify;
- justify-content: space-between;
- }
-
- #w-node-a2a9b648-f5dd-74e5-e1c2-f7aaf4fa1fcd-46672785 {
- -ms-grid-column: span 1;
- grid-column-start: span 1;
- -ms-grid-column-span: 1;
- grid-column-end: span 1;
- -ms-grid-row: span 1;
- grid-row-start: span 1;
- -ms-grid-row-span: 1;
- grid-row-end: span 1;
- }
-
- #w-node-_466aa2bf-88bf-5a65-eab4-fc1eb95e7384-46672785 {
- -ms-grid-column: span 1;
- grid-column-start: span 1;
- -ms-grid-column-span: 1;
- grid-column-end: span 1;
- -ms-grid-row: span 1;
- grid-row-start: span 1;
- -ms-grid-row-span: 1;
- grid-row-end: span 1;
- }
-
- #w-node-_87009ba3-d9a6-e0b7-4cce-581190a19cf3-46672785 {
- -ms-grid-column: span 1;
- grid-column-start: span 1;
- -ms-grid-column-span: 1;
- grid-column-end: span 1;
- -ms-grid-row: span 1;
- grid-row-start: span 1;
- -ms-grid-row-span: 1;
- grid-row-end: span 1;
- }
-
- #w-node-_4a479fbb-90c7-9f47-d439-20aa6a224339-46672785 {
- -ms-grid-column: span 1;
- grid-column-start: span 1;
- -ms-grid-column-span: 1;
- grid-column-end: span 1;
- -ms-grid-row: span 1;
- grid-row-start: span 1;
- -ms-grid-row-span: 1;
- grid-row-end: span 1;
- }
-
-
- /*
-
-
- inherited from the original template
-
- */
-
- .w-container .w-row {
- margin-left: -10px;
- margin-right: -10px;
- }
- .w-row:before,
- .w-row:after {
- content: " ";
- display: table;
- grid-column-start: 1;
- grid-row-start: 1;
- grid-column-end: 2;
- grid-row-end: 2;
- }
- .w-row:after {
- clear: both;
- }
- .w-row .w-row {
- margin-left: 0;
- margin-right: 0;
- }
- .w-col {
- position: relative;
- float: left;
- width: 100%;
- min-height: 1px;
- padding-left: 10px;
- padding-right: 10px;
- }
- .w-col .w-col {
- padding-left: 0;
- padding-right: 0;
- }
- .w-col-1 {
- width: 8.33333333%;
- }
- .w-col-2 {
- width: 16.66666667%;
- }
- .w-col-3 {
- width: 25%;
- }
- .w-col-4 {
- width: 33.33333333%;
- }
- .w-col-5 {
- width: 41.66666667%;
- }
- .w-col-6 {
- width: 50%;
- }
- .w-col-7 {
- width: 58.33333333%;
- }
- .w-col-8 {
- width: 66.66666667%;
- }
- .w-col-9 {
- width: 75%;
- }
- .w-col-10 {
- width: 83.33333333%;
- }
- .w-col-11 {
- width: 91.66666667%;
- }
- .w-col-12 {
- width: 100%;
- }
- .w-hidden-main {
- display: none !important;
- }
- @media screen and (max-width: 991px) {
- .w-container {
- max-width: 728px;
- }
- .w-hidden-main {
- display: inherit !important;
- }
- .w-hidden-medium {
- display: none !important;
- }
- .w-col-medium-1 {
- width: 8.33333333%;
- }
- .w-col-medium-2 {
- width: 16.66666667%;
- }
- .w-col-medium-3 {
- width: 25%;
- }
- .w-col-medium-4 {
- width: 33.33333333%;
- }
- .w-col-medium-5 {
- width: 41.66666667%;
- }
- .w-col-medium-6 {
- width: 50%;
- }
- .w-col-medium-7 {
- width: 58.33333333%;
- }
- .w-col-medium-8 {
- width: 66.66666667%;
- }
- .w-col-medium-9 {
- width: 75%;
- }
- .w-col-medium-10 {
- width: 83.33333333%;
- }
- .w-col-medium-11 {
- width: 91.66666667%;
- }
- .w-col-medium-12 {
- width: 100%;
- }
- .w-col-stack {
- width: 100%;
- left: auto;
- right: auto;
- }
- }
- @media screen and (max-width: 767px) {
- .w-hidden-main {
- display: inherit !important;
- }
- .w-hidden-medium {
- display: inherit !important;
- }
- .w-hidden-small {
- display: none !important;
- }
- .w-row,
- .w-container .w-row {
- margin-left: 0;
- margin-right: 0;
- }
- .w-col {
- width: 100%;
- left: auto;
- right: auto;
- }
- .w-col-small-1 {
- width: 8.33333333%;
- }
- .w-col-small-2 {
- width: 16.66666667%;
- }
- .w-col-small-3 {
- width: 25%;
- }
- .w-col-small-4 {
- width: 33.33333333%;
- }
- .w-col-small-5 {
- width: 41.66666667%;
- }
- .w-col-small-6 {
- width: 50%;
- }
- .w-col-small-7 {
- width: 58.33333333%;
- }
- .w-col-small-8 {
- width: 66.66666667%;
- }
- .w-col-small-9 {
- width: 75%;
- }
- .w-col-small-10 {
- width: 83.33333333%;
- }
- .w-col-small-11 {
- width: 91.66666667%;
- }
- .w-col-small-12 {
- width: 100%;
- }
- }
- @media screen and (max-width: 479px) {
- .w-container {
- max-width: none;
- }
- .w-hidden-main {
- display: inherit !important;
- }
- .w-hidden-medium {
- display: inherit !important;
- }
- .w-hidden-small {
- display: inherit !important;
- }
- .w-hidden-tiny {
- display: none !important;
- }
- .w-col {
- width: 100%;
- }
- .w-col-tiny-1 {
- width: 8.33333333%;
- }
- .w-col-tiny-2 {
- width: 16.66666667%;
- }
- .w-col-tiny-3 {
- width: 25%;
- }
- .w-col-tiny-4 {
- width: 33.33333333%;
- }
- .w-col-tiny-5 {
- width: 41.66666667%;
- }
- .w-col-tiny-6 {
- width: 50%;
- }
- .w-col-tiny-7 {
- width: 58.33333333%;
- }
- .w-col-tiny-8 {
- width: 66.66666667%;
- }
- .w-col-tiny-9 {
- width: 75%;
- }
- .w-col-tiny-10 {
- width: 83.33333333%;
- }
- .w-col-tiny-11 {
- width: 91.66666667%;
- }
- .w-col-tiny-12 {
- width: 100%;
- }
- }
diff --git a/hsfs/docs/css/version-select.css b/hsfs/docs/css/version-select.css
deleted file mode 100644
index 3b908ae84..000000000
--- a/hsfs/docs/css/version-select.css
+++ /dev/null
@@ -1,36 +0,0 @@
-@media only screen and (max-width:76.1875em) {
-}
-
-#version-selector select.form-control {
- appearance: none;
- -webkit-appearance: none;
- -moz-appearance: none;
-
- background-color: #F5F5F5;
-
- background-position: center right;
- background-repeat: no-repeat;
- border: 0px;
- border-radius: 2px;
- /* box-shadow: 0px 1px 3px rgb(0 0 0 / 10%); */
- color: inherit;
- width: -webkit-fill-available;
- width: -moz-available;
- max-width: 200px;
- font-size: inherit;
- /* font-weight: 600; */
- margin: 10px;
- overflow: hidden;
- padding: 7px 10px;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-#version-selector::after {
- content: '⌄';
- font-family: inherit;
- font-size: 22px;
- margin: -35px;
- vertical-align: 7%;
- padding-bottom: 10px;
-}
diff --git a/hsfs/docs/index.md b/hsfs/docs/index.md
deleted file mode 100644
index a13ea2ce5..000000000
--- a/hsfs/docs/index.md
+++ /dev/null
@@ -1,201 +0,0 @@
-# Hopsworks Feature Store
-
-
-
-
-
-
-
-
-
-
-
-
-HSFS is the library to interact with the Hopsworks Feature Store. The library makes creating new features, feature groups and training datasets easy.
-
-The library is environment independent and can be used in two modes:
-
-- Spark mode: For data engineering jobs that create and write features into the feature store or generate training datasets. It requires a Spark environment such as the one provided in the Hopsworks platform or Databricks. In Spark mode, HSFS provides bindings both for Python and JVM languages.
-
-- Python mode: For data science jobs to explore the features available in the feature store, generate training datasets and feed them in a training pipeline. Python mode requires just a Python interpreter and can be used both in Hopsworks from Python Jobs/Jupyter Kernels, Amazon SageMaker or KubeFlow.
-
-The library automatically configures itself based on the environment it is run.
-However, to connect from an external environment such as Databricks or AWS Sagemaker,
-additional connection information, such as host and port, is required. For more information checkout the [Hopsworks documentation](https://docs.hopsworks.ai/latest/).
-
-## Getting Started On Hopsworks
-
-Get started easily by registering an account on [Hopsworks Serverless](https://app.hopsworks.ai/). Create your project and a [new Api key](https://docs.hopsworks.ai/latest/user_guides/projects/api_key/create_api_key/). In a new python environment with Python 3.8 or higher, install the [client library](https://docs.hopsworks.ai/latest/user_guides/client_installation/) using pip:
-
-```bash
-# Get all Hopsworks SDKs: Feature Store, Model Serving and Platform SDK
-pip install hopsworks
-# or minimum install with the Feature Store SDK
-pip install hsfs[python]
-# if using zsh don't forget the quotes
-pip install 'hsfs[python]'
-```
-
-You can start a notebook and instantiate a connection and get the project feature store handler.
-
-```python
-import hopsworks
-
-project = hopsworks.login() # you will be prompted for your api key
-fs = project.get_feature_store()
-```
-
-or using `hsfs` directly:
-
-```python
-import hsfs
-
-connection = hsfs.connection(
- host="c.app.hopsworks.ai", #
- project="your-project",
- api_key_value="your-api-key",
-)
-fs = connection.get_feature_store()
-```
-
-Create a new feature group to start inserting feature values.
-```python
-fg = fs.create_feature_group("rain",
- version=1,
- description="Rain features",
- primary_key=['date', 'location_id'],
- online_enabled=True)
-
-fg.save(dataframe)
-```
-
-Upsert new data in to the feature group with `time_travel_format="HUDI"`".
-```python
-fg.insert(upsert_df)
-```
-
-Retrieve commit timeline metdata of the feature group with `time_travel_format="HUDI"`".
-```python
-fg.commit_details()
-```
-
-"Reading feature group as of specific point in time".
-```python
-fg = fs.get_feature_group("rain", 1)
-fg.read("2020-10-20 07:34:11").show()
-```
-
-Read updates that occurred between specified points in time.
-```python
-fg = fs.get_feature_group("rain", 1)
-fg.read_changes("2020-10-20 07:31:38", "2020-10-20 07:34:11").show()
-```
-
-Join features together
-```python
-feature_join = rain_fg.select_all()
- .join(temperature_fg.select_all(), on=["date", "location_id"])
- .join(location_fg.select_all())
-feature_join.show(5)
-```
-
-join feature groups that correspond to specific point in time
-```python
-feature_join = rain_fg.select_all()
- .join(temperature_fg.select_all(), on=["date", "location_id"])
- .join(location_fg.select_all())
- .as_of("2020-10-31")
-feature_join.show(5)
-```
-
-join feature groups that correspond to different time
-```python
-rain_fg_q = rain_fg.select_all().as_of("2020-10-20 07:41:43")
-temperature_fg_q = temperature_fg.select_all().as_of("2020-10-20 07:32:33")
-location_fg_q = location_fg.select_all().as_of("2020-10-20 07:33:08")
-joined_features_q = rain_fg_q.join(temperature_fg_q).join(location_fg_q)
-```
-
-Use the query object to create a training dataset:
-```python
-td = fs.create_training_dataset("rain_dataset",
- version=1,
- data_format="tfrecords",
- description="A test training dataset saved in TfRecords format",
- splits={'train': 0.7, 'test': 0.2, 'validate': 0.1})
-
-td.save(feature_join)
-```
-
-A short introduction to the Scala API:
-```scala
-import com.logicalclocks.hsfs._
-val connection = HopsworksConnection.builder().build()
-val fs = connection.getFeatureStore();
-val attendances_features_fg = fs.getFeatureGroup("games_features", 1);
-attendances_features_fg.show(1)
-```
-
-You can find more examples on how to use the library in our [hops-examples](https://github.com/logicalclocks/hops-examples) repository.
-
-## Usage
-
-Usage data is collected for improving quality of the library. It is turned on by default if the backend
-is "c.app.hopsworks.ai". To turn it off, use one of the following way:
-```python
-# use environment variable
-import os
-os.environ["ENABLE_HOPSWORKS_USAGE"] = "false"
-
-# use `disable_usage_logging`
-import hsfs
-hsfs.disable_usage_logging()
-```
-
-The source code can be found in python/hsfs/usage.py.
-
-## Documentation
-
-Documentation is available at [Hopsworks Feature Store Documentation](https://docs.hopsworks.ai/).
-
-## Issues
-
-For general questions about the usage of Hopsworks and the Feature Store please open a topic on [Hopsworks Community](https://community.hopsworks.ai/).
-
-Please report any issue using [Github issue tracking](https://github.com/logicalclocks/feature-store-api/issues).
-
-Please attach the client environment from the output below in the issue:
-```python
-import hopsworks
-import hsfs
-hopsworks.login().get_feature_store()
-print(hsfs.get_env())
-```
-
-## Contributing
-
-If you would like to contribute to this library, please see the [Contribution Guidelines](CONTRIBUTING.md).
diff --git a/hsfs/docs/js/dropdown.js b/hsfs/docs/js/dropdown.js
deleted file mode 100644
index 2618e0ce7..000000000
--- a/hsfs/docs/js/dropdown.js
+++ /dev/null
@@ -1,2 +0,0 @@
-document.getElementsByClassName("md-tabs__link")[7].style.display = "none";
-document.getElementsByClassName("md-tabs__link")[9].style.display = "none";
diff --git a/hsfs/docs/js/inject-api-links.js b/hsfs/docs/js/inject-api-links.js
deleted file mode 100644
index aa5852283..000000000
--- a/hsfs/docs/js/inject-api-links.js
+++ /dev/null
@@ -1,32 +0,0 @@
-window.addEventListener("DOMContentLoaded", function () {
- var windowPathNameSplits = window.location.pathname.split("/");
- var majorVersionRegex = new RegExp("(\\d+[.]\\d+)")
- var latestRegex = new RegExp("latest");
- if (majorVersionRegex.test(windowPathNameSplits[1])) { // On landing page docs.hopsworks.api/3.0 - URL contains major version
- // Version API dropdown
- document.getElementById("hopsworks_api_link").href = "https://docs.hopsworks.ai/hopsworks-api/" + windowPathNameSplits[1] + "/generated/api/login/";
- document.getElementById("hsfs_api_link").href = "https://docs.hopsworks.ai/feature-store-api/" + windowPathNameSplits[1] + "/generated/api/connection_api/";
- document.getElementById("hsml_api_link").href = "https://docs.hopsworks.ai/machine-learning-api/" + windowPathNameSplits[1] + "/generated/connection_api/";
- } else { // on docs.hopsworks.api/feature-store-api/3.0 / docs.hopsworks.api/hopsworks-api/3.0 / docs.hopsworks.api/machine-learning-api/3.0
- if (latestRegex.test(windowPathNameSplits[2]) || latestRegex.test(windowPathNameSplits[1])) {
- var majorVersion = "latest";
- } else {
-
- var apiVersion = windowPathNameSplits[2];
- var majorVersion = apiVersion.match(majorVersionRegex)[0];
- }
- // Version main navigation
- document.getElementsByClassName("md-tabs__link")[0].href = "https://docs.hopsworks.ai/" + majorVersion;
- document.getElementsByClassName("md-tabs__link")[1].href = "https://colab.research.google.com/github/logicalclocks/hopsworks-tutorials/blob/master/quickstart.ipynb";
- document.getElementsByClassName("md-tabs__link")[2].href = "https://docs.hopsworks.ai/" + majorVersion + "/tutorials/";
- document.getElementsByClassName("md-tabs__link")[3].href = "https://docs.hopsworks.ai/" + majorVersion + "/concepts/hopsworks/";
- document.getElementsByClassName("md-tabs__link")[4].href = "https://docs.hopsworks.ai/" + majorVersion + "/user_guides/";
- document.getElementsByClassName("md-tabs__link")[5].href = "https://docs.hopsworks.ai/" + majorVersion + "/setup_installation/aws/getting_started/";
- document.getElementsByClassName("md-tabs__link")[6].href = "https://docs.hopsworks.ai/" + majorVersion + "/admin/";
- // Version API dropdown
- document.getElementById("hopsworks_api_link").href = "https://docs.hopsworks.ai/hopsworks-api/" + majorVersion + "/generated/api/login/";
- document.getElementById("hsfs_api_link").href = "https://docs.hopsworks.ai/feature-store-api/" + majorVersion + "/generated/api/connection_api/";
- document.getElementById("hsfs_javadoc_link").href = "https://docs.hopsworks.ai/feature-store-api/" + majorVersion + "/javadoc";
- document.getElementById("hsml_api_link").href = "https://docs.hopsworks.ai/machine-learning-api/" + majorVersion + "/generated/connection_api/";
- }
-});
diff --git a/hsfs/docs/js/version-select.js b/hsfs/docs/js/version-select.js
deleted file mode 100644
index fcac029e3..000000000
--- a/hsfs/docs/js/version-select.js
+++ /dev/null
@@ -1,64 +0,0 @@
-window.addEventListener("DOMContentLoaded", function() {
- // This is a bit hacky. Figure out the base URL from a known CSS file the
- // template refers to...
- var ex = new RegExp("/?css/version-select.css$");
- var sheet = document.querySelector('link[href$="version-select.css"]');
-
- var ABS_BASE_URL = sheet.href.replace(ex, "");
- var CURRENT_VERSION = ABS_BASE_URL.split("/").pop();
-
- function makeSelect(options, selected) {
- var select = document.createElement("select");
- select.classList.add("form-control");
-
- options.forEach(function(i) {
- var option = new Option(i.text, i.value, undefined,
- i.value === selected);
- select.add(option);
- });
-
- return select;
- }
-
- var xhr = new XMLHttpRequest();
- xhr.open("GET", ABS_BASE_URL + "/../versions.json");
- xhr.onload = function() {
- var versions = JSON.parse(this.responseText);
-
- var realVersion = versions.find(function(i) {
- return i.version === CURRENT_VERSION ||
- i.aliases.includes(CURRENT_VERSION);
- }).version;
- var latestVersion = versions.find(function(i) {
- return i.aliases.includes("latest");
- }).version;
- let outdated_banner = document.querySelector('div[data-md-color-scheme="default"][data-md-component="outdated"]');
- if (realVersion !== latestVersion) {
- outdated_banner.removeAttribute("hidden");
- } else {
- outdated_banner.setAttribute("hidden", "");
- }
-
- var select = makeSelect(versions.map(function(i) {
- var allowedAliases = ["dev", "latest"]
- if (i.aliases.length > 0) {
- var aliasString = " [" + i.aliases.filter(function (str) { return allowedAliases.includes(str); }).join(", ") + "]";
- } else {
- var aliasString = "";
- }
- return {text: i.title + aliasString, value: i.version};
- }), realVersion);
- select.addEventListener("change", function(event) {
- window.location.href = ABS_BASE_URL + "/../" + this.value + "/generated/api/connection_api/";
- });
-
- var container = document.createElement("div");
- container.id = "version-selector";
- // container.className = "md-nav__item";
- container.appendChild(select);
-
- var sidebar = document.querySelector(".md-nav--primary > .md-nav__list");
- sidebar.parentNode.insertBefore(container, sidebar.nextSibling);
- };
- xhr.send();
-});
diff --git a/hsfs/docs/overrides/main.html b/hsfs/docs/overrides/main.html
deleted file mode 100644
index ecb09de07..000000000
--- a/hsfs/docs/overrides/main.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "base.html" %}
-
-{% block outdated %}
-You're not viewing the latest version of the documentation.
-
- Click here to go to latest.
-
-{% endblock %}
diff --git a/hsfs/mkdocs.yml b/hsfs/mkdocs.yml
deleted file mode 100644
index 21fb704e1..000000000
--- a/hsfs/mkdocs.yml
+++ /dev/null
@@ -1,130 +0,0 @@
-site_name: "Hopsworks Documentation"
-site_description: "Official documentation for Hopsworks and its Feature Store - an open source data-intensive AI platform used for the development and operation of machine learning models at scale."
-site_author: "Logical Clocks"
-site_url: "https://docs.hopsworks.ai/feature-store-api/latest"
-
-# Repository
-repo_name: logicalclocks/hopsworks
-repo_url: https://github.com/logicalclocks/hopsworks
-edit_uri: ""
-
-nav:
- - Home: https://docs.hopsworks.ai/
- - Getting Started ↗: https://docs.hopsworks.ai/
- - Tutorials: https://docs.hopsworks.ai/
- - Concepts: https://docs.hopsworks.ai/
- - Guides: https://docs.hopsworks.ai/
- - Setup and Installation: https://docs.hopsworks.ai/
- - Administration: https://docs.hopsworks.ai/
- - API
:
- - Feature Store API Reference:
- - Connection: generated/api/connection_api.md
- - ExpectationSuite: generated/api/expectation_suite_api.md
- - FeatureStore: generated/api/feature_store_api.md
- - FeatureGroup: generated/api/feature_group_api.md
- - ExternalFeatureGroup: generated/api/external_feature_group_api.md
- - SpineGroup: generated/api/spine_group_api.md
- - FeatureView: generated/api/feature_view_api.md
- - TrainingDataset: generated/api/training_dataset_api.md
- - Storage Connector: generated/api/storage_connector_api.md
- - Feature: generated/api/feature_api.md
- - Query: generated/api/query_api.md
- - Transformation Functions: generated/api/transformation_functions_api.md
- - ValidationReport: generated/api/validation_report_api.md
- - Job: generated/api/job.md
- - Provenance Links: generated/api/links.md
- - Statistics:
- - Statistics: generated/api/statistics_api.md
- - Split Statistics: generated/api/split_statistics_api.md
- - Feature descriptive statistics: generated/api/feature_descriptive_statistics_api.md
- - Feature Monitoring:
- - Configuration: generated/api/feature_monitoring_config_api.md
- - Result: generated/api/feature_monitoring_result_api.md
- - Window: generated/api/feature_monitoring_window_config_api.md
- - Embedding:
- - EmbeddingIndex: generated/api/embedding_index_api.md
- - EmbeddingFeature: generated/api/embedding_feature_api.md
- - SimilarityFunctionType: generated/api/similarity_function_type_api.md
- # Added to allow navigation using the side drawer
- - Hopsworks API: https://docs.hopsworks.ai/hopsworks-api/latest/
- - MLOps API: https://docs.hopsworks.ai/machine-learning-api/latest/
- - Feature Store JavaDoc: https://docs.hopsworks.ai/feature-store-javadoc/latest/
- - Contributing: CONTRIBUTING.md
- - Community ↗: https://community.hopsworks.ai/
-
-theme:
- name: material
- custom_dir: docs/overrides
- favicon: assets/images/favicon.ico
- logo: assets/images/hops-logo.png
- icon:
- repo: fontawesome/brands/github
- font:
- text: "Roboto"
- code: "IBM Plex Mono"
- palette:
- accent: teal
- scheme: hopsworks
- features:
- - navigation.tabs
- - navigation.tabs.sticky
- - navigation.sections
- - navigation.indexes
-
-extra:
- analytics:
- provider: google
- property: G-64FEEXPSDN
- generator: false
- version:
- - provider: mike
- - default: latest
- social:
- - icon: fontawesome/brands/twitter
- link: https://twitter.com/logicalclocks
- - icon: fontawesome/brands/github
- link: https://github.com/logicalclocks/hopsworks
- - icon: fontawesome/brands/discourse
- link: https://community.hopsworks.ai/
- - icon: fontawesome/brands/linkedin
- link: https://www.linkedin.com/company/logicalclocks/
-
-extra_css:
- - css/custom.css
- - css/version-select.css
- - css/dropdown.css
- - css/marctech.css
-
-extra_javascript:
- - js/version-select.js
- - js/inject-api-links.js
- - js/dropdown.js
-
-plugins:
- - search
- - minify:
- minify_html: true
- minify_css: true
- minify_js: true
- - mike:
- canonical_version: latest
-
-markdown_extensions:
- - admonition
- - codehilite
- - footnotes
- - pymdownx.tabbed:
- alternate_style: true
- - pymdownx.arithmatex
- - pymdownx.superfences
- - pymdownx.details
- - pymdownx.caret
- - pymdownx.mark
- - pymdownx.tilde
- - pymdownx.critic
- - toc:
- permalink: "#"
- - pymdownx.tasklist:
- custom_checkbox: true
- - markdown_include.include:
- base_path: docs
diff --git a/hsfs/requirements-docs.txt b/hsfs/requirements-docs.txt
deleted file mode 100644
index 2a2e7927b..000000000
--- a/hsfs/requirements-docs.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-mkdocs==1.5.3
-mkdocs-material==9.5.17
-mike==2.0.0
-sphinx==7.3.7
-keras_autodoc @ git+https://git@github.com/logicalclocks/keras-autodoc
-markdown-include==0.8.1
-mkdocs-jupyter==0.24.3
-markdown==3.6
-pymdown-extensions==10.7.1
-mkdocs-macros-plugin==1.0.4
-mkdocs-minify-plugin>=0.2.0
-
diff --git a/hsml/auto_doc.py b/hsml/auto_doc.py
deleted file mode 100644
index 4c7ae26ee..000000000
--- a/hsml/auto_doc.py
+++ /dev/null
@@ -1,210 +0,0 @@
-#
-# Copyright 2021 Logical Clocks AB
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import pathlib
-import shutil
-import os
-import keras_autodoc
-
-JSON_METHODS = [
- "extract_fields_from_json",
- "from_json",
- "from_response_json",
- "json",
- "update_from_response_json",
-]
-
-PAGES = {
- # Model registry
- "connection_api.md": {
- "connection": ["hsml.connection.Connection"],
- "connection_properties": keras_autodoc.get_properties(
- "hsml.connection.Connection", exclude=["trust_store_path"]
- ),
- "connection_methods": keras_autodoc.get_methods("hsml.connection.Connection"),
- },
- "model-registry/model_registry_api.md": {
- "mr_get": ["hsml.connection.Connection.get_model_registry"],
- "mr_modules": keras_autodoc.get_properties(
- "hsml.model_registry.ModelRegistry",
- exclude=[
- "project_id",
- "project_name",
- "model_registry_id",
- "shared_registry_project_name",
- ],
- ),
- "mr_properties": keras_autodoc.get_properties(
- "hsml.model_registry.ModelRegistry",
- exclude=[
- "python",
- "sklearn",
- "tensorflow",
- "torch",
- ],
- ),
- "mr_methods": keras_autodoc.get_methods(
- "hsml.model_registry.ModelRegistry", exclude=["from_response_json"]
- ),
- },
- "model-registry/model_api.md": {
- "ml_create_tf": ["hsml.model_registry.ModelRegistry.tensorflow.create_model"],
- "ml_create_th": ["hsml.model_registry.ModelRegistry.torch.create_model"],
- "ml_create_sl": ["hsml.model_registry.ModelRegistry.sklearn.create_model"],
- "ml_create_py": ["hsml.model_registry.ModelRegistry.python.create_model"],
- "ml_get": ["hsml.model_registry.ModelRegistry.get_model"],
- "ml_properties": keras_autodoc.get_properties("hsml.model.Model"),
- "ml_methods": keras_autodoc.get_methods(
- "hsml.model.Model",
- exclude=[
- "from_response_json",
- "json",
- "to_dict",
- "update_from_response_json",
- ],
- ),
- },
- "model-registry/model_schema.md": {},
- "model-registry/model_schema_api.md": {
- "schema": ["hsml.schema.Schema"],
- "schema_dict": ["hsml.schema.Schema.to_dict"],
- "model_schema": ["hsml.model_schema.ModelSchema"],
- "model_schema_dict": ["hsml.model_schema.ModelSchema.to_dict"],
- },
- "model-registry/links.md": {
- "links_properties": keras_autodoc.get_properties(
- "hsml.core.explicit_provenance.Links"
- ),
- "artifact_properties": keras_autodoc.get_properties(
- "hsml.core.explicit_provenance.Artifact"
- ),
- },
- # Model Serving
- "model-serving/model_serving_api.md": {
- "ms_get": ["hsml.connection.Connection.get_model_serving"],
- "ms_properties": keras_autodoc.get_properties(
- "hsml.model_serving.ModelServing"
- ),
- "ms_methods": keras_autodoc.get_methods(
- "hsml.model_serving.ModelServing", exclude=["from_response_json"]
- ),
- },
- "model-serving/deployment_api.md": {
- "ms_get_model_serving": ["hsml.connection.Connection.get_model_serving"],
- "ms_get_deployments": [
- "hsml.model_serving.ModelServing.get_deployment",
- "hsml.model_serving.ModelServing.get_deployment_by_id",
- "hsml.model_serving.ModelServing.get_deployments",
- ],
- "ms_create_deployment": ["hsml.model_serving.ModelServing.create_deployment"],
- "m_deploy": ["hsml.model.Model.deploy"],
- "p_deploy": ["hsml.predictor.Predictor.deploy"],
- "dep_properties": keras_autodoc.get_properties("hsml.deployment.Deployment"),
- "dep_methods": keras_autodoc.get_methods(
- "hsml.deployment.Deployment", exclude=JSON_METHODS + ["from_predictor"]
- ),
- },
- "model-serving/predictor_api.md": {
- "ms_get_model_serving": ["hsml.connection.Connection.get_model_serving"],
- "ms_create_predictor": ["hsml.model_serving.ModelServing.create_predictor"],
- "pred_properties": keras_autodoc.get_properties("hsml.predictor.Predictor"),
- "pred_methods": keras_autodoc.get_methods(
- "hsml.predictor.Predictor",
- exclude=JSON_METHODS + ["for_model"],
- ),
- },
- "model-serving/transformer_api.md": {
- "ms_get_model_serving": ["hsml.connection.Connection.get_model_serving"],
- "ms_create_transformer": ["hsml.model_serving.ModelServing.create_transformer"],
- "trans_properties": keras_autodoc.get_properties(
- "hsml.transformer.Transformer"
- ),
- "trans_methods": keras_autodoc.get_methods(
- "hsml.transformer.Transformer", exclude=JSON_METHODS
- ),
- },
- "model-serving/inference_logger_api.md": {
- "il": ["hsml.inference_logger.InferenceLogger"],
- "il_properties": keras_autodoc.get_properties(
- "hsml.inference_logger.InferenceLogger"
- ),
- "il_methods": keras_autodoc.get_methods(
- "hsml.inference_logger.InferenceLogger", exclude=JSON_METHODS
- ),
- },
- "model-serving/inference_batcher_api.md": {
- "ib": ["hsml.inference_batcher.InferenceBatcher"],
- "ib_properties": keras_autodoc.get_properties(
- "hsml.inference_batcher.InferenceBatcher"
- ),
- "ib_methods": keras_autodoc.get_methods(
- "hsml.inference_batcher.InferenceBatcher", exclude=JSON_METHODS
- ),
- },
- "model-serving/resources_api.md": {
- "res": ["hsml.resources.Resources"],
- "res_properties": keras_autodoc.get_properties("hsml.resources.Resources"),
- "res_methods": keras_autodoc.get_methods(
- "hsml.resources.Resources", exclude=JSON_METHODS
- ),
- },
- "model-serving/predictor_state_api.md": {
- "ps_get": ["hsml.deployment.Deployment.get_state"],
- "ps_properties": keras_autodoc.get_properties(
- "hsml.predictor_state.PredictorState"
- ),
- "ps_methods": keras_autodoc.get_methods(
- "hsml.predictor_state.PredictorState", exclude=JSON_METHODS
- ),
- },
- "model-serving/predictor_state_condition_api.md": {
- "psc_get": ["hsml.predictor_state.PredictorState.condition"],
- "psc_properties": keras_autodoc.get_properties(
- "hsml.predictor_state_condition.PredictorStateCondition"
- ),
- "psc_methods": keras_autodoc.get_methods(
- "hsml.predictor_state_condition.PredictorStateCondition",
- exclude=JSON_METHODS,
- ),
- },
-}
-
-hsml_dir = pathlib.Path(__file__).resolve().parents[0]
-if "GITHUB_SHA" in os.environ:
- commit_sha = os.environ["GITHUB_SHA"]
- project_url = f"https://github.com/logicalclocks/machine-learning-api/tree/{commit_sha}/python"
-else:
- branch_name = os.environ.get("GITHUB_BASE_REF", "master")
- project_url = f"https://github.com/logicalclocks/machine-learning-api/blob/{branch_name}/python"
-
-
-def generate(dest_dir):
- doc_generator = keras_autodoc.DocumentationGenerator(
- PAGES,
- project_url=project_url,
- template_dir="./docs/templates",
- titles_size="###",
- extra_aliases={},
- max_signature_line_length=100,
- )
- shutil.copyfile(hsml_dir / "CONTRIBUTING.md", dest_dir / "CONTRIBUTING.md")
- shutil.copyfile(hsml_dir / "README.md", dest_dir / "index.md")
-
- doc_generator.generate(dest_dir / "generated")
-
-
-if __name__ == "__main__":
- generate(hsml_dir / "docs")
diff --git a/hsml/docs/CONTRIBUTING.md b/hsml/docs/CONTRIBUTING.md
deleted file mode 100644
index b287467c6..000000000
--- a/hsml/docs/CONTRIBUTING.md
+++ /dev/null
@@ -1,215 +0,0 @@
-## Python development setup
----
-
-- Fork and clone the repository
-
-- Create a new Python environment with your favourite environment manager, e.g. virtualenv or conda
-
-- Install repository in editable mode with development dependencies:
-
- ```bash
- cd python
- pip install -e ".[dev]"
- ```
-
-- Install [pre-commit](https://pre-commit.com/) and then activate its hooks. pre-commit is a framework for managing and maintaining multi-language pre-commit hooks. The Model Registry uses pre-commit to ensure code-style and code formatting through [ruff](https://docs.astral.sh/ruff/). Run the following commands from the `python` directory:
-
- ```bash
- cd python
- pip install --user pre-commit
- pre-commit install
- ```
-
- Afterwards, pre-commit will run whenever you commit.
-
-- To run formatting and code-style separately, you can configure your IDE, such as VSCode, to use [ruff](https://docs.astral.sh/ruff/tutorial/#getting-started):
-
- ```bash
- cd python
- ruff check --fix
- ruff format
- ```
-
-### Python documentation
-
-We follow a few best practices for writing the Python documentation:
-
-1. Use the google docstring style:
-
- ```python
- """[One Line Summary]
-
- [Extended Summary]
-
- [!!! example
- import xyz
- ]
-
- # Arguments
- arg1: Type[, optional]. Description[, defaults to `default`]
- arg2: Type[, optional]. Description[, defaults to `default`]
-
- # Returns
- Type. Description.
-
- # Raises
- Exception. Description.
- """
- ```
-
- If Python 3 type annotations are used, they are inserted automatically.
-
-
-2. Model registry entity engine methods (e.g. ModelEngine etc.) only require a single line docstring.
-3. REST Api implementations (e.g. ModelApi etc.) should be fully documented with docstrings without defaults.
-4. Public Api such as metadata objects should be fully documented with defaults.
-
-#### Setup and Build Documentation
-
-We use `mkdocs` together with `mike` ([for versioning](https://github.com/jimporter/mike/)) to build the documentation and a plugin called `keras-autodoc` to auto generate Python API documentation from docstrings.
-
-**Background about `mike`:**
- `mike` builds the documentation and commits it as a new directory to the gh-pages branch. Each directory corresponds to one version of the documentation. Additionally, `mike` maintains a json in the root of gh-pages with the mappings of versions/aliases for each of the directories available. With aliases you can define extra names like `dev` or `latest`, to indicate stable and unstable releases.
-
-1. Currently we are using our own version of `keras-autodoc`
-
- ```bash
- pip install git+https://github.com/logicalclocks/keras-autodoc
- ```
-
-2. Install HSML with `docs` extras:
-
- ```bash
- pip install -e .[dev,docs]
- ```
-
-3. To build the docs, first run the auto doc script:
-
- ```bash
- cd ..
- python auto_doc.py
- ```
-
-##### Option 1: Build only current version of docs
-
-4. Either build the docs, or serve them dynamically:
-
- Note: Links and pictures might not resolve properly later on when checking with this build.
- The reason for that is that the docs are deployed with versioning on docs.hopsworks.ai and
- therefore another level is added to all paths, e.g. `docs.hopsworks.ai/[version-or-alias]`.
- Using relative links should not be affected by this, however, building the docs with version
- (Option 2) is recommended.
-
- ```bash
- mkdocs build
- # or
- mkdocs serve
- ```
-
-##### Option 2 (Preferred): Build multi-version doc with `mike`
-
-###### Versioning on docs.hopsworks.ai
-
-On docs.hopsworks.ai we implement the following versioning scheme:
-
-- current master branches (e.g. of hsml corresponding to master of Hopsworks): rendered as current Hopsworks snapshot version, e.g. **2.2.0-SNAPSHOT [dev]**, where `dev` is an alias to indicate that this is an unstable version.
-- the latest release: rendered with full current version, e.g. **2.1.5 [latest]** with `latest` alias to indicate that this is the latest stable release.
-- previous stable releases: rendered without alias, e.g. **2.1.4**.
-
-###### Build Instructions
-
-4. For this you can either checkout and make a local copy of the `upstream/gh-pages` branch, where
-`mike` maintains the current state of docs.hopsworks.ai, or just build documentation for the branch you are updating:
-
- Building *one* branch:
-
- Checkout your dev branch with modified docs:
- ```bash
- git checkout [dev-branch]
- ```
-
- Generate API docs if necessary:
- ```bash
- python auto_doc.py
- ```
-
- Build docs with a version and alias
- ```bash
- mike deploy [version] [alias] --update-alias
-
- # for example, if you are updating documentation to be merged to master,
- # which will become the new SNAPSHOT version:
- mike deploy 2.2.0-SNAPSHOT dev --update-alias
-
- # if you are updating docs of the latest stable release branch
- mike deploy [version] latest --update-alias
-
- # if you are updating docs of a previous stable release branch
- mike deploy [version]
- ```
-
- If no gh-pages branch existed in your local repository, this will have created it.
-
- **Important**: If no previous docs were built, you will have to choose a version as default to be loaded as index, as follows
-
- ```bash
- mike set-default [version-or-alias]
- ```
-
- You can now checkout the gh-pages branch and serve:
- ```bash
- git checkout gh-pages
- mike serve
- ```
-
- You can also list all available versions/aliases:
- ```bash
- mike list
- ```
-
- Delete and reset your local gh-pages branch:
- ```bash
- mike delete --all
-
- # or delete single version
- mike delete [version-or-alias]
- ```
-
-#### Adding new API documentation
-
-To add new documentation for APIs, you need to add information about the method/class to document to the `auto_doc.py` script:
-
-```python
-PAGES = {
- "connection.md": [
- "hsml.connection.Connection.connection",
- "hsml.connection.Connection.setup_databricks",
- ]
- "new_template.md": [
- "module",
- "xyz.asd"
- ]
-}
-```
-
-Now you can add a template markdown file to the `docs/templates` directory with the name you specified in the auto-doc script. The `new_template.md` file should contain a tag to identify the place at which the API documentation should be inserted:
-
-```
-## The XYZ package
-
-{{module}}
-
-Some extra content here.
-
-!!! example
- ```python
- import xyz
- ```
-
-{{xyz.asd}}
-```
-
-Finally, run the `auto_doc.py` script, as decribed above, to update the documentation.
-
-For information about Markdown syntax and possible Admonitions/Highlighting etc. see
-the [Material for Mkdocs themes reference documentation](https://squidfunk.github.io/mkdocs-material/reference/abbreviations/).
diff --git a/hsml/docs/assets/images/favicon.ico b/hsml/docs/assets/images/favicon.ico
deleted file mode 100644
index ab7573067..000000000
Binary files a/hsml/docs/assets/images/favicon.ico and /dev/null differ
diff --git a/hsml/docs/assets/images/hops-logo.png b/hsml/docs/assets/images/hops-logo.png
deleted file mode 100644
index d3625ae07..000000000
Binary files a/hsml/docs/assets/images/hops-logo.png and /dev/null differ
diff --git a/hsml/docs/css/custom.css b/hsml/docs/css/custom.css
deleted file mode 100644
index 5ba3208e1..000000000
--- a/hsml/docs/css/custom.css
+++ /dev/null
@@ -1,115 +0,0 @@
-[data-md-color-scheme="hopsworks"] {
- --md-primary-fg-color: #1EB382;
- --md-secondary-fg-color: #188a64;
- --md-tertiary-fg-color: #0d493550;
- --md-quaternary-fg-color: #fdfdfd;
- --border-radius-variable: 5px;
-}
-
-.md-footer__inner:not([hidden]) {
- display: none
-}
-
-/* Lex did stuff here */
-.svg_topnav{
- width: 12px;
- filter: invert(100);
-}
-.svg_topnav:hover{
- width: 12px;
- filter: invert(10);
-}
-
-.md-header[data-md-state=shadow] {
- box-shadow: 0 0 0 0;
-}
-
-.md-tabs__item {
- min-width: 2.25rem;
-}
-
-.md-tabs__item:hover {
- background-color: var(--md-tertiary-fg-color);
- transition: background-color 450ms;
-
-}
-
-/*
-.md-sidebar__scrollwrap{
- background-color: var(--md-quaternary-fg-color);
- padding: 15px 5px 5px 5px;
- border-radius: var(--border-radius-variable);
-}
-*/
-.md-nav__link:focus{
-}
-
-.image_logo_02{
- width:450px;
-}
-
-/* End of Lex did stuff here */
-
-.md-header__button.md-logo {
- margin: .1rem;
- padding: .1rem;
-}
-
-.md-header__button.md-logo img, .md-header__button.md-logo svg {
- display: block;
- width: 1.8rem;
- height: 1.8rem;
- fill: currentColor;
-}
-
-.md-tabs {
- width: 100%;
- overflow: auto;
- color: var(--md-primary-bg-color);
- background-color: var(--md-secondary-fg-color);
- transition: background-color 250ms;
-}
-
-
-.wrapper {
- display: grid;
- grid-template-columns: repeat(4, 1fr);
- gap: 10px;
- grid-auto-rows: minmax(100px, auto);
-}
-
-.wrapper * {
- border: 2px solid green;
- text-align: center;
- padding: 70px 0;
-}
-
-.one {
- grid-column: 1 / 2;
- grid-row: 1;
-}
-.two {
- grid-column: 2 / 3;
- grid-row: 1;
-}
-.three {
- grid-column: 3 / 4;
- grid-row: 1;
-}
-.four {
- grid-column: 4 / 5;
- grid-row: 1;
-}
-.five {
- grid-column: 1 / 3;
- grid-row: 2;
-}
-.six {
- grid-column: 3 / 5;
- grid-row: 2;
-}
-
-/* Jupyter Stuff */
-.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt {
- display: none !important;
-}
diff --git a/hsml/docs/css/dropdown.css b/hsml/docs/css/dropdown.css
deleted file mode 100644
index 886858909..000000000
--- a/hsml/docs/css/dropdown.css
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Style The Dropdown Button */
-.dropbtn {
- color: white;
- border: none;
- cursor: pointer;
-}
-
-.md-tabs__list {
- contain: inherit;
-}
-.md-tabs {
- overflow: inherit;
-}
-.md-header {
- z-index: 1000 !important;
-}
-
-/* The container
- needed to position the dropdown content */
-.dropdown {
- position: absolute;
- display: inline-block;
-}
-
-/* Dropdown Content (Hidden by Default) */
-.dropdown-content {
- display:none;
- font-size: 13px;
- position: absolute;
- background-color: #f9f9f9;
- min-width: 160px;
- box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
- z-index: 1000;
- border-radius: 2px;
- left:-15px;
-}
-
-/* Links inside the dropdown */
-.dropdown-content a {
- color: black;
- padding: 12px 16px;
- text-decoration: none;
- display: block;
-}
-
-/* Change color of dropdown links on hover */
-.dropdown-content a:hover {background-color: #f1f1f1}
-
-/* Show the dropdown menu on hover */
-.dropdown:hover .dropdown-content {
- display: block;
-}
-
-/* Change the background color of the dropdown button when the dropdown content is shown */
-.dropdown:hover .dropbtn {
-}
diff --git a/hsml/docs/css/marctech.css b/hsml/docs/css/marctech.css
deleted file mode 100644
index 8bb58c97b..000000000
--- a/hsml/docs/css/marctech.css
+++ /dev/null
@@ -1,1047 +0,0 @@
-:root {
- --md-primary-fg-color: #1EB382;
- --md-secondary-fg-color: #188a64;
- --md-tertiary-fg-color: #0d493550;
- --md-quaternary-fg-color: #fdfdfd;
- --md-fiftuary-fg-color: #2471cf;
- --border-radius-variable: 5px;
- --border-width:1px;
- }
-
- .marctech_main a{
- color: var(--md-fiftuary-fg-color);
- border-bottom: 1px dotted var(--md-fiftuary-fg-color) !important;
- text-decoration: dotted !important;}
-
- .marctech_main a:hover{
- border-bottom: 1px dotted var(--md-primary-fg-color)!important;
- }
-
- .marctech_main a:visited{
- color: var(--md-tertiary-fg-color);
- border-bottom: 1px dotted var(--md-tertiary-fg-color) !important;
-
- }
-
- .w-layout-grid {
- display: -ms-grid;
- display: grid;
- grid-auto-columns: 1fr;
- -ms-grid-columns: 1fr 1fr;
- grid-template-columns: 1fr 1fr;
- -ms-grid-rows: auto auto;
- grid-template-rows: auto auto;
- grid-row-gap: 16px;
- grid-column-gap: 16px;
- }
-
- .image_logo{
- width: 69%;
- background-color: white;
- z-index: 50;
- padding: 0px 15px 0px 15px;
- margin-bottom: 10px;
- }
-
- .layer_02{
- pointer-events: none;
- }
-
- .round-frame{
- pointer-events: initial;
- }
-
- .marctech_main {
- margin-top:-20px;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- margin-bottom: 55px;
- }
-
- .collumns {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- height: 100%;
- -webkit-box-align: stretch;
- -webkit-align-items: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- }
-
- .col_heading {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- }
-
- .enterprisefs {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- }
-
- .enterprise_ai {
- -webkit-align-self: center;
- -ms-flex-item-align: center;
- -ms-grid-row-align: center;
- align-self: center;
- -webkit-box-flex: 1;
- -webkit-flex: 1;
- -ms-flex: 1;
- flex: 1;
- }
-
- .side-content {
- z-index: 0;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 240px;
- height: 100%;
- margin-top: 10px;
- margin-bottom: 10px;
- padding: 20px 10px;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-align-content: flex-start;
- -ms-flex-line-pack: start;
- align-content: flex-start;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 10px;
- background-color:var(--md-quaternary-fg-color);
- }
- .body {
- padding: 40px;
- font-family: Roboto, sans-serif;
- }
-
- .green {
- color: #1eb182;
- font-size: 1.2vw;
- }
-
- .rec_frame {
- position: relative;
- z-index: 1;
- display: inline-block;
- min-width: 150px;
- margin-top: 10px;
- margin-right: 10px;
- margin-left: 10px;
- padding: 10px 10px;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 10px;
- background-color: #fff;
- box-shadow: 4px 4px 0 0 rgba(88, 88, 88, 0.16);
- -webkit-transition: box-shadow 200ms ease, border-color 200ms ease;
- transition: box-shadow 200ms ease, border-color 200ms ease;
- color: #585858;
- text-align: center;
- cursor: pointer;
- }
-
- .rec_frame:hover {
- border-color: #c2c2c2;
- box-shadow: none;
- }
-
- .name_item {
- font-size: 0.7rem;
- line-height: 120%;
- font-weight: 700;
- }
-
- .name_item.db {
- position: relative;
- z-index: 3;
- text-align: left;
- }
-
- .name_item.small {
- font-size: 0.6rem;
- font-weight: 500;
- }
-
- .name_item.ingrey {
- padding-bottom: 20px;
- }
-
- .db_frame-mid {
- position: relative;
- z-index: 1;
- margin-top: -8px;
- padding: 5px 2px;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 0px 0% 50% 50%;
- background-color: #fff;
- color: #585858;
- text-align: center;
- }
-
- .db_frame-top {
- position: relative;
- z-index: 2;
- padding: 5px 2px;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 50%;
- background-color: #fff;
- color: #585858;
- text-align: center;
- }
-
- .icondb {
- position: relative;
- width: 25px;
- min-width: 25px;
- margin-right: 10px;
- }
-
- .db_frame {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 150px;
- height: 55px;
- padding: 20px 10px;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 10px;
- background-color: #fff;
- box-shadow: 4px 4px 0 0 rgba(88, 88, 88, 0.16);
- -webkit-transition: box-shadow 200ms ease, border-color 200ms ease;
- transition: box-shadow 200ms ease, border-color 200ms ease;
- color: #585858;
- text-align: center;
- cursor: pointer;
- }
-
- .db_frame:hover {
- border-color: #c2c2c2;
- box-shadow: none;
- }
-
- .grid {
- -ms-grid-rows: auto auto auto;
- grid-template-rows: auto auto auto;
- }
-
- .arrowdown {
- position: relative;
- z-index: 0;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- margin-top: -10px;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- }
-
- .heading_MT {
- margin-top: 0px !important;
- margin-bottom: 0px !important;
- font-size: 1.3rem !important;
- white-space: nowrap !important;
- }
-
- .head_col {
- padding-left: 10px;
- }
-
- .MT_heading3 {
- margin-top: 0px !important ;
- font-size: 0.8rem !important;
- }
-
- .MT_heading3.green {
- color: #1eb182 !important;
- }
-
- .column_sides {
- position: relative;
- z-index: 2;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: justify;
- -webkit-justify-content: space-between;
- -ms-flex-pack: justify;
- justify-content: space-between;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- }
-
- .hopsicon {
- width: 45px;
- height: 45px;
- }
-
- .column_center {
- z-index: 10;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- }
-
- .center-content {
- z-index: -50;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 750px;
- height: 670px;
- margin-top: 10px;
- margin-bottom: 10px;
- padding: 20px 10px;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-align-content: center;
- -ms-flex-line-pack: center;
- align-content: center;
- border-radius: 10px;
- background-color: transparent;
- }
-
- .image {
- width: 260px;
- }
-
- .layer_01 {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: stretch;
- -webkit-align-items: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- }
-
- .name_center {
- font-size: 1rem;
- font-weight: 700;
- }
-
- .rec_frame_main {
- position: relative;
- z-index: 1;
- margin-top: 10px;
- margin-right: 10px;
- margin-left: 10px;
- padding: 5px 10px;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #1eb182;
- border-radius: 10px;
- background-color: #e6fdf6;
- box-shadow: 4px 4px 0 0 #dcf7ee;
- -webkit-transition: box-shadow 200ms ease, border-color 200ms ease;
- transition: box-shadow 200ms ease, border-color 200ms ease;
- color: #1eb182;
- text-align: center;
- cursor: pointer;
- }
-
- .rec_frame_main:hover {
- border-color: #9fecd4;
- box-shadow: none;
- }
-
- .rec_frame_main.no_content {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- height: 100%;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- box-shadow: 4px 4px 0 0 #dcf7ee;
- }
-
- .rec_frame_main.no_content:hover {
- border-color: #1eb182;
- box-shadow: 4px 4px 0 0 rgba(88, 88, 88, 0.16);
- }
-
- .name_item_02 {
- font-size: 0.85rem;
- font-weight: 700;
- }
-
- .grid-infra {
- padding-top: 20px;
- -ms-grid-columns: 1fr 1fr 1fr 1fr;
- grid-template-columns: 1fr 1fr 1fr 1fr;
- -ms-grid-rows: auto;
- grid-template-rows: auto;
- }
-
- .rec_frame_main-white {
- position: relative;
- z-index: 1;
- display: inline-block;
- width: 100%;
- margin-top: 10px;
- margin-bottom: 10px;
- padding: 5px 10px;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #1eb182;
- border-radius: 10px;
- background-color: #fff;
- box-shadow: 4px 4px 0 0 rgba(88, 88, 88, 0.16);
- -webkit-transition: box-shadow 200ms ease, border-color 200ms ease;
- transition: box-shadow 200ms ease, border-color 200ms ease;
- color: #1eb182;
- text-align: center;
- cursor: pointer;
- }
-
- .rec_frame_main-white:hover {
- border-color: #c2c2c2;
- box-shadow: none;
- }
-
- .rec_frame_main-white.dotted {
- border-style: dotted;
- }
-
- .column {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: justify;
- -webkit-justify-content: space-between;
- -ms-flex-pack: justify;
- justify-content: space-between;
- -webkit-box-align: stretch;
- -webkit-align-items: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- }
-
- .columns_center {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -webkit-flex-direction: row;
- -ms-flex-direction: row;
- flex-direction: row;
- -webkit-box-pack: justify;
- -webkit-justify-content: space-between;
- -ms-flex-pack: justify;
- justify-content: space-between;
- }
-
- .non-bold {
- font-weight: 400;
- }
-
- .logo-holder {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- }
-
- .infra {
- text-align: center;
- position: relative;
- z-index: 30;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- padding: 10px;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- border: 1px dashed #000;
- border-radius: 6px;
- background-color: #fff;
- cursor: pointer;
- }
-
- .infra:hover {
- border-style: solid;
- border-color: #585858;
- }
-
- .text_and_icon {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- }
-
- .svg_icon {
- width: 33px;
- margin-right: 10px;
- margin-left: 10px;
- }
-
- .layer_02 {
- position: absolute;
- z-index: 10;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 96%;
- height: 90%;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: stretch;
- -webkit-align-items: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- border-style: solid;
- border-width: calc (var(--border-width)*2);
- border-color: #bbbbbb50 ;
- border-radius: 100%;
- background-color: transparent;
- }
-
- .round-frame {
- position: absolute;
- left: 0%;
- top: auto;
- right: auto;
- bottom: 0%;
- z-index: 10;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 120px;
- height: 120px;
- margin: 10px;
- padding: 20px;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- border-style: solid;
- border-width: var(--border-width);
- border-color: #585858;
- border-radius: 100%;
- background-color: #fff;
- outline-color: #fff;
- outline-offset: 0px;
- outline-style: solid;
- outline-width: 7px;
- -webkit-transition: box-shadow 200ms ease, border-color 200ms ease;
- transition: box-shadow 200ms ease, border-color 200ms ease;
- color: #585858;
- text-align: center;
- cursor: pointer;
- }
-
- .round-frame:hover {
- border-color: #c2c2c2;
- box-shadow: none;
- }
-
- .round-frame.top-left {
- left: 4%;
- top: 15%;
- right: auto;
- bottom: auto;
- }
-
- .round-frame.bottom-left {
- left: 4%;
- bottom: 15%;
- }
-
- .round-frame.top-right {
- left: auto;
- top: 15%;
- right: 4%;
- bottom: auto;
- }
-
- .round-frame.bottom-right {
- left: auto;
- top: auto;
- right: 4%;
- bottom: 15%;
- padding: 10px;
- }
-
- .side-holder {
- z-index: -1;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- height: 630px;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- }
-
- .infra-icon {
- width: 25px;
- height: 25px;
- }
-
- .div-block {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- height: 100%;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: justify;
- -webkit-justify-content: space-between;
- -ms-flex-pack: justify;
- justify-content: space-between;
- }
-
- #w-node-a2a9b648-f5dd-74e5-e1c2-f7aaf4fa1fcd-46672785 {
- -ms-grid-column: span 1;
- grid-column-start: span 1;
- -ms-grid-column-span: 1;
- grid-column-end: span 1;
- -ms-grid-row: span 1;
- grid-row-start: span 1;
- -ms-grid-row-span: 1;
- grid-row-end: span 1;
- }
-
- #w-node-_466aa2bf-88bf-5a65-eab4-fc1eb95e7384-46672785 {
- -ms-grid-column: span 1;
- grid-column-start: span 1;
- -ms-grid-column-span: 1;
- grid-column-end: span 1;
- -ms-grid-row: span 1;
- grid-row-start: span 1;
- -ms-grid-row-span: 1;
- grid-row-end: span 1;
- }
-
- #w-node-_87009ba3-d9a6-e0b7-4cce-581190a19cf3-46672785 {
- -ms-grid-column: span 1;
- grid-column-start: span 1;
- -ms-grid-column-span: 1;
- grid-column-end: span 1;
- -ms-grid-row: span 1;
- grid-row-start: span 1;
- -ms-grid-row-span: 1;
- grid-row-end: span 1;
- }
-
- #w-node-_4a479fbb-90c7-9f47-d439-20aa6a224339-46672785 {
- -ms-grid-column: span 1;
- grid-column-start: span 1;
- -ms-grid-column-span: 1;
- grid-column-end: span 1;
- -ms-grid-row: span 1;
- grid-row-start: span 1;
- -ms-grid-row-span: 1;
- grid-row-end: span 1;
- }
-
-
- /*
-
-
- inherited from the original template
-
- */
-
- .w-container .w-row {
- margin-left: -10px;
- margin-right: -10px;
- }
- .w-row:before,
- .w-row:after {
- content: " ";
- display: table;
- grid-column-start: 1;
- grid-row-start: 1;
- grid-column-end: 2;
- grid-row-end: 2;
- }
- .w-row:after {
- clear: both;
- }
- .w-row .w-row {
- margin-left: 0;
- margin-right: 0;
- }
- .w-col {
- position: relative;
- float: left;
- width: 100%;
- min-height: 1px;
- padding-left: 10px;
- padding-right: 10px;
- }
- .w-col .w-col {
- padding-left: 0;
- padding-right: 0;
- }
- .w-col-1 {
- width: 8.33333333%;
- }
- .w-col-2 {
- width: 16.66666667%;
- }
- .w-col-3 {
- width: 25%;
- }
- .w-col-4 {
- width: 33.33333333%;
- }
- .w-col-5 {
- width: 41.66666667%;
- }
- .w-col-6 {
- width: 50%;
- }
- .w-col-7 {
- width: 58.33333333%;
- }
- .w-col-8 {
- width: 66.66666667%;
- }
- .w-col-9 {
- width: 75%;
- }
- .w-col-10 {
- width: 83.33333333%;
- }
- .w-col-11 {
- width: 91.66666667%;
- }
- .w-col-12 {
- width: 100%;
- }
- .w-hidden-main {
- display: none !important;
- }
- @media screen and (max-width: 991px) {
- .w-container {
- max-width: 728px;
- }
- .w-hidden-main {
- display: inherit !important;
- }
- .w-hidden-medium {
- display: none !important;
- }
- .w-col-medium-1 {
- width: 8.33333333%;
- }
- .w-col-medium-2 {
- width: 16.66666667%;
- }
- .w-col-medium-3 {
- width: 25%;
- }
- .w-col-medium-4 {
- width: 33.33333333%;
- }
- .w-col-medium-5 {
- width: 41.66666667%;
- }
- .w-col-medium-6 {
- width: 50%;
- }
- .w-col-medium-7 {
- width: 58.33333333%;
- }
- .w-col-medium-8 {
- width: 66.66666667%;
- }
- .w-col-medium-9 {
- width: 75%;
- }
- .w-col-medium-10 {
- width: 83.33333333%;
- }
- .w-col-medium-11 {
- width: 91.66666667%;
- }
- .w-col-medium-12 {
- width: 100%;
- }
- .w-col-stack {
- width: 100%;
- left: auto;
- right: auto;
- }
- }
- @media screen and (max-width: 767px) {
- .w-hidden-main {
- display: inherit !important;
- }
- .w-hidden-medium {
- display: inherit !important;
- }
- .w-hidden-small {
- display: none !important;
- }
- .w-row,
- .w-container .w-row {
- margin-left: 0;
- margin-right: 0;
- }
- .w-col {
- width: 100%;
- left: auto;
- right: auto;
- }
- .w-col-small-1 {
- width: 8.33333333%;
- }
- .w-col-small-2 {
- width: 16.66666667%;
- }
- .w-col-small-3 {
- width: 25%;
- }
- .w-col-small-4 {
- width: 33.33333333%;
- }
- .w-col-small-5 {
- width: 41.66666667%;
- }
- .w-col-small-6 {
- width: 50%;
- }
- .w-col-small-7 {
- width: 58.33333333%;
- }
- .w-col-small-8 {
- width: 66.66666667%;
- }
- .w-col-small-9 {
- width: 75%;
- }
- .w-col-small-10 {
- width: 83.33333333%;
- }
- .w-col-small-11 {
- width: 91.66666667%;
- }
- .w-col-small-12 {
- width: 100%;
- }
- }
- @media screen and (max-width: 479px) {
- .w-container {
- max-width: none;
- }
- .w-hidden-main {
- display: inherit !important;
- }
- .w-hidden-medium {
- display: inherit !important;
- }
- .w-hidden-small {
- display: inherit !important;
- }
- .w-hidden-tiny {
- display: none !important;
- }
- .w-col {
- width: 100%;
- }
- .w-col-tiny-1 {
- width: 8.33333333%;
- }
- .w-col-tiny-2 {
- width: 16.66666667%;
- }
- .w-col-tiny-3 {
- width: 25%;
- }
- .w-col-tiny-4 {
- width: 33.33333333%;
- }
- .w-col-tiny-5 {
- width: 41.66666667%;
- }
- .w-col-tiny-6 {
- width: 50%;
- }
- .w-col-tiny-7 {
- width: 58.33333333%;
- }
- .w-col-tiny-8 {
- width: 66.66666667%;
- }
- .w-col-tiny-9 {
- width: 75%;
- }
- .w-col-tiny-10 {
- width: 83.33333333%;
- }
- .w-col-tiny-11 {
- width: 91.66666667%;
- }
- .w-col-tiny-12 {
- width: 100%;
- }
- }
diff --git a/hsml/docs/css/version-select.css b/hsml/docs/css/version-select.css
deleted file mode 100644
index 3b908ae84..000000000
--- a/hsml/docs/css/version-select.css
+++ /dev/null
@@ -1,36 +0,0 @@
-@media only screen and (max-width:76.1875em) {
-}
-
-#version-selector select.form-control {
- appearance: none;
- -webkit-appearance: none;
- -moz-appearance: none;
-
- background-color: #F5F5F5;
-
- background-position: center right;
- background-repeat: no-repeat;
- border: 0px;
- border-radius: 2px;
- /* box-shadow: 0px 1px 3px rgb(0 0 0 / 10%); */
- color: inherit;
- width: -webkit-fill-available;
- width: -moz-available;
- max-width: 200px;
- font-size: inherit;
- /* font-weight: 600; */
- margin: 10px;
- overflow: hidden;
- padding: 7px 10px;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-#version-selector::after {
- content: '⌄';
- font-family: inherit;
- font-size: 22px;
- margin: -35px;
- vertical-align: 7%;
- padding-bottom: 10px;
-}
diff --git a/hsml/docs/index.md b/hsml/docs/index.md
deleted file mode 100644
index ee835ddc7..000000000
--- a/hsml/docs/index.md
+++ /dev/null
@@ -1,141 +0,0 @@
-# Hopsworks Model Management
-
-
-
-
-
-
-
-
-
-
-
-
-HSML is the library to interact with the Hopsworks Model Registry and Model Serving. The library makes it easy to export, manage and deploy models.
-
-However, to connect from an external Python environment additional connection information, such as host and port, is required.
-
-## Getting Started On Hopsworks
-
-Get started easily by registering an account on [Hopsworks Serverless](https://app.hopsworks.ai/). Create your project and a [new Api key](https://docs.hopsworks.ai/latest/user_guides/projects/api_key/create_api_key/). In a new python environment with Python 3.8 or higher, install the [client library](https://docs.hopsworks.ai/latest/user_guides/client_installation/) using pip:
-
-```bash
-# Get all Hopsworks SDKs: Feature Store, Model Serving and Platform SDK
-pip install hopsworks
-# or just the Model Registry and Model Serving SDK
-pip install hsml
-```
-
-You can start a notebook and instantiate a connection and get the project feature store handler.
-
-```python
-import hopsworks
-
-project = hopsworks.login() # you will be prompted for your api key
-
-mr = project.get_model_registry()
-# or
-ms = project.get_model_serving()
-```
-
-or using `hsml` directly:
-
-```python
-import hsml
-
-connection = hsml.connection(
- host="c.app.hopsworks.ai", #
- project="your-project",
- api_key_value="your-api-key",
-)
-
-mr = connection.get_model_registry()
-# or
-ms = connection.get_model_serving()
-```
-
-Create a new model
-```python
-model = mr.tensorflow.create_model(name="mnist",
- version=1,
- metrics={"accuracy": 0.94},
- description="mnist model description")
-model.save("/tmp/model_directory") # or /tmp/model_file
-```
-
-Download a model
-```python
-model = mr.get_model("mnist", version=1)
-
-model_path = model.download()
-```
-
-Delete a model
-```python
-model.delete()
-```
-
-Get best performing model
-```python
-best_model = mr.get_best_model('mnist', 'accuracy', 'max')
-
-```
-
-Deploy a model
-```python
-deployment = model.deploy()
-```
-
-Start a deployment
-```python
-deployment.start()
-```
-
-Make predictions with a deployed model
-```python
-data = { "instances": [ model.input_example ] }
-
-predictions = deployment.predict(data)
-```
-
-# Tutorials
-
-You can find more examples on how to use the library in our [tutorials](https://github.com/logicalclocks/hopsworks-tutorials).
-
-## Documentation
-
-Documentation is available at [Hopsworks Model Management Documentation](https://docs.hopsworks.ai/).
-
-## Issues
-
-For general questions about the usage of Hopsworks Machine Learning please open a topic on [Hopsworks Community](https://community.hopsworks.ai/).
-Please report any issue using [Github issue tracking](https://github.com/logicalclocks/machine-learning-api/issues).
-
-
-## Contributing
-
-If you would like to contribute to this library, please see the [Contribution Guidelines](CONTRIBUTING.md).
diff --git a/hsml/docs/js/dropdown.js b/hsml/docs/js/dropdown.js
deleted file mode 100644
index b897ba36a..000000000
--- a/hsml/docs/js/dropdown.js
+++ /dev/null
@@ -1,2 +0,0 @@
-document.getElementsByClassName("md-tabs__link")[7].style.display = "none";
-document.getElementsByClassName("md-tabs__link")[9].style.display = "none";
\ No newline at end of file
diff --git a/hsml/docs/js/inject-api-links.js b/hsml/docs/js/inject-api-links.js
deleted file mode 100644
index 6c8a4a3b3..000000000
--- a/hsml/docs/js/inject-api-links.js
+++ /dev/null
@@ -1,31 +0,0 @@
-window.addEventListener("DOMContentLoaded", function () {
- var windowPathNameSplits = window.location.pathname.split("/");
- var majorVersionRegex = new RegExp("(\\d+[.]\\d+)")
- var latestRegex = new RegExp("latest");
- if (majorVersionRegex.test(windowPathNameSplits[1])) { // On landing page docs.hopsworks.api/3.0 - URL contains major version
- // Version API dropdown
- document.getElementById("hopsworks_api_link").href = "https://docs.hopsworks.ai/hopsworks-api/" + windowPathNameSplits[1] + "/generated/api/login/";
- document.getElementById("hsfs_api_link").href = "https://docs.hopsworks.ai/feature-store-api/" + windowPathNameSplits[1] + "/generated/api/connection_api/";
- document.getElementById("hsml_api_link").href = "https://docs.hopsworks.ai/machine-learning-api/" + windowPathNameSplits[1] + "/generated/connection_api/";
- } else { // on docs.hopsworks.api/feature-store-api/3.0 / docs.hopsworks.api/hopsworks-api/3.0 / docs.hopsworks.api/machine-learning-api/3.0
- if (latestRegex.test(windowPathNameSplits[2]) || latestRegex.test(windowPathNameSplits[1])) {
- var majorVersion = "latest";
- } else {
- var apiVersion = windowPathNameSplits[2];
- var majorVersion = apiVersion.match(majorVersionRegex)[0];
- }
- // Version main navigation
- document.getElementsByClassName("md-tabs__link")[0].href = "https://docs.hopsworks.ai/" + majorVersion;
- document.getElementsByClassName("md-tabs__link")[1].href = "https://colab.research.google.com/github/logicalclocks/hopsworks-tutorials/blob/master/quickstart.ipynb";
- document.getElementsByClassName("md-tabs__link")[2].href = "https://docs.hopsworks.ai/" + majorVersion + "/tutorials/";
- document.getElementsByClassName("md-tabs__link")[3].href = "https://docs.hopsworks.ai/" + majorVersion + "/concepts/hopsworks/";
- document.getElementsByClassName("md-tabs__link")[4].href = "https://docs.hopsworks.ai/" + majorVersion + "/user_guides/";
- document.getElementsByClassName("md-tabs__link")[5].href = "https://docs.hopsworks.ai/" + majorVersion + "/setup_installation/aws/getting_started/";
- document.getElementsByClassName("md-tabs__link")[6].href = "https://docs.hopsworks.ai/" + majorVersion + "/admin/";
- // Version API dropdown
- document.getElementById("hopsworks_api_link").href = "https://docs.hopsworks.ai/hopsworks-api/" + majorVersion + "/generated/api/login/";
- document.getElementById("hsfs_api_link").href = "https://docs.hopsworks.ai/feature-store-api/" + majorVersion + "/generated/api/connection_api/";
- document.getElementById("hsfs_javadoc_link").href = "https://docs.hopsworks.ai/feature-store-api/" + majorVersion + "/javadoc";
- document.getElementById("hsml_api_link").href = "https://docs.hopsworks.ai/machine-learning-api/" + majorVersion + "/generated/connection_api/";
- }
-});
diff --git a/hsml/docs/js/version-select.js b/hsml/docs/js/version-select.js
deleted file mode 100644
index 9c8331660..000000000
--- a/hsml/docs/js/version-select.js
+++ /dev/null
@@ -1,64 +0,0 @@
-window.addEventListener("DOMContentLoaded", function() {
- // This is a bit hacky. Figure out the base URL from a known CSS file the
- // template refers to...
- var ex = new RegExp("/?css/version-select.css$");
- var sheet = document.querySelector('link[href$="version-select.css"]');
-
- var ABS_BASE_URL = sheet.href.replace(ex, "");
- var CURRENT_VERSION = ABS_BASE_URL.split("/").pop();
-
- function makeSelect(options, selected) {
- var select = document.createElement("select");
- select.classList.add("form-control");
-
- options.forEach(function(i) {
- var option = new Option(i.text, i.value, undefined,
- i.value === selected);
- select.add(option);
- });
-
- return select;
- }
-
- var xhr = new XMLHttpRequest();
- xhr.open("GET", ABS_BASE_URL + "/../versions.json");
- xhr.onload = function() {
- var versions = JSON.parse(this.responseText);
-
- var realVersion = versions.find(function(i) {
- return i.version === CURRENT_VERSION ||
- i.aliases.includes(CURRENT_VERSION);
- }).version;
- var latestVersion = versions.find(function(i) {
- return i.aliases.includes("latest");
- }).version;
- let outdated_banner = document.querySelector('div[data-md-color-scheme="default"][data-md-component="outdated"]');
- if (realVersion !== latestVersion) {
- outdated_banner.removeAttribute("hidden");
- } else {
- outdated_banner.setAttribute("hidden", "");
- }
-
- var select = makeSelect(versions.map(function(i) {
- var allowedAliases = ["dev", "latest"]
- if (i.aliases.length > 0) {
- var aliasString = " [" + i.aliases.filter(function (str) { return allowedAliases.includes(str); }).join(", ") + "]";
- } else {
- var aliasString = "";
- }
- return {text: i.title + aliasString, value: i.version};
- }), realVersion);
- select.addEventListener("change", function(event) {
- window.location.href = ABS_BASE_URL + "/../" + this.value + "/generated/connection_api/";
- });
-
- var container = document.createElement("div");
- container.id = "version-selector";
- // container.className = "md-nav__item";
- container.appendChild(select);
-
- var sidebar = document.querySelector(".md-nav--primary > .md-nav__list");
- sidebar.parentNode.insertBefore(container, sidebar.nextSibling);
- };
- xhr.send();
-});
diff --git a/hsml/docs/overrides/main.html b/hsml/docs/overrides/main.html
deleted file mode 100644
index a1bc45bb5..000000000
--- a/hsml/docs/overrides/main.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "base.html" %}
-
-{% block outdated %}
-You're not viewing the latest version of the documentation.
-
- Click here to go to latest.
-
-{% endblock %}
\ No newline at end of file
diff --git a/hsml/mkdocs.yml b/hsml/mkdocs.yml
deleted file mode 100644
index f20a7b1c5..000000000
--- a/hsml/mkdocs.yml
+++ /dev/null
@@ -1,120 +0,0 @@
-site_name: "Hopsworks Documentation"
-site_description: "Official documentation for Hopsworks and its Feature Store - an open source data-intensive AI platform used for the development and operation of machine learning models at scale."
-site_author: "Logical Clocks"
-site_url: "https://docs.hopsworks.ai/machine-learning-api/latest"
-
-# Repository
-repo_name: logicalclocks/hopsworks
-repo_url: https://github.com/logicalclocks/hopsworks
-edit_uri: ""
-
-nav:
- - Home: https://docs.hopsworks.ai/
- - Getting Started ↗: https://docs.hopsworks.ai/
- - Tutorials: https://docs.hopsworks.ai/
- - Concepts: https://docs.hopsworks.ai/
- - Guides: https://docs.hopsworks.ai/
- - Setup and Installation: https://docs.hopsworks.ai/
- - Administration: https://docs.hopsworks.ai/
- - API
:
- - API Reference:
- - Connection: generated/connection_api.md
- - Model Registry:
- - Model Registry: generated/model-registry/model_registry_api.md
- - Model: generated/model-registry/model_api.md
- - Model Schema: generated/model-registry/model_schema_api.md
- - Model Serving:
- - Model Serving: generated/model-serving/model_serving_api.md
- - Deployment: generated/model-serving/deployment_api.md
- - Deployment state: generated/model-serving/predictor_state_api.md
- - Deployment state condition: generated/model-serving/predictor_state_condition_api.md
- - Predictor: generated/model-serving/predictor_api.md
- - Transformer: generated/model-serving/transformer_api.md
- - Inference Logger: generated/model-serving/inference_logger_api.md
- - Inference Batcher: generated/model-serving/inference_batcher_api.md
- - Resources: generated/model-serving/resources_api.md
- # Added to allow navigation using the side drawer
- - Hopsworks API: https://docs.hopsworks.ai/
- - Feature Store API: https://docs.hopsworks.ai/
- - Feature Store JavaDoc: https://docs.hopsworks.ai/
- - Contributing: CONTRIBUTING.md
- - Community ↗: https://community.hopsworks.ai/
-
-theme:
- name: material
- custom_dir: docs/overrides
- favicon: assets/images/favicon.ico
- logo: assets/images/hops-logo.png
- icon:
- repo: fontawesome/brands/github
- font:
- text: "Roboto"
- code: "IBM Plex Mono"
- palette:
- accent: teal
- scheme: hopsworks
- features:
- - navigation.tabs
- - navigation.tabs.sticky
- - navigation.expand
-
-
-extra:
- analytics:
- provider: google
- property: G-64FEEXPSDN
- generator: false
- version:
- - provider: mike
- - version: latest
- social:
- - icon: fontawesome/brands/twitter
- link: https://twitter.com/hopsworks
- - icon: fontawesome/brands/github
- link: https://github.com/logicalclocks/hopsworks
- - icon: fontawesome/brands/discourse
- link: https://community.hopsworks.ai/
- - icon: fontawesome/brands/linkedin
- link: https://www.linkedin.com/company/hopsworks/
-
-extra_css:
- - css/custom.css
- - css/version-select.css
- - css/dropdown.css
- - css/marctech.css
-
-extra_javascript:
- - js/version-select.js
- - js/inject-api-links.js
- - js/dropdown.js
-
-plugins:
- - search
- - minify:
- minify_html: true
- minify_css: true
- minify_js: true
- - mike:
- canonical_version: latest
-
-markdown_extensions:
- - admonition
- - codehilite
- - footnotes
- - pymdownx.tabbed:
- alternate_style: true
- - pymdownx.arithmatex
- - pymdownx.superfences
- - pymdownx.details
- - pymdownx.caret
- - pymdownx.mark
- - pymdownx.tilde
- - pymdownx.critic
- - attr_list
- - md_in_html
- - toc:
- permalink: "#"
- - pymdownx.tasklist:
- custom_checkbox: true
- - markdown_include.include:
- base_path: docs
diff --git a/hsml/requirements-docs.txt b/hsml/requirements-docs.txt
deleted file mode 100644
index d1499a262..000000000
--- a/hsml/requirements-docs.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-mkdocs==1.5.3
-mkdocs-material==9.5.17
-mike==2.0.0
-sphinx==7.2.6
-keras_autodoc @ git+https://git@github.com/logicalclocks/keras-autodoc
-markdown-include==0.8.1
-mkdocs-jupyter==0.24.3
-markdown==3.6
-pymdown-extensions==10.7.1
-mkdocs-macros-plugin==1.0.4
-mkdocs-minify-plugin>=0.2.0
diff --git a/mkdocs.yml b/mkdocs.yml
index ace10ae11..f59e2e4bc 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -34,9 +34,50 @@ nav:
- KafkaSchema: generated/api/kafka_schema.md
- Secrets: generated/api/secrets.md
- OpenSearch: generated/api/opensearch.md
+ - Connection (HSFS): generated/api/connection_api.md
+ - ExpectationSuite: generated/api/expectation_suite_api.md
+ - FeatureStore: generated/api/feature_store_api.md
+ - FeatureGroup: generated/api/feature_group_api.md
+ - ExternalFeatureGroup: generated/api/external_feature_group_api.md
+ - SpineGroup: generated/api/spine_group_api.md
+ - FeatureView: generated/api/feature_view_api.md
+ - TrainingDataset: generated/api/training_dataset_api.md
+ - Storage Connector: generated/api/storage_connector_api.md
+ - Feature: generated/api/feature_api.md
+ - Query: generated/api/query_api.md
+ - Transformation Functions: generated/api/transformation_functions_api.md
+ - ValidationReport: generated/api/validation_report_api.md
+ - Job: generated/api/job.md
+ - Provenance Links: generated/api/links.md
+ - Statistics:
+ - Statistics: generated/api/statistics_api.md
+ - Split Statistics: generated/api/split_statistics_api.md
+ - Feature descriptive statistics: generated/api/feature_descriptive_statistics_api.md
+ - Feature Monitoring:
+ - Configuration: generated/api/feature_monitoring_config_api.md
+ - Result: generated/api/feature_monitoring_result_api.md
+ - Window: generated/api/feature_monitoring_window_config_api.md
+ - Embedding:
+ - EmbeddingIndex: generated/api/embedding_index_api.md
+ - EmbeddingFeature: generated/api/embedding_feature_api.md
+ - SimilarityFunctionType: generated/api/similarity_function_type_api.md
+ - Connection (HSML): generated/connection_api.md
+ - Model Registry:
+ - Model Registry: generated/model-registry/model_registry_api.md
+ - Model: generated/model-registry/model_api.md
+ - Model Schema: generated/model-registry/model_schema_api.md
+ - Model Serving:
+ - Model Serving: generated/model-serving/model_serving_api.md
+ - Deployment: generated/model-serving/deployment_api.md
+ - Deployment state: generated/model-serving/predictor_state_api.md
+ - Deployment state condition: generated/model-serving/predictor_state_condition_api.md
+ - Predictor: generated/model-serving/predictor_api.md
+ - Transformer: generated/model-serving/transformer_api.md
+ - Inference Logger: generated/model-serving/inference_logger_api.md
+ - Inference Batcher: generated/model-serving/inference_batcher_api.md
+ - Resources: generated/model-serving/resources_api.md
# Added to allow navigation using the side drawer
- Hopsworks API: https://docs.hopsworks.ai/hopsworks-api/latest/
- - MLOps API: https://docs.hopsworks.ai/machine-learning-api/latest/
- Feature Store JavaDoc: https://docs.hopsworks.ai/feature-store-javadoc/latest/
- Contributing: CONTRIBUTING.md
- Community ↗: https://community.hopsworks.ai/
diff --git a/python/pyproject.toml b/python/pyproject.toml
index 4333adc8b..6adfea048 100644
--- a/python/pyproject.toml
+++ b/python/pyproject.toml
@@ -4,7 +4,14 @@ dynamic = ["version"]
requires-python = ">=3.8,<3.13"
readme = "README.md"
description = "Hopsworks Python SDK to interact with Hopsworks Platform, Feature Store, Model Registry and Model Serving"
-keywords = ["Hopsworks", "Feature Store", "Spark", "Machine Learning", "MLOps", "DataOps"]
+keywords = [
+ "Hopsworks",
+ "Feature Store",
+ "Spark",
+ "Machine Learning",
+ "MLOps",
+ "DataOps",
+]
authors = [{ name = "Hopsworks AB", email = "robin@hopsworks.ai" }]
license = { text = "Apache-2.0" }
@@ -34,7 +41,7 @@ dependencies = [
]
[project.optional-dependencies]
-dev = [ "ruff", "pytest"]
+dev = ["ruff", "pytest", "great_expectations"]
[build-system]
requires = ["setuptools", "wheel"]
diff --git a/requirements-docs.txt b/requirements-docs.txt
index d1499a262..8bc8d6230 100644
--- a/requirements-docs.txt
+++ b/requirements-docs.txt
@@ -1,7 +1,7 @@
mkdocs==1.5.3
mkdocs-material==9.5.17
mike==2.0.0
-sphinx==7.2.6
+sphinx==7.3.7
keras_autodoc @ git+https://git@github.com/logicalclocks/keras-autodoc
markdown-include==0.8.1
mkdocs-jupyter==0.24.3