From d2a351fd2d99a62df660a583391db6d727ce8ea7 Mon Sep 17 00:00:00 2001 From: isabel zimmerman Date: Tue, 15 Jul 2025 15:41:28 -0400 Subject: [PATCH 1/6] update comms with copy to code messages --- .../amalthea/src/comm/data_explorer_comm.rs | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/crates/amalthea/src/comm/data_explorer_comm.rs b/crates/amalthea/src/comm/data_explorer_comm.rs index e8c83af44..d54cc97a0 100644 --- a/crates/amalthea/src/comm/data_explorer_comm.rs +++ b/crates/amalthea/src/comm/data_explorer_comm.rs @@ -38,6 +38,20 @@ pub struct ExportedData { pub format: ExportFormat } +/// Resulting code +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +pub struct ExportedCode { + /// Exported code as a string suitable for copy and paste + pub data: Option +} + +/// Code syntaxes available for export +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +pub struct CodeSyntaxOptions { + /// Available code syntaxes supported for export + pub code_syntaxes: Vec +} + /// The result of applying filters to a table #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub struct FilterResult { @@ -1073,6 +1087,22 @@ pub struct ExportDataSelectionParams { pub format: ExportFormat, } +/// Parameters for the TranslateToCode method. +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +pub struct TranslateToCodeParams { + /// Zero or more column filters to apply + pub column_filters: Vec, + + /// Zero or more row filters to apply + pub row_filters: Vec, + + /// Zero or more sort keys to apply + pub sort_keys: Vec, + + /// The code syntax to use for translation + pub code_syntax: String, +} + /// Parameters for the SetColumnFilters method. #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub struct SetColumnFiltersParams { @@ -1164,6 +1194,20 @@ pub enum DataExplorerBackendRequest { #[serde(rename = "export_data_selection")] ExportDataSelection(ExportDataSelectionParams), + /// Translates the current data view into a code snippet. + /// + /// Translate filters and sort keys as code in different syntaxes like + /// pandas, polars, data.table, dplyr + #[serde(rename = "translate_to_code")] + TranslateToCode(TranslateToCodeParams), + + /// Get code syntaxes supported for code translation + /// + /// Get all available code syntaxes supported for translation for a data + /// view + #[serde(rename = "get_code_syntaxes")] + GetCodeSyntaxes, + /// Set column filters to select subset of table columns /// /// Set or clear column filters on table, replacing any previous filters @@ -1220,6 +1264,12 @@ pub enum DataExplorerBackendReply { /// Exported result ExportDataSelectionReply(ExportedData), + /// Resulting code + TranslateToCodeReply(ExportedCode), + + /// Code syntaxes available for export + GetCodeSyntaxesReply(CodeSyntaxOptions), + /// Reply for the set_column_filters method (no result) SetColumnFiltersReply(), From c557239a7846cfb340d3c68db6e8627349181224 Mon Sep 17 00:00:00 2001 From: isabel zimmerman Date: Tue, 15 Jul 2025 17:57:51 -0400 Subject: [PATCH 2/6] add todo for new comms --- crates/amalthea/src/comm/data_explorer_comm.rs | 6 +++--- crates/ark/src/data_explorer/r_data_explorer.rs | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/amalthea/src/comm/data_explorer_comm.rs b/crates/amalthea/src/comm/data_explorer_comm.rs index d54cc97a0..904c70af5 100644 --- a/crates/amalthea/src/comm/data_explorer_comm.rs +++ b/crates/amalthea/src/comm/data_explorer_comm.rs @@ -38,11 +38,11 @@ pub struct ExportedData { pub format: ExportFormat } -/// Resulting code +/// Code snippet for the data view #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub struct ExportedCode { /// Exported code as a string suitable for copy and paste - pub data: Option + pub code: String } /// Code syntaxes available for export @@ -1264,7 +1264,7 @@ pub enum DataExplorerBackendReply { /// Exported result ExportDataSelectionReply(ExportedData), - /// Resulting code + /// Code snippet for the data view TranslateToCodeReply(ExportedCode), /// Code syntaxes available for export diff --git a/crates/ark/src/data_explorer/r_data_explorer.rs b/crates/ark/src/data_explorer/r_data_explorer.rs index 48549fe74..cc1c6db8e 100644 --- a/crates/ark/src/data_explorer/r_data_explorer.rs +++ b/crates/ark/src/data_explorer/r_data_explorer.rs @@ -556,6 +556,7 @@ impl RDataExplorer { format, }, )), + DataExplorerBackendRequest::TranslateToCode(_) | DataExplorerBackendRequest::GetCodeSyntaxes => todo!(), } } } From 9130181c148ba99a1b13693cc871d5f1191d01e7 Mon Sep 17 00:00:00 2001 From: isabel zimmerman Date: Fri, 18 Jul 2025 14:25:11 -0400 Subject: [PATCH 3/6] sync with other comms --- .../amalthea/src/comm/data_explorer_comm.rs | 61 +++++++++++-------- .../ark/src/data_explorer/r_data_explorer.rs | 2 +- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/crates/amalthea/src/comm/data_explorer_comm.rs b/crates/amalthea/src/comm/data_explorer_comm.rs index 904c70af5..708ab0f2f 100644 --- a/crates/amalthea/src/comm/data_explorer_comm.rs +++ b/crates/amalthea/src/comm/data_explorer_comm.rs @@ -40,16 +40,16 @@ pub struct ExportedData { /// Code snippet for the data view #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] -pub struct ExportedCode { - /// Exported code as a string suitable for copy and paste - pub code: String +pub struct ConvertedCode { + /// Lines of code that implement filters and sort keys + pub converted_code: Vec } -/// Code syntaxes available for export +/// Syntax to use for code conversion #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] -pub struct CodeSyntaxOptions { - /// Available code syntaxes supported for export - pub code_syntaxes: Vec +pub struct CodeSyntaxName { + /// The name of the code syntax, eg, pandas, polars, dplyr, etc. + pub code_syntax_name: String } /// The result of applying filters to a table @@ -551,7 +551,10 @@ pub struct SupportedFeatures { pub set_sort_columns: SetSortColumnsFeatures, /// Support for 'export_data_selection' RPC and its features - pub export_data_selection: ExportDataSelectionFeatures + pub export_data_selection: ExportDataSelectionFeatures, + + /// Support for 'convert_to_code' RPC and its features + pub convert_to_code: ConvertToCodeFeatures } /// Feature flags for 'search_schema' RPC @@ -614,6 +617,16 @@ pub struct SetSortColumnsFeatures { pub support_status: SupportStatus } +/// Feature flags for convert to code RPC +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +pub struct ConvertToCodeFeatures { + /// The support status for this RPC method + pub support_status: SupportStatus, + + /// The syntaxes for converted code + pub code_syntaxes: Option> +} + /// A selection on the data grid, for copying to the clipboard or other /// actions #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] @@ -1087,9 +1100,9 @@ pub struct ExportDataSelectionParams { pub format: ExportFormat, } -/// Parameters for the TranslateToCode method. +/// Parameters for the ConvertToCode method. #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] -pub struct TranslateToCodeParams { +pub struct ConvertToCodeParams { /// Zero or more column filters to apply pub column_filters: Vec, @@ -1099,8 +1112,8 @@ pub struct TranslateToCodeParams { /// Zero or more sort keys to apply pub sort_keys: Vec, - /// The code syntax to use for translation - pub code_syntax: String, + /// The code syntax to use for conversion + pub code_syntax_name: CodeSyntaxName, } /// Parameters for the SetColumnFilters method. @@ -1194,19 +1207,19 @@ pub enum DataExplorerBackendRequest { #[serde(rename = "export_data_selection")] ExportDataSelection(ExportDataSelectionParams), - /// Translates the current data view into a code snippet. + /// Converts the current data view into a code snippet. /// - /// Translate filters and sort keys as code in different syntaxes like + /// Converts filters and sort keys as code in different syntaxes like /// pandas, polars, data.table, dplyr - #[serde(rename = "translate_to_code")] - TranslateToCode(TranslateToCodeParams), + #[serde(rename = "convert_to_code")] + ConvertToCode(ConvertToCodeParams), - /// Get code syntaxes supported for code translation + /// Suggest code syntax for code conversion /// - /// Get all available code syntaxes supported for translation for a data - /// view - #[serde(rename = "get_code_syntaxes")] - GetCodeSyntaxes, + /// Suggest code syntax for code conversion based on the current backend + /// state + #[serde(rename = "suggest_code_syntax")] + SuggestCodeSyntax, /// Set column filters to select subset of table columns /// @@ -1265,10 +1278,10 @@ pub enum DataExplorerBackendReply { ExportDataSelectionReply(ExportedData), /// Code snippet for the data view - TranslateToCodeReply(ExportedCode), + ConvertToCodeReply(ConvertedCode), - /// Code syntaxes available for export - GetCodeSyntaxesReply(CodeSyntaxOptions), + /// Syntax to use for code conversion + SuggestCodeSyntaxReply(CodeSyntaxName), /// Reply for the set_column_filters method (no result) SetColumnFiltersReply(), diff --git a/crates/ark/src/data_explorer/r_data_explorer.rs b/crates/ark/src/data_explorer/r_data_explorer.rs index cc1c6db8e..968ad2d18 100644 --- a/crates/ark/src/data_explorer/r_data_explorer.rs +++ b/crates/ark/src/data_explorer/r_data_explorer.rs @@ -556,7 +556,7 @@ impl RDataExplorer { format, }, )), - DataExplorerBackendRequest::TranslateToCode(_) | DataExplorerBackendRequest::GetCodeSyntaxes => todo!(), + DataExplorerBackendRequest::ConvertToCode(_) | DataExplorerBackendRequest::SuggestCodeSyntax => todo!(), } } } From 9a640b67652478b86a5e9d5d7cd7eeb159c90e1a Mon Sep 17 00:00:00 2001 From: isabel zimmerman Date: Fri, 18 Jul 2025 14:47:53 -0400 Subject: [PATCH 4/6] add convert to code features --- .../ark/src/data_explorer/r_data_explorer.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/crates/ark/src/data_explorer/r_data_explorer.rs b/crates/ark/src/data_explorer/r_data_explorer.rs index 968ad2d18..1cbd456ae 100644 --- a/crates/ark/src/data_explorer/r_data_explorer.rs +++ b/crates/ark/src/data_explorer/r_data_explorer.rs @@ -11,6 +11,7 @@ use std::collections::HashMap; use amalthea::comm::comm_channel::CommMsg; use amalthea::comm::data_explorer_comm::ArraySelection; use amalthea::comm::data_explorer_comm::BackendState; +use amalthea::comm::data_explorer_comm::CodeSyntaxName; use amalthea::comm::data_explorer_comm::ColumnDisplayType; use amalthea::comm::data_explorer_comm::ColumnFilter; use amalthea::comm::data_explorer_comm::ColumnProfileType; @@ -19,6 +20,7 @@ use amalthea::comm::data_explorer_comm::ColumnSchema; use amalthea::comm::data_explorer_comm::ColumnSelection; use amalthea::comm::data_explorer_comm::ColumnSortKey; use amalthea::comm::data_explorer_comm::ColumnValue; +use amalthea::comm::data_explorer_comm::ConvertToCodeFeatures; use amalthea::comm::data_explorer_comm::DataExplorerBackendReply; use amalthea::comm::data_explorer_comm::DataExplorerBackendRequest; use amalthea::comm::data_explorer_comm::DataExplorerFrontendEvent; @@ -556,7 +558,8 @@ impl RDataExplorer { format, }, )), - DataExplorerBackendRequest::ConvertToCode(_) | DataExplorerBackendRequest::SuggestCodeSyntax => todo!(), + DataExplorerBackendRequest::ConvertToCode(_) | + DataExplorerBackendRequest::SuggestCodeSyntax => todo!(), } } } @@ -982,6 +985,20 @@ impl RDataExplorer { ExportFormat::Html, ], }, + convert_to_code: ConvertToCodeFeatures { + support_status: SupportStatus::Supported, + code_syntaxes: Some(vec![ + CodeSyntaxName { + code_syntax_name: "base r".into(), + }, + CodeSyntaxName { + code_syntax_name: "data table".into(), + }, + CodeSyntaxName { + code_syntax_name: "dplyr".into(), + }, + ]), + }, }, }; Ok(DataExplorerBackendReply::GetStateReply(state)) From 4aded3423d6b94e90f21d5db35f706a4e79c80f6 Mon Sep 17 00:00:00 2001 From: isabel zimmerman Date: Tue, 22 Jul 2025 15:27:40 -0400 Subject: [PATCH 5/6] add placeholder replies for testing --- crates/ark/src/data_explorer/r_data_explorer.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/crates/ark/src/data_explorer/r_data_explorer.rs b/crates/ark/src/data_explorer/r_data_explorer.rs index 1cbd456ae..b47a58032 100644 --- a/crates/ark/src/data_explorer/r_data_explorer.rs +++ b/crates/ark/src/data_explorer/r_data_explorer.rs @@ -21,6 +21,8 @@ use amalthea::comm::data_explorer_comm::ColumnSelection; use amalthea::comm::data_explorer_comm::ColumnSortKey; use amalthea::comm::data_explorer_comm::ColumnValue; use amalthea::comm::data_explorer_comm::ConvertToCodeFeatures; +use amalthea::comm::data_explorer_comm::ConvertToCodeParams; +use amalthea::comm::data_explorer_comm::ConvertedCode; use amalthea::comm::data_explorer_comm::DataExplorerBackendReply; use amalthea::comm::data_explorer_comm::DataExplorerBackendRequest; use amalthea::comm::data_explorer_comm::DataExplorerFrontendEvent; @@ -558,8 +560,16 @@ impl RDataExplorer { format, }, )), - DataExplorerBackendRequest::ConvertToCode(_) | - DataExplorerBackendRequest::SuggestCodeSyntax => todo!(), + DataExplorerBackendRequest::ConvertToCode(_) => Ok( + DataExplorerBackendReply::ConvertToCodeReply(ConvertedCode { + converted_code: vec!["not yet implemented".to_string()], + }), + ), + DataExplorerBackendRequest::SuggestCodeSyntax => Ok( + DataExplorerBackendReply::SuggestCodeSyntaxReply(CodeSyntaxName { + code_syntax_name: "base r".into(), + }), + ), } } } From 816ccc7ea09eeb905b1d486025a3e17ad0caf757 Mon Sep 17 00:00:00 2001 From: isabel zimmerman Date: Tue, 22 Jul 2025 15:33:31 -0400 Subject: [PATCH 6/6] update names from review --- crates/ark/src/data_explorer/r_data_explorer.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/crates/ark/src/data_explorer/r_data_explorer.rs b/crates/ark/src/data_explorer/r_data_explorer.rs index b47a58032..6cf4f0087 100644 --- a/crates/ark/src/data_explorer/r_data_explorer.rs +++ b/crates/ark/src/data_explorer/r_data_explorer.rs @@ -21,7 +21,6 @@ use amalthea::comm::data_explorer_comm::ColumnSelection; use amalthea::comm::data_explorer_comm::ColumnSortKey; use amalthea::comm::data_explorer_comm::ColumnValue; use amalthea::comm::data_explorer_comm::ConvertToCodeFeatures; -use amalthea::comm::data_explorer_comm::ConvertToCodeParams; use amalthea::comm::data_explorer_comm::ConvertedCode; use amalthea::comm::data_explorer_comm::DataExplorerBackendReply; use amalthea::comm::data_explorer_comm::DataExplorerBackendRequest; @@ -567,7 +566,7 @@ impl RDataExplorer { ), DataExplorerBackendRequest::SuggestCodeSyntax => Ok( DataExplorerBackendReply::SuggestCodeSyntaxReply(CodeSyntaxName { - code_syntax_name: "base r".into(), + code_syntax_name: "base".into(), }), ), } @@ -999,10 +998,10 @@ impl RDataExplorer { support_status: SupportStatus::Supported, code_syntaxes: Some(vec![ CodeSyntaxName { - code_syntax_name: "base r".into(), + code_syntax_name: "base".into(), }, CodeSyntaxName { - code_syntax_name: "data table".into(), + code_syntax_name: "data.table".into(), }, CodeSyntaxName { code_syntax_name: "dplyr".into(),