Ejemplo n.º 1
0
    def get_settings(self) -> Dict[str, Any]:
        """Returns settings dictionary"""
        output = {}
        ignore = set(
            dir(Component()) + [
                "path",
                "settings",
                "properties",
                "function_name",
                "type",
                "netlist",
                "pins",
                "settings_changed",
            ])
        params = set(dir(self)) - ignore
        output["name"] = self.name

        if hasattr(self, "function_name") and self.function_name:
            output["function_name"] = self.function_name

        for key, value in self.settings.items():
            output[key] = _clean_value(value)

        for param in params:
            output[param] = _clean_value(getattr(self, param))

        # output["hash"] = hashlib.md5(json.dumps(output).encode()).hexdigest()
        # output["hash_geometry"] = str(self.hash_geometry())
        output = {k: output[k] for k in sorted(output)}
        return output
Ejemplo n.º 2
0
    def get_settings(
        self,
        ignore=("layer", "layers_cladding", "cladding_offset", "path",
                "netlist"),
        include=("name", "function_name", "module", "info"),
        full_settings=True,
    ) -> Dict[str, Any]:
        """Returns settings dictionary.
        Ignores items from self.ignore set.

        Args:
            ignore: settings to ignore
            include: settings to include
            full_settings: export full settings or only changed settings

        """
        settings = self.settings if full_settings else self.settings_changed
        d = {}
        d["settings"] = {}  # function arguments
        d["info"] = {}  # function arguments

        include = set(include)
        ignore = set(ignore).union(self.ignore).union(set(dir(
            Component()))) - include

        params = set(dir(self)) - ignore - include
        for param in params:
            self.info[param] = _clean_value(getattr(self, param))

        # for param in params:
        #     d['info'][param] = _clean_value(getattr(self, param))
        # d["hash"] = hashlib.md5(json.dumps(output).encode()).hexdigest()
        # d["hash_geometry"] = str(self.hash_geometry())

        for setting in include:
            if hasattr(self, setting):
                d[setting] = _clean_value(getattr(self, setting))

        for key, value in settings.items():
            if key not in self.ignore:
                d["settings"][key] = _clean_value(value)
                # print(_clean_value(value))

        d = {k: d[k] for k in sorted(d)}
        return d
Ejemplo n.º 3
0
def clean_dict(d):
    """cleans dictionary keys"""
    from pp.component import _clean_value

    for k, v in d.items():
        if isinstance(v, dict):
            clean_dict(v)
        else:
            d[k] = _clean_value(v)
Ejemplo n.º 4
0
def _clean_value(value: Any) -> Any:
    """ returns a clean value to be JSON serializable"""
    if type(value) in [int, float, str, tuple, bool]:
        value = value
    elif isinstance(value, np.int32):
        value = int(value)
    elif isinstance(value, np.int64):
        value = int(value)
    elif isinstance(value, np.float64):
        value = float(value)
    elif callable(value):
        value = value.__name__
    elif hasattr(value, "name"):
        value = value.name
    elif hasattr(value, "items"):
        clean_dict(value)
    elif hasattr(value, "__iter__"):
        value = [_clean_value(i) for i in value]
    else:
        value = str(value)

    return value
Ejemplo n.º 5
0
def _clean_value(value: Any) -> Any:
    """Returns a clean value that is JSON serializable"""
    if type(value) in [int, float, str, bool]:
        return value
    if isinstance(value, (np.int64, np.int32)):
        value = int(value)
    elif isinstance(value, np.float64):
        value = float(value)
    elif callable(value):
        value = value.__name__
    elif hasattr(value, "name"):
        value = value.name
    elif isinstance(value, dict):
        clean_dict(value)
    elif isinstance(value, (tuple, list, ListConfig)):
        value = [_clean_value(i) for i in value]
    elif value is None:
        value = None
    else:
        value = str(value)

    return value
Ejemplo n.º 6
0
 def update_settings(self, **kwargs):
     """ update settings dict """
     for key, value in kwargs.items():
         self.settings[key] = _clean_value(value)