Skip to content

Unit

Unit

Bases: BaseClass

Attributes:

Name Type Description
id str

id of the unit

name str

name of the unit

longname str

Long name of the unit. In case of "cm" this would be centimeter

definition str

In case of self defined units, this attributes gives the definition of the unit in si units

Source code in furthrmind\collection\unit.py
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
class Unit(BaseClass):
    """
    Attributes
    ----------
    id : str
        id of the unit
    name : str
        name of the unit
    longname : str
        Long name of the unit. In case of "cm" this would be centimeter
    definition : str
        In case of self defined units, this attributes gives the definition of the unit in si units
    """

    id = ""
    name = ""
    longname = ""
    definition = ""

    _attr_definition = {
    }

    def __init__(self, id=None, data=None):
        super().__init__(id, data)

    def _get_url_instance(self, project_id=None):
        project_url = Unit.fm.get_project_url(project_id)
        url = f"{project_url}/units/{self.id}"
        return url

    @classmethod
    def _get_url_class(cls, id, project_id=None):
        project_url = cls.fm.get_project_url(project_id)
        url = f"{project_url}/units/{id}"
        return url

    @classmethod
    def _get_all_url(cls, project_id=None):
        project_url = cls.fm.get_project_url(project_id)
        url = f"{project_url}/units"
        return url

    @classmethod
    def _post_url(cls, project_id=None):
        project_url = cls.fm.get_project_url(project_id)
        url = f"{project_url}/units"
        return url

    @classmethod
    def get(cls, id: str = None) -> Self:
        """
        Method to get one unit.
        If called on an instance of the class, the id of the instance is used

        Parameters
        ----------
        id : str, optional
            The id of the unit to be retrieved. If not specified, the id of the instance is used.

        Returns
        -------
        Self
            An instance of the unit class.

        """

        if isclass(cls):
            assert id, "id must be specified"
            return cls._get_class_method(id)
        else:
            self = cls
            data = self._get_instance_method()
            return data

    @classmethod
    def get_many(cls, ids: List[str] = (), project_id=None) -> List[Self]:
        """
        This method is used to retrieve many units belonging to one project.

        Parameters
        ----------
        ids : List[str]
            List of ids.
        project_id : str, optional
            The project id. Defaults to None.

        Returns
        -------
        List[Self]
            List of instances of the experiment class.

        Raises
        ------
        TypeError
            If ids is not a list.
        """

        return super()._get_many(ids, project_id=project_id)

    @classmethod
    def get_all(cls, project_id=None) -> List[Self]:
        """
        Method to get all units belonging to one project

        Parameters
        ----------
        project_id : str
            Optionally specify the project ID to get units from. Defaults to None.

        Returns
        -------
        List[Self]
            A list containing instances of the unit class.
        """

        return super()._get_all(project_id)

    @classmethod
    @BaseClass._create_instances_decorator(_fetched=False)
    def create(cls, name: str, definition: str = None, project_id: str = None) -> Self:
        """
        Method to create a new unit.

        Parameters
        ----------
        name : str
            Name of the new unit
        definition : str, optional
            Unit definition in SI units to convert the new unit to an SI value. E.g. for unit cm², the definition would be 'cm*cm'.
            For valid units, please check the web app and open the unit editor. You will find a list of valid units. A definition may also contain scalar values.
        project_id : any, optional
            Project ID to create an item in another project

        Returns
        -------
        Self
            Instance of the unit class

        Raises
        ------
        AssertationError
            If name is not provided
        """

        assert name, "Name must be provided"

        data = {"name": name, "definition": definition}
        id = cls._post(data, project_id)
        data["id"] = id
        return data

    @classmethod
    @BaseClass._create_instances_decorator(_fetched=False)
    def create_many(cls, data_list: List[Dict], project_id: str = None) -> Self:
        """
        Parameters
        ----------
        data_list : List[Dict]
            A list of dictionaries containing the information for creating new units.
            Each dictionary should have the following keys:
            - name : str
                Name of the new unit.
            - definition : str
                Unit definition in SI units to convert the new unit to an SI Value.
                For example, for unit cm², the definition would be 'cm * cm'.
                For valid units, please check the web app unit editor.
                A definition can also contain scalar values.

        project_id : str, optional
            Optionally to create an item in another project as the furthrmind sdk was initiated with

        Returns
        -------
        List[Self]
            A list with instances of the unit class

        Raises
        ------
        AssertationError
            If the name parameter is missing for any unit in the data_list.
        """

        new_data_list = []
        for data in data_list:
            name = data.get("name")
            definition = data.get("definition")

            assert name, "Name is required"

            data = {"name": name, "definition": definition}
            new_data_list.append(data)

        id_list = cls._post(new_data_list, project_id, force_list=True)
        for data, id in zip(new_data_list, id_list):
            data["id"] = id

        return new_data_list

create(name, definition=None, project_id=None) classmethod

Method to create a new unit.

Parameters:

Name Type Description Default
name str

Name of the new unit

required
definition str

Unit definition in SI units to convert the new unit to an SI value. E.g. for unit cm², the definition would be 'cm*cm'. For valid units, please check the web app and open the unit editor. You will find a list of valid units. A definition may also contain scalar values.

None
project_id any

Project ID to create an item in another project

None

Returns:

Type Description
Self

Instance of the unit class

Raises:

Type Description
AssertationError

If name is not provided

Source code in furthrmind\collection\unit.py
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
@classmethod
@BaseClass._create_instances_decorator(_fetched=False)
def create(cls, name: str, definition: str = None, project_id: str = None) -> Self:
    """
    Method to create a new unit.

    Parameters
    ----------
    name : str
        Name of the new unit
    definition : str, optional
        Unit definition in SI units to convert the new unit to an SI value. E.g. for unit cm², the definition would be 'cm*cm'.
        For valid units, please check the web app and open the unit editor. You will find a list of valid units. A definition may also contain scalar values.
    project_id : any, optional
        Project ID to create an item in another project

    Returns
    -------
    Self
        Instance of the unit class

    Raises
    ------
    AssertationError
        If name is not provided
    """

    assert name, "Name must be provided"

    data = {"name": name, "definition": definition}
    id = cls._post(data, project_id)
    data["id"] = id
    return data

create_many(data_list, project_id=None) classmethod

Parameters:

Name Type Description Default
data_list List[Dict]

A list of dictionaries containing the information for creating new units. Each dictionary should have the following keys: - name : str Name of the new unit. - definition : str Unit definition in SI units to convert the new unit to an SI Value. For example, for unit cm², the definition would be 'cm * cm'. For valid units, please check the web app unit editor. A definition can also contain scalar values.

required
project_id str

Optionally to create an item in another project as the furthrmind sdk was initiated with

None

Returns:

Type Description
List[Self]

A list with instances of the unit class

Raises:

Type Description
AssertationError

If the name parameter is missing for any unit in the data_list.

Source code in furthrmind\collection\unit.py
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
@classmethod
@BaseClass._create_instances_decorator(_fetched=False)
def create_many(cls, data_list: List[Dict], project_id: str = None) -> Self:
    """
    Parameters
    ----------
    data_list : List[Dict]
        A list of dictionaries containing the information for creating new units.
        Each dictionary should have the following keys:
        - name : str
            Name of the new unit.
        - definition : str
            Unit definition in SI units to convert the new unit to an SI Value.
            For example, for unit cm², the definition would be 'cm * cm'.
            For valid units, please check the web app unit editor.
            A definition can also contain scalar values.

    project_id : str, optional
        Optionally to create an item in another project as the furthrmind sdk was initiated with

    Returns
    -------
    List[Self]
        A list with instances of the unit class

    Raises
    ------
    AssertationError
        If the name parameter is missing for any unit in the data_list.
    """

    new_data_list = []
    for data in data_list:
        name = data.get("name")
        definition = data.get("definition")

        assert name, "Name is required"

        data = {"name": name, "definition": definition}
        new_data_list.append(data)

    id_list = cls._post(new_data_list, project_id, force_list=True)
    for data, id in zip(new_data_list, id_list):
        data["id"] = id

    return new_data_list

delete(id='', project_id='') classmethod

Method to delete an item. Can be called as a classmethod with providing the id to be deleted or on the instance of a class

Parameters:

Name Type Description Default
id str

The id of the resource to delete

''
project_id str

Optionally to delete an item in another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
str

The id of the item

Source code in furthrmind\collection\baseclass.py
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
@classmethod
def delete(cls, id: str = "", project_id: str = "") -> str:
    """
    Method to delete an item. Can be called as a classmethod with providing the id to be deleted or on the instance
    of a class

    Parameters
    ----------
    id : str
        The id of the resource to delete
    project_id : str, optional
        Optionally to delete an item in another project as the furthrmind sdk was initiated with

    Returns
    -------
    str
        The id of the item
    """

    if isclass(cls):
        return cls._delete_class_method(id, project_id)
    else:
        self = cls
        return self._delete_instance_method(project_id)

get(id=None) classmethod

Method to get one unit. If called on an instance of the class, the id of the instance is used

Parameters:

Name Type Description Default
id str

The id of the unit to be retrieved. If not specified, the id of the instance is used.

None

Returns:

Type Description
Self

An instance of the unit class.

Source code in furthrmind\collection\unit.py
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
@classmethod
def get(cls, id: str = None) -> Self:
    """
    Method to get one unit.
    If called on an instance of the class, the id of the instance is used

    Parameters
    ----------
    id : str, optional
        The id of the unit to be retrieved. If not specified, the id of the instance is used.

    Returns
    -------
    Self
        An instance of the unit class.

    """

    if isclass(cls):
        assert id, "id must be specified"
        return cls._get_class_method(id)
    else:
        self = cls
        data = self._get_instance_method()
        return data

get_all(project_id=None) classmethod

Method to get all units belonging to one project

Parameters:

Name Type Description Default
project_id str

Optionally specify the project ID to get units from. Defaults to None.

None

Returns:

Type Description
List[Self]

A list containing instances of the unit class.

Source code in furthrmind\collection\unit.py
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
@classmethod
def get_all(cls, project_id=None) -> List[Self]:
    """
    Method to get all units belonging to one project

    Parameters
    ----------
    project_id : str
        Optionally specify the project ID to get units from. Defaults to None.

    Returns
    -------
    List[Self]
        A list containing instances of the unit class.
    """

    return super()._get_all(project_id)

get_many(ids=(), project_id=None) classmethod

This method is used to retrieve many units belonging to one project.

Parameters:

Name Type Description Default
ids List[str]

List of ids.

()
project_id str

The project id. Defaults to None.

None

Returns:

Type Description
List[Self]

List of instances of the experiment class.

Raises:

Type Description
TypeError

If ids is not a list.

Source code in furthrmind\collection\unit.py
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
@classmethod
def get_many(cls, ids: List[str] = (), project_id=None) -> List[Self]:
    """
    This method is used to retrieve many units belonging to one project.

    Parameters
    ----------
    ids : List[str]
        List of ids.
    project_id : str, optional
        The project id. Defaults to None.

    Returns
    -------
    List[Self]
        List of instances of the experiment class.

    Raises
    ------
    TypeError
        If ids is not a list.
    """

    return super()._get_many(ids, project_id=project_id)

to_dict()

Converts the object's attributes to a dictionary representation.

Returns:

Type Description
dict

Dictionary containing the object's attributes (excluding private attributes, callable attributes, and attributes of type Furthrmind).

Source code in furthrmind\collection\baseclass.py
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
def to_dict(self):
    """
    Converts the object's attributes to a dictionary representation.

    Returns
    -------
    dict
        Dictionary containing the object's attributes (excluding private attributes, callable attributes, and attributes of type Furthrmind).
    """

    from furthrmind import Furthrmind

    data = {}
    for attr in dir(self):
        if attr.startswith("_"):
            continue
        value = getattr(self, attr)
        if callable(value):
            continue
        if isinstance(value, Furthrmind):
            continue
        data[attr] = self._convert(value)
    return data