From db834ce8981557a925a02308c4be01b66639d3e2 Mon Sep 17 00:00:00 2001 From: teo Date: Wed, 3 Jul 2024 11:58:54 +0300 Subject: [PATCH 1/5] display usercode metadata and code str differently --- .../syft/src/syft/service/code/user_code.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/packages/syft/src/syft/service/code/user_code.py b/packages/syft/src/syft/service/code/user_code.py index 5c1dd137cd0..837da080e49 100644 --- a/packages/syft/src/syft/service/code/user_code.py +++ b/packages/syft/src/syft/service/code/user_code.py @@ -71,6 +71,7 @@ from ...util.decorators import deprecated from ...util.markdown import CodeMarkdown from ...util.markdown import as_markdown_code +from ...util.notebook_ui.styles import FONT_CSS from ...util.util import prompt_warning_message from ..action.action_endpoint import CustomEndpointActionObject from ..action.action_object import Action @@ -915,6 +916,42 @@ def _inner_repr(self, level: int = 0) -> str: def _repr_markdown_(self, wrap_as_python: bool = True, indent: int = 0) -> str: return as_markdown_code(self._inner_repr()) + def _repr_html_(self) -> str: + shared_with_line = "" + if len(self.output_readers) > 0 and self.output_reader_names is not None: + owners_string = " and ".join([f"*{x}*" for x in self.output_reader_names]) + shared_with_line += ( + f"

Custom Policy: " + f"outputs are *shared* with the owners of {owners_string} once computed

" + ) + + repr_str = f""" + +
+

UserCode

+

id: UID = {self.id}

+

service_func_name: str = {self.service_func_name}

+

shareholders: list = {self.input_owners}

+

status: list = {self.code_status}

+ {shared_with_line} +

code:

+

+ """ + return repr_str + + def _ipython_display_(self) -> None: + # third party + from IPython.display import HTML + from IPython.display import Markdown + + # display_html() + display(HTML(self._repr_html_()), Markdown(as_markdown_code(self.raw_code))) + @property def show_code(self) -> CodeMarkdown: return CodeMarkdown(self.raw_code) From 4ee5b543f4e9abe891845dd0424563e98e925e66 Mon Sep 17 00:00:00 2001 From: teo Date: Wed, 3 Jul 2024 15:00:03 +0300 Subject: [PATCH 2/5] repr for nested requests --- .../syft/src/syft/service/code/user_code.py | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/packages/syft/src/syft/service/code/user_code.py b/packages/syft/src/syft/service/code/user_code.py index 4d42dfb78d3..e7c69a2a2df 100644 --- a/packages/syft/src/syft/service/code/user_code.py +++ b/packages/syft/src/syft/service/code/user_code.py @@ -918,15 +918,15 @@ def _inner_repr(self, level: int = 0) -> str: def _repr_markdown_(self, wrap_as_python: bool = True, indent: int = 0) -> str: return as_markdown_code(self._inner_repr()) - def _repr_html_(self) -> str: + def _repr_html_(self, level: int = 0) -> str: + tabs = " " * level shared_with_line = "" if len(self.output_readers) > 0 and self.output_reader_names is not None: owners_string = " and ".join([f"*{x}*" for x in self.output_reader_names]) shared_with_line += ( - f"

Custom Policy: " + f"

{tabs}Custom Policy: " f"outputs are *shared* with the owners of {owners_string} once computed

" ) - repr_str = f"""
-

UserCode

-

id: UID = {self.id}

-

service_func_name: str = {self.service_func_name}

-

shareholders: list = {self.input_owners}

-

status: list = {self.code_status}

+

{tabs}UserCode

+

{tabs}id: UID = {self.id}

+

{tabs}service_func_name: str = {self.service_func_name}

+

{tabs}shareholders: list = {self.input_owners}

+

{tabs}status: list = {self.code_status}

{shared_with_line} -

code:

+

{tabs}code:

+

+ """ + if self.nested_codes != {}: + repr_str += f""" +

{tabs}Nested Requests:

+ """ + repr_str += """ """ return repr_str - def _ipython_display_(self) -> None: + def _ipython_display_(self, level: int = 0) -> None: # third party from IPython.display import HTML from IPython.display import Markdown - # display_html() - display(HTML(self._repr_html_()), Markdown(as_markdown_code(self.raw_code))) + md = "\n".join( + [f"{' '*level}{substring}" for substring in self.raw_code.split("\n")[:-1]] + ) + display(HTML(self._repr_html_(level=level)), Markdown(as_markdown_code(md))) + if self.nested_codes is not None: + for obj, _ in self.nested_codes.values(): + code = obj.resolve + code._ipython_display_(level=level + 1) @property def show_code(self) -> CodeMarkdown: From b9d92ff9c74ed785efff40f9d17ff84f83a850ad Mon Sep 17 00:00:00 2001 From: teo Date: Wed, 3 Jul 2024 15:00:26 +0300 Subject: [PATCH 3/5] fix serialization of empty input policy --- packages/syft/src/syft/service/policy/policy.py | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/syft/src/syft/service/policy/policy.py b/packages/syft/src/syft/service/policy/policy.py index e4800f04d6e..b2528241bb2 100644 --- a/packages/syft/src/syft/service/policy/policy.py +++ b/packages/syft/src/syft/service/policy/policy.py @@ -835,6 +835,7 @@ class UserInputPolicy(InputPolicy): pass +@serializable() class EmpyInputPolicy(InputPolicy): __canonical_name__ = "EmptyInputPolicy" pass From 0960f89534bf8f090471931e5572ff9421438609 Mon Sep 17 00:00:00 2001 From: teo Date: Thu, 4 Jul 2024 16:43:26 +0300 Subject: [PATCH 4/5] add assets to repr --- .../syft/src/syft/service/code/user_code.py | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/packages/syft/src/syft/service/code/user_code.py b/packages/syft/src/syft/service/code/user_code.py index e7c69a2a2df..de5f477237e 100644 --- a/packages/syft/src/syft/service/code/user_code.py +++ b/packages/syft/src/syft/service/code/user_code.py @@ -26,6 +26,8 @@ from typing import final # third party +from IPython.display import HTML +from IPython.display import Markdown from IPython.display import display from pydantic import ValidationError from pydantic import field_validator @@ -918,7 +920,7 @@ def _inner_repr(self, level: int = 0) -> str: def _repr_markdown_(self, wrap_as_python: bool = True, indent: int = 0) -> str: return as_markdown_code(self._inner_repr()) - def _repr_html_(self, level: int = 0) -> str: + def _ipython_display_(self, level: int = 0) -> None: tabs = " " * level shared_with_line = "" if len(self.output_readers) > 0 and self.output_reader_names is not None: @@ -927,6 +929,19 @@ def _repr_html_(self, level: int = 0) -> str: f"

{tabs}Custom Policy: " f"outputs are *shared* with the owners of {owners_string} once computed

" ) + constants_str = "" + args = [ + x + for _dict in self.input_policy_init_kwargs.values() # type: ignore + for x in _dict.values() + ] + constants = [x for x in args if isinstance(x, Constant)] + constants_str = "\n ".join([f"{x.kw}: {x.val}" for x in constants]) + # indent all lines except the first one + asset_str = "
".join( + [f"  {line}" for line in self._asset_json.split("\n")] + ).lstrip() + repr_str = f"""