anyscale 0.26.13__py3-none-any.whl → 0.26.14__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. anyscale/_private/docgen/models.md +2 -2
  2. anyscale/client/README.md +19 -0
  3. anyscale/client/openapi_client/__init__.py +14 -0
  4. anyscale/client/openapi_client/api/default_api.py +575 -0
  5. anyscale/client/openapi_client/models/__init__.py +14 -0
  6. anyscale/client/openapi_client/models/baseimagesenum.py +2 -4
  7. anyscale/client/openapi_client/models/supportedbaseimagesenum.py +2 -2
  8. anyscale/client/openapi_client/models/task_exception_group_aggregate.py +148 -0
  9. anyscale/client/openapi_client/models/task_function_name_group_aggregate.py +175 -0
  10. anyscale/client/openapi_client/models/task_grouped_aggregate_metrics.py +337 -0
  11. anyscale/client/openapi_client/models/task_job_group_aggregate.py +148 -0
  12. anyscale/client/openapi_client/models/task_state.py +103 -0
  13. anyscale/client/openapi_client/models/task_summary.py +256 -0
  14. anyscale/client/openapi_client/models/task_table_config.py +250 -0
  15. anyscale/client/openapi_client/models/task_table_response.py +174 -0
  16. anyscale/client/openapi_client/models/task_table_row.py +491 -0
  17. anyscale/client/openapi_client/models/task_type.py +100 -0
  18. anyscale/client/openapi_client/models/taskexceptiongroupaggregate_list_response.py +147 -0
  19. anyscale/client/openapi_client/models/taskfunctionnamegroupaggregate_list_response.py +147 -0
  20. anyscale/client/openapi_client/models/taskjobgroupaggregate_list_response.py +147 -0
  21. anyscale/client/openapi_client/models/tasksummary_response.py +121 -0
  22. anyscale/commands/command_examples.py +22 -0
  23. anyscale/sdk/anyscale_client/models/baseimagesenum.py +2 -4
  24. anyscale/sdk/anyscale_client/models/supportedbaseimagesenum.py +2 -2
  25. anyscale/version.py +1 -1
  26. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/METADATA +1 -1
  27. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/RECORD +32 -18
  28. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/LICENSE +0 -0
  29. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/NOTICE +0 -0
  30. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/WHEEL +0 -0
  31. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/entry_points.txt +0 -0
  32. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,337 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Managed Ray API
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
+
8
+ The version of the OpenAPI document: 0.1.0
9
+ Generated by: https://openapi-generator.tech
10
+ """
11
+
12
+
13
+ import pprint
14
+ import re # noqa: F401
15
+
16
+ import six
17
+
18
+ from openapi_client.configuration import Configuration
19
+
20
+
21
+ class TaskGroupedAggregateMetrics(object):
22
+ """NOTE: This class is auto generated by OpenAPI Generator.
23
+ Ref: https://openapi-generator.tech
24
+
25
+ Do not edit the class manually.
26
+ """
27
+
28
+ """
29
+ Attributes:
30
+ openapi_types (dict): The key is attribute name
31
+ and the value is attribute type.
32
+ attribute_map (dict): The key is attribute name
33
+ and the value is json key in definition.
34
+ """
35
+ openapi_types = {
36
+ 'total': 'int',
37
+ 'count_finished': 'int',
38
+ 'count_failed': 'int',
39
+ 'count_running': 'int',
40
+ 'count_pending_schedule': 'int',
41
+ 'count_pending_dep': 'int',
42
+ 'max_duration_ts_ns': 'int',
43
+ 'min_duration_ts_ns': 'int',
44
+ 'avg_duration_ts_ns': 'int'
45
+ }
46
+
47
+ attribute_map = {
48
+ 'total': 'total',
49
+ 'count_finished': 'count_finished',
50
+ 'count_failed': 'count_failed',
51
+ 'count_running': 'count_running',
52
+ 'count_pending_schedule': 'count_pending_schedule',
53
+ 'count_pending_dep': 'count_pending_dep',
54
+ 'max_duration_ts_ns': 'max_duration_ts_ns',
55
+ 'min_duration_ts_ns': 'min_duration_ts_ns',
56
+ 'avg_duration_ts_ns': 'avg_duration_ts_ns'
57
+ }
58
+
59
+ def __init__(self, total=None, count_finished=None, count_failed=None, count_running=None, count_pending_schedule=None, count_pending_dep=None, max_duration_ts_ns=None, min_duration_ts_ns=None, avg_duration_ts_ns=None, local_vars_configuration=None): # noqa: E501
60
+ """TaskGroupedAggregateMetrics - a model defined in OpenAPI""" # noqa: E501
61
+ if local_vars_configuration is None:
62
+ local_vars_configuration = Configuration()
63
+ self.local_vars_configuration = local_vars_configuration
64
+
65
+ self._total = None
66
+ self._count_finished = None
67
+ self._count_failed = None
68
+ self._count_running = None
69
+ self._count_pending_schedule = None
70
+ self._count_pending_dep = None
71
+ self._max_duration_ts_ns = None
72
+ self._min_duration_ts_ns = None
73
+ self._avg_duration_ts_ns = None
74
+ self.discriminator = None
75
+
76
+ self.total = total
77
+ self.count_finished = count_finished
78
+ self.count_failed = count_failed
79
+ self.count_running = count_running
80
+ self.count_pending_schedule = count_pending_schedule
81
+ self.count_pending_dep = count_pending_dep
82
+ self.max_duration_ts_ns = max_duration_ts_ns
83
+ self.min_duration_ts_ns = min_duration_ts_ns
84
+ self.avg_duration_ts_ns = avg_duration_ts_ns
85
+
86
+ @property
87
+ def total(self):
88
+ """Gets the total of this TaskGroupedAggregateMetrics. # noqa: E501
89
+
90
+
91
+ :return: The total of this TaskGroupedAggregateMetrics. # noqa: E501
92
+ :rtype: int
93
+ """
94
+ return self._total
95
+
96
+ @total.setter
97
+ def total(self, total):
98
+ """Sets the total of this TaskGroupedAggregateMetrics.
99
+
100
+
101
+ :param total: The total of this TaskGroupedAggregateMetrics. # noqa: E501
102
+ :type: int
103
+ """
104
+ if self.local_vars_configuration.client_side_validation and total is None: # noqa: E501
105
+ raise ValueError("Invalid value for `total`, must not be `None`") # noqa: E501
106
+
107
+ self._total = total
108
+
109
+ @property
110
+ def count_finished(self):
111
+ """Gets the count_finished of this TaskGroupedAggregateMetrics. # noqa: E501
112
+
113
+
114
+ :return: The count_finished of this TaskGroupedAggregateMetrics. # noqa: E501
115
+ :rtype: int
116
+ """
117
+ return self._count_finished
118
+
119
+ @count_finished.setter
120
+ def count_finished(self, count_finished):
121
+ """Sets the count_finished of this TaskGroupedAggregateMetrics.
122
+
123
+
124
+ :param count_finished: The count_finished of this TaskGroupedAggregateMetrics. # noqa: E501
125
+ :type: int
126
+ """
127
+ if self.local_vars_configuration.client_side_validation and count_finished is None: # noqa: E501
128
+ raise ValueError("Invalid value for `count_finished`, must not be `None`") # noqa: E501
129
+
130
+ self._count_finished = count_finished
131
+
132
+ @property
133
+ def count_failed(self):
134
+ """Gets the count_failed of this TaskGroupedAggregateMetrics. # noqa: E501
135
+
136
+
137
+ :return: The count_failed of this TaskGroupedAggregateMetrics. # noqa: E501
138
+ :rtype: int
139
+ """
140
+ return self._count_failed
141
+
142
+ @count_failed.setter
143
+ def count_failed(self, count_failed):
144
+ """Sets the count_failed of this TaskGroupedAggregateMetrics.
145
+
146
+
147
+ :param count_failed: The count_failed of this TaskGroupedAggregateMetrics. # noqa: E501
148
+ :type: int
149
+ """
150
+ if self.local_vars_configuration.client_side_validation and count_failed is None: # noqa: E501
151
+ raise ValueError("Invalid value for `count_failed`, must not be `None`") # noqa: E501
152
+
153
+ self._count_failed = count_failed
154
+
155
+ @property
156
+ def count_running(self):
157
+ """Gets the count_running of this TaskGroupedAggregateMetrics. # noqa: E501
158
+
159
+
160
+ :return: The count_running of this TaskGroupedAggregateMetrics. # noqa: E501
161
+ :rtype: int
162
+ """
163
+ return self._count_running
164
+
165
+ @count_running.setter
166
+ def count_running(self, count_running):
167
+ """Sets the count_running of this TaskGroupedAggregateMetrics.
168
+
169
+
170
+ :param count_running: The count_running of this TaskGroupedAggregateMetrics. # noqa: E501
171
+ :type: int
172
+ """
173
+ if self.local_vars_configuration.client_side_validation and count_running is None: # noqa: E501
174
+ raise ValueError("Invalid value for `count_running`, must not be `None`") # noqa: E501
175
+
176
+ self._count_running = count_running
177
+
178
+ @property
179
+ def count_pending_schedule(self):
180
+ """Gets the count_pending_schedule of this TaskGroupedAggregateMetrics. # noqa: E501
181
+
182
+
183
+ :return: The count_pending_schedule of this TaskGroupedAggregateMetrics. # noqa: E501
184
+ :rtype: int
185
+ """
186
+ return self._count_pending_schedule
187
+
188
+ @count_pending_schedule.setter
189
+ def count_pending_schedule(self, count_pending_schedule):
190
+ """Sets the count_pending_schedule of this TaskGroupedAggregateMetrics.
191
+
192
+
193
+ :param count_pending_schedule: The count_pending_schedule of this TaskGroupedAggregateMetrics. # noqa: E501
194
+ :type: int
195
+ """
196
+ if self.local_vars_configuration.client_side_validation and count_pending_schedule is None: # noqa: E501
197
+ raise ValueError("Invalid value for `count_pending_schedule`, must not be `None`") # noqa: E501
198
+
199
+ self._count_pending_schedule = count_pending_schedule
200
+
201
+ @property
202
+ def count_pending_dep(self):
203
+ """Gets the count_pending_dep of this TaskGroupedAggregateMetrics. # noqa: E501
204
+
205
+
206
+ :return: The count_pending_dep of this TaskGroupedAggregateMetrics. # noqa: E501
207
+ :rtype: int
208
+ """
209
+ return self._count_pending_dep
210
+
211
+ @count_pending_dep.setter
212
+ def count_pending_dep(self, count_pending_dep):
213
+ """Sets the count_pending_dep of this TaskGroupedAggregateMetrics.
214
+
215
+
216
+ :param count_pending_dep: The count_pending_dep of this TaskGroupedAggregateMetrics. # noqa: E501
217
+ :type: int
218
+ """
219
+ if self.local_vars_configuration.client_side_validation and count_pending_dep is None: # noqa: E501
220
+ raise ValueError("Invalid value for `count_pending_dep`, must not be `None`") # noqa: E501
221
+
222
+ self._count_pending_dep = count_pending_dep
223
+
224
+ @property
225
+ def max_duration_ts_ns(self):
226
+ """Gets the max_duration_ts_ns of this TaskGroupedAggregateMetrics. # noqa: E501
227
+
228
+
229
+ :return: The max_duration_ts_ns of this TaskGroupedAggregateMetrics. # noqa: E501
230
+ :rtype: int
231
+ """
232
+ return self._max_duration_ts_ns
233
+
234
+ @max_duration_ts_ns.setter
235
+ def max_duration_ts_ns(self, max_duration_ts_ns):
236
+ """Sets the max_duration_ts_ns of this TaskGroupedAggregateMetrics.
237
+
238
+
239
+ :param max_duration_ts_ns: The max_duration_ts_ns of this TaskGroupedAggregateMetrics. # noqa: E501
240
+ :type: int
241
+ """
242
+ if self.local_vars_configuration.client_side_validation and max_duration_ts_ns is None: # noqa: E501
243
+ raise ValueError("Invalid value for `max_duration_ts_ns`, must not be `None`") # noqa: E501
244
+
245
+ self._max_duration_ts_ns = max_duration_ts_ns
246
+
247
+ @property
248
+ def min_duration_ts_ns(self):
249
+ """Gets the min_duration_ts_ns of this TaskGroupedAggregateMetrics. # noqa: E501
250
+
251
+
252
+ :return: The min_duration_ts_ns of this TaskGroupedAggregateMetrics. # noqa: E501
253
+ :rtype: int
254
+ """
255
+ return self._min_duration_ts_ns
256
+
257
+ @min_duration_ts_ns.setter
258
+ def min_duration_ts_ns(self, min_duration_ts_ns):
259
+ """Sets the min_duration_ts_ns of this TaskGroupedAggregateMetrics.
260
+
261
+
262
+ :param min_duration_ts_ns: The min_duration_ts_ns of this TaskGroupedAggregateMetrics. # noqa: E501
263
+ :type: int
264
+ """
265
+ if self.local_vars_configuration.client_side_validation and min_duration_ts_ns is None: # noqa: E501
266
+ raise ValueError("Invalid value for `min_duration_ts_ns`, must not be `None`") # noqa: E501
267
+
268
+ self._min_duration_ts_ns = min_duration_ts_ns
269
+
270
+ @property
271
+ def avg_duration_ts_ns(self):
272
+ """Gets the avg_duration_ts_ns of this TaskGroupedAggregateMetrics. # noqa: E501
273
+
274
+
275
+ :return: The avg_duration_ts_ns of this TaskGroupedAggregateMetrics. # noqa: E501
276
+ :rtype: int
277
+ """
278
+ return self._avg_duration_ts_ns
279
+
280
+ @avg_duration_ts_ns.setter
281
+ def avg_duration_ts_ns(self, avg_duration_ts_ns):
282
+ """Sets the avg_duration_ts_ns of this TaskGroupedAggregateMetrics.
283
+
284
+
285
+ :param avg_duration_ts_ns: The avg_duration_ts_ns of this TaskGroupedAggregateMetrics. # noqa: E501
286
+ :type: int
287
+ """
288
+ if self.local_vars_configuration.client_side_validation and avg_duration_ts_ns is None: # noqa: E501
289
+ raise ValueError("Invalid value for `avg_duration_ts_ns`, must not be `None`") # noqa: E501
290
+
291
+ self._avg_duration_ts_ns = avg_duration_ts_ns
292
+
293
+ def to_dict(self):
294
+ """Returns the model properties as a dict"""
295
+ result = {}
296
+
297
+ for attr, _ in six.iteritems(self.openapi_types):
298
+ value = getattr(self, attr)
299
+ if isinstance(value, list):
300
+ result[attr] = list(map(
301
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
302
+ value
303
+ ))
304
+ elif hasattr(value, "to_dict"):
305
+ result[attr] = value.to_dict()
306
+ elif isinstance(value, dict):
307
+ result[attr] = dict(map(
308
+ lambda item: (item[0], item[1].to_dict())
309
+ if hasattr(item[1], "to_dict") else item,
310
+ value.items()
311
+ ))
312
+ else:
313
+ result[attr] = value
314
+
315
+ return result
316
+
317
+ def to_str(self):
318
+ """Returns the string representation of the model"""
319
+ return pprint.pformat(self.to_dict())
320
+
321
+ def __repr__(self):
322
+ """For `print` and `pprint`"""
323
+ return self.to_str()
324
+
325
+ def __eq__(self, other):
326
+ """Returns true if both objects are equal"""
327
+ if not isinstance(other, TaskGroupedAggregateMetrics):
328
+ return False
329
+
330
+ return self.to_dict() == other.to_dict()
331
+
332
+ def __ne__(self, other):
333
+ """Returns true if both objects are not equal"""
334
+ if not isinstance(other, TaskGroupedAggregateMetrics):
335
+ return True
336
+
337
+ return self.to_dict() != other.to_dict()
@@ -0,0 +1,148 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Managed Ray API
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
+
8
+ The version of the OpenAPI document: 0.1.0
9
+ Generated by: https://openapi-generator.tech
10
+ """
11
+
12
+
13
+ import pprint
14
+ import re # noqa: F401
15
+
16
+ import six
17
+
18
+ from openapi_client.configuration import Configuration
19
+
20
+
21
+ class TaskJobGroupAggregate(object):
22
+ """NOTE: This class is auto generated by OpenAPI Generator.
23
+ Ref: https://openapi-generator.tech
24
+
25
+ Do not edit the class manually.
26
+ """
27
+
28
+ """
29
+ Attributes:
30
+ openapi_types (dict): The key is attribute name
31
+ and the value is attribute type.
32
+ attribute_map (dict): The key is attribute name
33
+ and the value is json key in definition.
34
+ """
35
+ openapi_types = {
36
+ 'job_id': 'str',
37
+ 'metrics': 'TaskGroupedAggregateMetrics'
38
+ }
39
+
40
+ attribute_map = {
41
+ 'job_id': 'job_id',
42
+ 'metrics': 'metrics'
43
+ }
44
+
45
+ def __init__(self, job_id=None, metrics=None, local_vars_configuration=None): # noqa: E501
46
+ """TaskJobGroupAggregate - a model defined in OpenAPI""" # noqa: E501
47
+ if local_vars_configuration is None:
48
+ local_vars_configuration = Configuration()
49
+ self.local_vars_configuration = local_vars_configuration
50
+
51
+ self._job_id = None
52
+ self._metrics = None
53
+ self.discriminator = None
54
+
55
+ self.job_id = job_id
56
+ self.metrics = metrics
57
+
58
+ @property
59
+ def job_id(self):
60
+ """Gets the job_id of this TaskJobGroupAggregate. # noqa: E501
61
+
62
+
63
+ :return: The job_id of this TaskJobGroupAggregate. # noqa: E501
64
+ :rtype: str
65
+ """
66
+ return self._job_id
67
+
68
+ @job_id.setter
69
+ def job_id(self, job_id):
70
+ """Sets the job_id of this TaskJobGroupAggregate.
71
+
72
+
73
+ :param job_id: The job_id of this TaskJobGroupAggregate. # noqa: E501
74
+ :type: str
75
+ """
76
+ if self.local_vars_configuration.client_side_validation and job_id is None: # noqa: E501
77
+ raise ValueError("Invalid value for `job_id`, must not be `None`") # noqa: E501
78
+
79
+ self._job_id = job_id
80
+
81
+ @property
82
+ def metrics(self):
83
+ """Gets the metrics of this TaskJobGroupAggregate. # noqa: E501
84
+
85
+
86
+ :return: The metrics of this TaskJobGroupAggregate. # noqa: E501
87
+ :rtype: TaskGroupedAggregateMetrics
88
+ """
89
+ return self._metrics
90
+
91
+ @metrics.setter
92
+ def metrics(self, metrics):
93
+ """Sets the metrics of this TaskJobGroupAggregate.
94
+
95
+
96
+ :param metrics: The metrics of this TaskJobGroupAggregate. # noqa: E501
97
+ :type: TaskGroupedAggregateMetrics
98
+ """
99
+ if self.local_vars_configuration.client_side_validation and metrics is None: # noqa: E501
100
+ raise ValueError("Invalid value for `metrics`, must not be `None`") # noqa: E501
101
+
102
+ self._metrics = metrics
103
+
104
+ def to_dict(self):
105
+ """Returns the model properties as a dict"""
106
+ result = {}
107
+
108
+ for attr, _ in six.iteritems(self.openapi_types):
109
+ value = getattr(self, attr)
110
+ if isinstance(value, list):
111
+ result[attr] = list(map(
112
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
113
+ value
114
+ ))
115
+ elif hasattr(value, "to_dict"):
116
+ result[attr] = value.to_dict()
117
+ elif isinstance(value, dict):
118
+ result[attr] = dict(map(
119
+ lambda item: (item[0], item[1].to_dict())
120
+ if hasattr(item[1], "to_dict") else item,
121
+ value.items()
122
+ ))
123
+ else:
124
+ result[attr] = value
125
+
126
+ return result
127
+
128
+ def to_str(self):
129
+ """Returns the string representation of the model"""
130
+ return pprint.pformat(self.to_dict())
131
+
132
+ def __repr__(self):
133
+ """For `print` and `pprint`"""
134
+ return self.to_str()
135
+
136
+ def __eq__(self, other):
137
+ """Returns true if both objects are equal"""
138
+ if not isinstance(other, TaskJobGroupAggregate):
139
+ return False
140
+
141
+ return self.to_dict() == other.to_dict()
142
+
143
+ def __ne__(self, other):
144
+ """Returns true if both objects are not equal"""
145
+ if not isinstance(other, TaskJobGroupAggregate):
146
+ return True
147
+
148
+ return self.to_dict() != other.to_dict()
@@ -0,0 +1,103 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Managed Ray API
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
+
8
+ The version of the OpenAPI document: 0.1.0
9
+ Generated by: https://openapi-generator.tech
10
+ """
11
+
12
+
13
+ import pprint
14
+ import re # noqa: F401
15
+
16
+ import six
17
+
18
+ from openapi_client.configuration import Configuration
19
+
20
+
21
+ class TaskState(object):
22
+ """NOTE: This class is auto generated by OpenAPI Generator.
23
+ Ref: https://openapi-generator.tech
24
+
25
+ Do not edit the class manually.
26
+ """
27
+
28
+ """
29
+ allowed enum values
30
+ """
31
+ PENDING_DEPENDENCIES = "PENDING_DEPENDENCIES"
32
+ PENDING_SCHEDULE = "PENDING_SCHEDULE"
33
+ RUNNING = "RUNNING"
34
+ FINISHED = "FINISHED"
35
+ FAILED = "FAILED"
36
+
37
+ allowable_values = [PENDING_DEPENDENCIES, PENDING_SCHEDULE, RUNNING, FINISHED, FAILED] # noqa: E501
38
+
39
+ """
40
+ Attributes:
41
+ openapi_types (dict): The key is attribute name
42
+ and the value is attribute type.
43
+ attribute_map (dict): The key is attribute name
44
+ and the value is json key in definition.
45
+ """
46
+ openapi_types = {
47
+ }
48
+
49
+ attribute_map = {
50
+ }
51
+
52
+ def __init__(self, local_vars_configuration=None): # noqa: E501
53
+ """TaskState - a model defined in OpenAPI""" # noqa: E501
54
+ if local_vars_configuration is None:
55
+ local_vars_configuration = Configuration()
56
+ self.local_vars_configuration = local_vars_configuration
57
+ self.discriminator = None
58
+
59
+ def to_dict(self):
60
+ """Returns the model properties as a dict"""
61
+ result = {}
62
+
63
+ for attr, _ in six.iteritems(self.openapi_types):
64
+ value = getattr(self, attr)
65
+ if isinstance(value, list):
66
+ result[attr] = list(map(
67
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
68
+ value
69
+ ))
70
+ elif hasattr(value, "to_dict"):
71
+ result[attr] = value.to_dict()
72
+ elif isinstance(value, dict):
73
+ result[attr] = dict(map(
74
+ lambda item: (item[0], item[1].to_dict())
75
+ if hasattr(item[1], "to_dict") else item,
76
+ value.items()
77
+ ))
78
+ else:
79
+ result[attr] = value
80
+
81
+ return result
82
+
83
+ def to_str(self):
84
+ """Returns the string representation of the model"""
85
+ return pprint.pformat(self.to_dict())
86
+
87
+ def __repr__(self):
88
+ """For `print` and `pprint`"""
89
+ return self.to_str()
90
+
91
+ def __eq__(self, other):
92
+ """Returns true if both objects are equal"""
93
+ if not isinstance(other, TaskState):
94
+ return False
95
+
96
+ return self.to_dict() == other.to_dict()
97
+
98
+ def __ne__(self, other):
99
+ """Returns true if both objects are not equal"""
100
+ if not isinstance(other, TaskState):
101
+ return True
102
+
103
+ return self.to_dict() != other.to_dict()