ciocore 5.1.1__py2.py3-none-any.whl → 10.0.0b3__py2.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 (126) hide show
  1. ciocore/VERSION +1 -1
  2. ciocore/__init__.py +23 -1
  3. ciocore/api_client.py +655 -160
  4. ciocore/auth/__init__.py +5 -3
  5. ciocore/cli.py +501 -0
  6. ciocore/common.py +15 -13
  7. ciocore/conductor_submit.py +77 -60
  8. ciocore/config.py +127 -13
  9. ciocore/data.py +162 -77
  10. ciocore/docsite/404.html +746 -0
  11. ciocore/docsite/apidoc/api_client/index.html +3605 -0
  12. ciocore/docsite/apidoc/apidoc/index.html +909 -0
  13. ciocore/docsite/apidoc/config/index.html +1652 -0
  14. ciocore/docsite/apidoc/data/index.html +1553 -0
  15. ciocore/docsite/apidoc/hardware_set/index.html +2460 -0
  16. ciocore/docsite/apidoc/package_environment/index.html +1507 -0
  17. ciocore/docsite/apidoc/package_tree/index.html +2386 -0
  18. ciocore/docsite/assets/_mkdocstrings.css +16 -0
  19. ciocore/docsite/assets/images/favicon.png +0 -0
  20. ciocore/docsite/assets/javascripts/bundle.471ce7a9.min.js +29 -0
  21. ciocore/docsite/assets/javascripts/bundle.471ce7a9.min.js.map +7 -0
  22. ciocore/docsite/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
  23. ciocore/docsite/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
  24. ciocore/docsite/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
  25. ciocore/docsite/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
  26. ciocore/docsite/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
  27. ciocore/docsite/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
  28. ciocore/docsite/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
  29. ciocore/docsite/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
  30. ciocore/docsite/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
  31. ciocore/docsite/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
  32. ciocore/docsite/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
  33. ciocore/docsite/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
  34. ciocore/docsite/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
  35. ciocore/docsite/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
  36. ciocore/docsite/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
  37. ciocore/docsite/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
  38. ciocore/docsite/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
  39. ciocore/docsite/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
  40. ciocore/docsite/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
  41. ciocore/docsite/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
  42. ciocore/docsite/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
  43. ciocore/docsite/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
  44. ciocore/docsite/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
  45. ciocore/docsite/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
  46. ciocore/docsite/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
  47. ciocore/docsite/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
  48. ciocore/docsite/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
  49. ciocore/docsite/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
  50. ciocore/docsite/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
  51. ciocore/docsite/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
  52. ciocore/docsite/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
  53. ciocore/docsite/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
  54. ciocore/docsite/assets/javascripts/lunr/tinyseg.js +206 -0
  55. ciocore/docsite/assets/javascripts/lunr/wordcut.js +6708 -0
  56. ciocore/docsite/assets/javascripts/workers/search.b8dbb3d2.min.js +42 -0
  57. ciocore/docsite/assets/javascripts/workers/search.b8dbb3d2.min.js.map +7 -0
  58. ciocore/docsite/assets/stylesheets/main.3cba04c6.min.css +1 -0
  59. ciocore/docsite/assets/stylesheets/main.3cba04c6.min.css.map +1 -0
  60. ciocore/docsite/assets/stylesheets/palette.06af60db.min.css +1 -0
  61. ciocore/docsite/assets/stylesheets/palette.06af60db.min.css.map +1 -0
  62. ciocore/docsite/cmdline/docs/index.html +871 -0
  63. ciocore/docsite/cmdline/downloader/index.html +934 -0
  64. ciocore/docsite/cmdline/packages/index.html +878 -0
  65. ciocore/docsite/cmdline/uploader/index.html +995 -0
  66. ciocore/docsite/how-to-guides/index.html +869 -0
  67. ciocore/docsite/index.html +895 -0
  68. ciocore/docsite/logo.png +0 -0
  69. ciocore/docsite/objects.inv +0 -0
  70. ciocore/docsite/search/search_index.json +1 -0
  71. ciocore/docsite/sitemap.xml +3 -0
  72. ciocore/docsite/sitemap.xml.gz +0 -0
  73. ciocore/docsite/stylesheets/extra.css +26 -0
  74. ciocore/docsite/stylesheets/tables.css +167 -0
  75. ciocore/downloader/base_downloader.py +644 -0
  76. ciocore/downloader/download_runner_base.py +47 -0
  77. ciocore/downloader/job_downloader.py +119 -0
  78. ciocore/{downloader.py → downloader/legacy_downloader.py} +12 -9
  79. ciocore/downloader/log.py +73 -0
  80. ciocore/downloader/logging_download_runner.py +87 -0
  81. ciocore/downloader/perpetual_downloader.py +63 -0
  82. ciocore/downloader/registry.py +97 -0
  83. ciocore/downloader/reporter.py +135 -0
  84. ciocore/exceptions.py +8 -2
  85. ciocore/file_utils.py +51 -50
  86. ciocore/hardware_set.py +449 -0
  87. ciocore/loggeria.py +89 -20
  88. ciocore/package_environment.py +110 -48
  89. ciocore/package_query.py +182 -0
  90. ciocore/package_tree.py +319 -258
  91. ciocore/retry.py +0 -0
  92. ciocore/uploader/_uploader.py +547 -364
  93. ciocore/uploader/thread_queue_job.py +176 -0
  94. ciocore/uploader/upload_stats/__init__.py +3 -4
  95. ciocore/uploader/upload_stats/stats_formats.py +10 -4
  96. ciocore/validator.py +34 -2
  97. ciocore/worker.py +174 -151
  98. ciocore-10.0.0b3.dist-info/METADATA +928 -0
  99. ciocore-10.0.0b3.dist-info/RECORD +128 -0
  100. {ciocore-5.1.1.dist-info → ciocore-10.0.0b3.dist-info}/WHEEL +1 -1
  101. ciocore-10.0.0b3.dist-info/entry_points.txt +2 -0
  102. tests/instance_type_fixtures.py +175 -0
  103. tests/package_fixtures.py +205 -0
  104. tests/test_api_client.py +297 -12
  105. tests/test_base_downloader.py +104 -0
  106. tests/test_cli.py +149 -0
  107. tests/test_common.py +1 -7
  108. tests/test_config.py +40 -18
  109. tests/test_data.py +162 -173
  110. tests/test_downloader.py +118 -0
  111. tests/test_hardware_set.py +139 -0
  112. tests/test_job_downloader.py +213 -0
  113. tests/test_package_query.py +38 -0
  114. tests/test_package_tree.py +91 -291
  115. tests/test_submit.py +44 -18
  116. tests/test_uploader.py +1 -4
  117. ciocore/__about__.py +0 -10
  118. ciocore/cli/conductor.py +0 -191
  119. ciocore/compat.py +0 -15
  120. ciocore-5.1.1.data/scripts/conductor +0 -19
  121. ciocore-5.1.1.data/scripts/conductor.bat +0 -13
  122. ciocore-5.1.1.dist-info/METADATA +0 -408
  123. ciocore-5.1.1.dist-info/RECORD +0 -47
  124. tests/mocks/api_client_mock.py +0 -51
  125. /ciocore/{cli → downloader}/__init__.py +0 -0
  126. {ciocore-5.1.1.dist-info → ciocore-10.0.0b3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,2460 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en" class="no-js">
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+
9
+
10
+ <meta name="author" content="Conductor Developers">
11
+
12
+
13
+
14
+ <link rel="prev" href="../data/">
15
+
16
+
17
+ <link rel="next" href="../package_tree/">
18
+
19
+
20
+ <link rel="icon" href="../../assets/images/favicon.png">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.32">
22
+
23
+
24
+
25
+ <title>ciocore.hardware_set - Conductor Core</title>
26
+
27
+
28
+
29
+ <link rel="stylesheet" href="../../assets/stylesheets/main.3cba04c6.min.css">
30
+
31
+
32
+ <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
46
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Raleway:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
47
+ <style>:root{--md-text-font:"Raleway";--md-code-font:"Roboto Mono"}</style>
48
+
49
+
50
+
51
+ <link rel="stylesheet" href="../../assets/_mkdocstrings.css">
52
+
53
+ <link rel="stylesheet" href="../../stylesheets/extra.css">
54
+
55
+ <link rel="stylesheet" href="../../stylesheets/tables.css">
56
+
57
+ <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
58
+
59
+
60
+
61
+
62
+
63
+
64
+ </head>
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+ <body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom">
75
+
76
+
77
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
78
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
79
+ <label class="md-overlay" for="__drawer"></label>
80
+ <div data-md-component="skip">
81
+
82
+
83
+ <a href="#ciocorehardware_set" class="md-skip">
84
+ Skip to content
85
+ </a>
86
+
87
+ </div>
88
+ <div data-md-component="announce">
89
+
90
+ </div>
91
+
92
+
93
+
94
+
95
+
96
+
97
+ <header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
98
+ <nav class="md-header__inner md-grid" aria-label="Header">
99
+ <a href="https://www.conductortech.com" title="Conductor Core" class="md-header__button md-logo" aria-label="Conductor Core" data-md-component="logo">
100
+
101
+ <img src="../../logo.png" alt="logo">
102
+
103
+ </a>
104
+ <label class="md-header__button md-icon" for="__drawer">
105
+
106
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
107
+ </label>
108
+ <div class="md-header__title" data-md-component="header-title">
109
+ <div class="md-header__ellipsis">
110
+ <div class="md-header__topic">
111
+ <span class="md-ellipsis">
112
+ Conductor Core
113
+ </span>
114
+ </div>
115
+ <div class="md-header__topic" data-md-component="header-topic">
116
+ <span class="md-ellipsis">
117
+
118
+ ciocore.hardware_set
119
+
120
+ </span>
121
+ </div>
122
+ </div>
123
+ </div>
124
+
125
+
126
+ <form class="md-header__option" data-md-component="palette">
127
+
128
+
129
+
130
+
131
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
132
+
133
+ <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
134
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31Z"/></svg>
135
+ </label>
136
+
137
+
138
+
139
+
140
+
141
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
142
+
143
+ <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_0" hidden>
144
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5c-.84 0-1.65.15-2.39.42L12 2M3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29L3.34 7m.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14L3.36 17M20.65 7l-1.77 3.79a7.023 7.023 0 0 0-2.38-4.15l4.15.36m-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29L20.64 17M12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44L12 22Z"/></svg>
145
+ </label>
146
+
147
+
148
+ </form>
149
+
150
+
151
+
152
+ <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
153
+
154
+
155
+
156
+ <label class="md-header__button md-icon" for="__search">
157
+
158
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
159
+ </label>
160
+ <div class="md-search" data-md-component="search" role="dialog">
161
+ <label class="md-search__overlay" for="__search"></label>
162
+ <div class="md-search__inner" role="search">
163
+ <form class="md-search__form" name="search">
164
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
165
+ <label class="md-search__icon md-icon" for="__search">
166
+
167
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
168
+
169
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
170
+ </label>
171
+ <nav class="md-search__options" aria-label="Search">
172
+
173
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
174
+
175
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
176
+ </button>
177
+ </nav>
178
+
179
+ </form>
180
+ <div class="md-search__output">
181
+ <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
182
+ <div class="md-search-result" data-md-component="search-result">
183
+ <div class="md-search-result__meta">
184
+ Initializing search
185
+ </div>
186
+ <ol class="md-search-result__list" role="presentation"></ol>
187
+ </div>
188
+ </div>
189
+ </div>
190
+ </div>
191
+ </div>
192
+
193
+
194
+ </nav>
195
+
196
+
197
+
198
+ <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
199
+ <div class="md-grid">
200
+ <ul class="md-tabs__list">
201
+
202
+
203
+
204
+
205
+
206
+ <li class="md-tabs__item">
207
+ <a href="../.." class="md-tabs__link">
208
+
209
+
210
+
211
+
212
+ Overview
213
+
214
+ </a>
215
+ </li>
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+ <li class="md-tabs__item">
226
+ <a href="../../cmdline/uploader/" class="md-tabs__link">
227
+
228
+
229
+ CLI
230
+
231
+ </a>
232
+ </li>
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+ <li class="md-tabs__item md-tabs__item--active">
246
+ <a href="../apidoc/" class="md-tabs__link">
247
+
248
+
249
+ API
250
+
251
+ </a>
252
+ </li>
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+ <li class="md-tabs__item">
262
+ <a href="../../how-to-guides/" class="md-tabs__link">
263
+
264
+
265
+
266
+
267
+ How to
268
+
269
+ </a>
270
+ </li>
271
+
272
+
273
+
274
+ </ul>
275
+ </div>
276
+ </nav>
277
+
278
+
279
+ </header>
280
+
281
+ <div class="md-container" data-md-component="container">
282
+
283
+
284
+
285
+
286
+ <main class="md-main" data-md-component="main">
287
+ <div class="md-main__inner md-grid">
288
+
289
+
290
+
291
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
292
+ <div class="md-sidebar__scrollwrap">
293
+ <div class="md-sidebar__inner">
294
+
295
+
296
+
297
+
298
+
299
+
300
+ <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
301
+ <label class="md-nav__title" for="__drawer">
302
+ <a href="https://www.conductortech.com" title="Conductor Core" class="md-nav__button md-logo" aria-label="Conductor Core" data-md-component="logo">
303
+
304
+ <img src="../../logo.png" alt="logo">
305
+
306
+ </a>
307
+ Conductor Core
308
+ </label>
309
+
310
+ <ul class="md-nav__list" data-md-scrollfix>
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+ <li class="md-nav__item">
319
+ <a href="../.." class="md-nav__link">
320
+
321
+
322
+ <span class="md-ellipsis">
323
+ Overview
324
+ </span>
325
+
326
+
327
+ </a>
328
+ </li>
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+ <li class="md-nav__item md-nav__item--nested">
346
+
347
+
348
+
349
+
350
+
351
+ <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
352
+
353
+
354
+ <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
355
+
356
+
357
+ <span class="md-ellipsis">
358
+ CLI
359
+ </span>
360
+
361
+
362
+ <span class="md-nav__icon md-icon"></span>
363
+ </label>
364
+
365
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
366
+ <label class="md-nav__title" for="__nav_2">
367
+ <span class="md-nav__icon md-icon"></span>
368
+ CLI
369
+ </label>
370
+ <ul class="md-nav__list" data-md-scrollfix>
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+ <li class="md-nav__item">
379
+ <a href="../../cmdline/uploader/" class="md-nav__link">
380
+
381
+
382
+ <span class="md-ellipsis">
383
+ Uploader
384
+ </span>
385
+
386
+
387
+ </a>
388
+ </li>
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+ <li class="md-nav__item">
400
+ <a href="../../cmdline/downloader/" class="md-nav__link">
401
+
402
+
403
+ <span class="md-ellipsis">
404
+ Downloader
405
+ </span>
406
+
407
+
408
+ </a>
409
+ </li>
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+ <li class="md-nav__item">
421
+ <a href="../../cmdline/packages/" class="md-nav__link">
422
+
423
+
424
+ <span class="md-ellipsis">
425
+ Packages
426
+ </span>
427
+
428
+
429
+ </a>
430
+ </li>
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+ <li class="md-nav__item">
442
+ <a href="../../cmdline/docs/" class="md-nav__link">
443
+
444
+
445
+ <span class="md-ellipsis">
446
+ Docs
447
+ </span>
448
+
449
+
450
+ </a>
451
+ </li>
452
+
453
+
454
+
455
+
456
+ </ul>
457
+ </nav>
458
+
459
+ </li>
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+ <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
482
+
483
+
484
+
485
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
486
+
487
+
488
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
489
+
490
+
491
+ <span class="md-ellipsis">
492
+ API
493
+ </span>
494
+
495
+
496
+ <span class="md-nav__icon md-icon"></span>
497
+ </label>
498
+
499
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
500
+ <label class="md-nav__title" for="__nav_3">
501
+ <span class="md-nav__icon md-icon"></span>
502
+ API
503
+ </label>
504
+ <ul class="md-nav__list" data-md-scrollfix>
505
+
506
+
507
+
508
+
509
+
510
+
511
+
512
+ <li class="md-nav__item">
513
+ <a href="../apidoc/" class="md-nav__link">
514
+
515
+
516
+ <span class="md-ellipsis">
517
+ Api Overview
518
+ </span>
519
+
520
+
521
+ </a>
522
+ </li>
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+ <li class="md-nav__item">
534
+ <a href="../api_client/" class="md-nav__link">
535
+
536
+
537
+ <span class="md-ellipsis">
538
+ ciocore.api_client
539
+ </span>
540
+
541
+
542
+ </a>
543
+ </li>
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+ <li class="md-nav__item">
555
+ <a href="../config/" class="md-nav__link">
556
+
557
+
558
+ <span class="md-ellipsis">
559
+ ciocore.config
560
+ </span>
561
+
562
+
563
+ </a>
564
+ </li>
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+ <li class="md-nav__item">
576
+ <a href="../data/" class="md-nav__link">
577
+
578
+
579
+ <span class="md-ellipsis">
580
+ ciocore.data
581
+ </span>
582
+
583
+
584
+ </a>
585
+ </li>
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+
596
+
597
+
598
+ <li class="md-nav__item md-nav__item--active">
599
+
600
+ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
601
+
602
+
603
+
604
+
605
+
606
+ <label class="md-nav__link md-nav__link--active" for="__toc">
607
+
608
+
609
+ <span class="md-ellipsis">
610
+ ciocore.hardware_set
611
+ </span>
612
+
613
+
614
+ <span class="md-nav__icon md-icon"></span>
615
+ </label>
616
+
617
+ <a href="./" class="md-nav__link md-nav__link--active">
618
+
619
+
620
+ <span class="md-ellipsis">
621
+ ciocore.hardware_set
622
+ </span>
623
+
624
+
625
+ </a>
626
+
627
+
628
+
629
+ <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
630
+
631
+
632
+
633
+
634
+
635
+
636
+ <label class="md-nav__title" for="__toc">
637
+ <span class="md-nav__icon md-icon"></span>
638
+ Table of contents
639
+ </label>
640
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
641
+
642
+ <li class="md-nav__item">
643
+ <a href="#ciocore.hardware_set" class="md-nav__link">
644
+ <span class="md-ellipsis">
645
+ ciocore.hardware_set
646
+ </span>
647
+ </a>
648
+
649
+ </li>
650
+
651
+ <li class="md-nav__item">
652
+ <a href="#ciocore.hardware_set.HardwareSet" class="md-nav__link">
653
+ <span class="md-ellipsis">
654
+ HardwareSet
655
+ </span>
656
+ </a>
657
+
658
+ <nav class="md-nav" aria-label="HardwareSet">
659
+ <ul class="md-nav__list">
660
+
661
+ <li class="md-nav__item">
662
+ <a href="#ciocore.hardware_set.HardwareSet.__init__" class="md-nav__link">
663
+ <span class="md-ellipsis">
664
+ __init__()
665
+ </span>
666
+ </a>
667
+
668
+ <nav class="md-nav" aria-label="__init__()">
669
+ <ul class="md-nav__list">
670
+
671
+ <li class="md-nav__item">
672
+ <a href="#ciocore.hardware_set.HardwareSet.__init__--initialize-with-a-list-of-instance-types" class="md-nav__link">
673
+ <span class="md-ellipsis">
674
+ Initialize with a list of instance types
675
+ </span>
676
+ </a>
677
+
678
+ </li>
679
+
680
+ <li class="md-nav__item">
681
+ <a href="#ciocore.hardware_set.HardwareSet.__init__--initialize-implicitly-with-a-list-of-instance-types-from-ciocoredata-recommended" class="md-nav__link">
682
+ <span class="md-ellipsis">
683
+ Initialize implicitly with a list of instance types from ciocore.data (recommended).
684
+ </span>
685
+ </a>
686
+
687
+ </li>
688
+
689
+ </ul>
690
+ </nav>
691
+
692
+ </li>
693
+
694
+ <li class="md-nav__item">
695
+ <a href="#ciocore.hardware_set.HardwareSet.labels" class="md-nav__link">
696
+ <span class="md-ellipsis">
697
+ labels()
698
+ </span>
699
+ </a>
700
+
701
+ </li>
702
+
703
+ <li class="md-nav__item">
704
+ <a href="#ciocore.hardware_set.HardwareSet.number_of_categories" class="md-nav__link">
705
+ <span class="md-ellipsis">
706
+ number_of_categories()
707
+ </span>
708
+ </a>
709
+
710
+ </li>
711
+
712
+ <li class="md-nav__item">
713
+ <a href="#ciocore.hardware_set.HardwareSet.recategorize" class="md-nav__link">
714
+ <span class="md-ellipsis">
715
+ recategorize()
716
+ </span>
717
+ </a>
718
+
719
+ <nav class="md-nav" aria-label="recategorize()">
720
+ <ul class="md-nav__list">
721
+
722
+ <li class="md-nav__item">
723
+ <a href="#ciocore.hardware_set.HardwareSet.recategorize--confirm-current-categories" class="md-nav__link">
724
+ <span class="md-ellipsis">
725
+ Confirm current categories
726
+ </span>
727
+ </a>
728
+
729
+ </li>
730
+
731
+ <li class="md-nav__item">
732
+ <a href="#ciocore.hardware_set.HardwareSet.recategorize--recategorize" class="md-nav__link">
733
+ <span class="md-ellipsis">
734
+ Recategorize
735
+ </span>
736
+ </a>
737
+
738
+ </li>
739
+
740
+ </ul>
741
+ </nav>
742
+
743
+ </li>
744
+
745
+ <li class="md-nav__item">
746
+ <a href="#ciocore.hardware_set.HardwareSet.find" class="md-nav__link">
747
+ <span class="md-ellipsis">
748
+ find()
749
+ </span>
750
+ </a>
751
+
752
+ </li>
753
+
754
+ <li class="md-nav__item">
755
+ <a href="#ciocore.hardware_set.HardwareSet.find_category" class="md-nav__link">
756
+ <span class="md-ellipsis">
757
+ find_category()
758
+ </span>
759
+ </a>
760
+
761
+ </li>
762
+
763
+ <li class="md-nav__item">
764
+ <a href="#ciocore.hardware_set.HardwareSet.find_all" class="md-nav__link">
765
+ <span class="md-ellipsis">
766
+ find_all()
767
+ </span>
768
+ </a>
769
+
770
+ </li>
771
+
772
+ <li class="md-nav__item">
773
+ <a href="#ciocore.hardware_set.HardwareSet.find_first" class="md-nav__link">
774
+ <span class="md-ellipsis">
775
+ find_first()
776
+ </span>
777
+ </a>
778
+
779
+ </li>
780
+
781
+ <li class="md-nav__item">
782
+ <a href="#ciocore.hardware_set.HardwareSet.get_model" class="md-nav__link">
783
+ <span class="md-ellipsis">
784
+ get_model()
785
+ </span>
786
+ </a>
787
+
788
+ </li>
789
+
790
+ </ul>
791
+ </nav>
792
+
793
+ </li>
794
+
795
+ </ul>
796
+
797
+ </nav>
798
+
799
+ </li>
800
+
801
+
802
+
803
+
804
+
805
+
806
+
807
+
808
+
809
+
810
+ <li class="md-nav__item">
811
+ <a href="../package_tree/" class="md-nav__link">
812
+
813
+
814
+ <span class="md-ellipsis">
815
+ ciocore.package_tree
816
+ </span>
817
+
818
+
819
+ </a>
820
+ </li>
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+
831
+ <li class="md-nav__item">
832
+ <a href="../package_environment/" class="md-nav__link">
833
+
834
+
835
+ <span class="md-ellipsis">
836
+ ciocore.package_environment
837
+ </span>
838
+
839
+
840
+ </a>
841
+ </li>
842
+
843
+
844
+
845
+
846
+ </ul>
847
+ </nav>
848
+
849
+ </li>
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+ <li class="md-nav__item">
860
+ <a href="../../how-to-guides/" class="md-nav__link">
861
+
862
+
863
+ <span class="md-ellipsis">
864
+ How to
865
+ </span>
866
+
867
+
868
+ </a>
869
+ </li>
870
+
871
+
872
+
873
+ </ul>
874
+ </nav>
875
+ </div>
876
+ </div>
877
+ </div>
878
+
879
+
880
+
881
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
882
+ <div class="md-sidebar__scrollwrap">
883
+ <div class="md-sidebar__inner">
884
+
885
+
886
+ <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
887
+
888
+
889
+
890
+
891
+
892
+
893
+ <label class="md-nav__title" for="__toc">
894
+ <span class="md-nav__icon md-icon"></span>
895
+ Table of contents
896
+ </label>
897
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
898
+
899
+ <li class="md-nav__item">
900
+ <a href="#ciocore.hardware_set" class="md-nav__link">
901
+ <span class="md-ellipsis">
902
+ ciocore.hardware_set
903
+ </span>
904
+ </a>
905
+
906
+ </li>
907
+
908
+ <li class="md-nav__item">
909
+ <a href="#ciocore.hardware_set.HardwareSet" class="md-nav__link">
910
+ <span class="md-ellipsis">
911
+ HardwareSet
912
+ </span>
913
+ </a>
914
+
915
+ <nav class="md-nav" aria-label="HardwareSet">
916
+ <ul class="md-nav__list">
917
+
918
+ <li class="md-nav__item">
919
+ <a href="#ciocore.hardware_set.HardwareSet.__init__" class="md-nav__link">
920
+ <span class="md-ellipsis">
921
+ __init__()
922
+ </span>
923
+ </a>
924
+
925
+ <nav class="md-nav" aria-label="__init__()">
926
+ <ul class="md-nav__list">
927
+
928
+ <li class="md-nav__item">
929
+ <a href="#ciocore.hardware_set.HardwareSet.__init__--initialize-with-a-list-of-instance-types" class="md-nav__link">
930
+ <span class="md-ellipsis">
931
+ Initialize with a list of instance types
932
+ </span>
933
+ </a>
934
+
935
+ </li>
936
+
937
+ <li class="md-nav__item">
938
+ <a href="#ciocore.hardware_set.HardwareSet.__init__--initialize-implicitly-with-a-list-of-instance-types-from-ciocoredata-recommended" class="md-nav__link">
939
+ <span class="md-ellipsis">
940
+ Initialize implicitly with a list of instance types from ciocore.data (recommended).
941
+ </span>
942
+ </a>
943
+
944
+ </li>
945
+
946
+ </ul>
947
+ </nav>
948
+
949
+ </li>
950
+
951
+ <li class="md-nav__item">
952
+ <a href="#ciocore.hardware_set.HardwareSet.labels" class="md-nav__link">
953
+ <span class="md-ellipsis">
954
+ labels()
955
+ </span>
956
+ </a>
957
+
958
+ </li>
959
+
960
+ <li class="md-nav__item">
961
+ <a href="#ciocore.hardware_set.HardwareSet.number_of_categories" class="md-nav__link">
962
+ <span class="md-ellipsis">
963
+ number_of_categories()
964
+ </span>
965
+ </a>
966
+
967
+ </li>
968
+
969
+ <li class="md-nav__item">
970
+ <a href="#ciocore.hardware_set.HardwareSet.recategorize" class="md-nav__link">
971
+ <span class="md-ellipsis">
972
+ recategorize()
973
+ </span>
974
+ </a>
975
+
976
+ <nav class="md-nav" aria-label="recategorize()">
977
+ <ul class="md-nav__list">
978
+
979
+ <li class="md-nav__item">
980
+ <a href="#ciocore.hardware_set.HardwareSet.recategorize--confirm-current-categories" class="md-nav__link">
981
+ <span class="md-ellipsis">
982
+ Confirm current categories
983
+ </span>
984
+ </a>
985
+
986
+ </li>
987
+
988
+ <li class="md-nav__item">
989
+ <a href="#ciocore.hardware_set.HardwareSet.recategorize--recategorize" class="md-nav__link">
990
+ <span class="md-ellipsis">
991
+ Recategorize
992
+ </span>
993
+ </a>
994
+
995
+ </li>
996
+
997
+ </ul>
998
+ </nav>
999
+
1000
+ </li>
1001
+
1002
+ <li class="md-nav__item">
1003
+ <a href="#ciocore.hardware_set.HardwareSet.find" class="md-nav__link">
1004
+ <span class="md-ellipsis">
1005
+ find()
1006
+ </span>
1007
+ </a>
1008
+
1009
+ </li>
1010
+
1011
+ <li class="md-nav__item">
1012
+ <a href="#ciocore.hardware_set.HardwareSet.find_category" class="md-nav__link">
1013
+ <span class="md-ellipsis">
1014
+ find_category()
1015
+ </span>
1016
+ </a>
1017
+
1018
+ </li>
1019
+
1020
+ <li class="md-nav__item">
1021
+ <a href="#ciocore.hardware_set.HardwareSet.find_all" class="md-nav__link">
1022
+ <span class="md-ellipsis">
1023
+ find_all()
1024
+ </span>
1025
+ </a>
1026
+
1027
+ </li>
1028
+
1029
+ <li class="md-nav__item">
1030
+ <a href="#ciocore.hardware_set.HardwareSet.find_first" class="md-nav__link">
1031
+ <span class="md-ellipsis">
1032
+ find_first()
1033
+ </span>
1034
+ </a>
1035
+
1036
+ </li>
1037
+
1038
+ <li class="md-nav__item">
1039
+ <a href="#ciocore.hardware_set.HardwareSet.get_model" class="md-nav__link">
1040
+ <span class="md-ellipsis">
1041
+ get_model()
1042
+ </span>
1043
+ </a>
1044
+
1045
+ </li>
1046
+
1047
+ </ul>
1048
+ </nav>
1049
+
1050
+ </li>
1051
+
1052
+ </ul>
1053
+
1054
+ </nav>
1055
+ </div>
1056
+ </div>
1057
+ </div>
1058
+
1059
+
1060
+
1061
+ <div class="md-content" data-md-component="content">
1062
+ <article class="md-content__inner md-typeset">
1063
+
1064
+
1065
+
1066
+
1067
+ <h1 id="ciocorehardware_set">ciocore.hardware_set</h1>
1068
+
1069
+
1070
+ <div class="doc doc-object doc-module">
1071
+
1072
+ <a id="ciocore.hardware_set"></a>
1073
+ <div class="doc doc-contents first">
1074
+
1075
+ <p>This module contains the <strong>HardwareSet</strong> class. </p>
1076
+ <p>It is designed to allow submission tools and other clients that consume instance types to be able to display them in categories. This is particularly useful for UIs that utilize combo-boxes, since they can be orgnaized into a nested structure and displayed in a tree-like fashion.</p>
1077
+
1078
+
1079
+
1080
+ <div class="doc doc-children">
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+
1089
+
1090
+
1091
+ <div class="doc doc-object doc-class">
1092
+
1093
+
1094
+
1095
+ <h2 id="ciocore.hardware_set.HardwareSet" class="doc doc-heading">
1096
+ <code>
1097
+ HardwareSet </code>
1098
+
1099
+
1100
+
1101
+ </h2>
1102
+
1103
+ <div class="doc doc-contents ">
1104
+
1105
+ <p>A class to manage categorized instance types.</p>
1106
+ <p>A HardwareSet encapsulates the instance types available to an account. It accepts a flat list of instance types and builds a nested structure where those instance types exist in categories.</p>
1107
+ <p>It keeps a dictionary of instance types (<code>instance_types</code>) with the name field as key. This allows easy lookup by name.</p>
1108
+ <p>In addition, it keeps the nested structure of categories (<code>categories</code>) that contain the instance types. Each category is a dictionary with keys: <code>label</code>, <code>content</code>, and <code>order</code>.</p>
1109
+ <p><code>content</code> is a list of instance types in the category. The order is used to sort the categories. The order of the instance types within a category is determined by the number of cores and memory.</p>
1110
+ <p>If all instance_types have not been assigned any categories, then the structure is built with two default categories: CPU and GPU.</p>
1111
+
1112
+ <details class="quote">
1113
+ <summary>Source code in <code>ciocore/hardware_set.py</code></summary>
1114
+ <div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">HardwareSet</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
1115
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;A class to manage categorized instance types.</span>
1116
+
1117
+ <span class="sd"> A HardwareSet encapsulates the instance types available to an account. It accepts a flat list of instance types and builds a nested structure where those instance types exist in categories.</span>
1118
+
1119
+ <span class="sd"> It keeps a dictionary of instance types (`instance_types`) with the name field as key. This allows easy lookup by name.</span>
1120
+
1121
+ <span class="sd"> In addition, it keeps the nested structure of categories (`categories`) that contain the instance types. Each category is a dictionary with keys: `label`, `content`, and `order`.</span>
1122
+
1123
+ <span class="sd"> `content` is a list of instance types in the category. The order is used to sort the categories. The order of the instance types within a category is determined by the number of cores and memory.</span>
1124
+
1125
+ <span class="sd"> If all instance_types have not been assigned any categories, then the structure is built with two default categories: CPU and GPU.</span>
1126
+ <span class="sd"> &quot;&quot;&quot;</span>
1127
+
1128
+ <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance_types</span><span class="p">):</span>
1129
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Initialize the HardwareSet with a list of instance types.</span>
1130
+ <span class="sd"> Typically, you would access the HardwareSet through the ciocore.data.data() function, which initializes it for you. However, you can also initialize it directly with a list of instance types straight from ciocore.api_client. The difference being that the latter contains all instance types, whereas the former contains only the instance types compatible with the products you have specified, as well as being cached.</span>
1131
+
1132
+ <span class="sd"> Args:</span>
1133
+ <span class="sd"> instance_types (list): A list of instance types.</span>
1134
+
1135
+ <span class="sd"> Returns:</span>
1136
+ <span class="sd"> HardwareSet: The initialized HardwareSet.</span>
1137
+
1138
+ <span class="sd"> Examples:</span>
1139
+ <span class="sd"> ### Initialize with a list of instance types</span>
1140
+ <span class="sd"> &gt;&gt;&gt; from ciocore import api_client</span>
1141
+ <span class="sd"> &gt;&gt;&gt; from ciocore.hardware_set import HardwareSet</span>
1142
+ <span class="sd"> &gt;&gt;&gt; instance_types = api_client.request_instance_types()</span>
1143
+ <span class="sd"> &gt;&gt;&gt; hardware_set = HardwareSet(instance_types)</span>
1144
+ <span class="sd"> &lt;ciocore.hardware_set.HardwareSet object at 0x104c43d30&gt;</span>
1145
+
1146
+ <span class="sd"> ### Initialize implicitly with a list of instance types from ciocore.data (recommended).</span>
1147
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1148
+ <span class="sd"> &gt;&gt;&gt; coredata.init(&quot;cinema4d&quot;)</span>
1149
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1150
+ <span class="sd"> &lt;ciocore.hardware_set.HardwareSet object at 0x104c43ee0&gt;</span>
1151
+
1152
+ <span class="sd"> !!! note</span>
1153
+ <span class="sd"> To avoid repetition, we use the implicit initialization for the examples below.</span>
1154
+ <span class="sd"> &quot;&quot;&quot;</span>
1155
+
1156
+ <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_unique</span><span class="p">(</span><span class="n">instance_types</span><span class="p">)</span>
1157
+ <span class="bp">self</span><span class="o">.</span><span class="n">categories</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_categories</span><span class="p">()</span>
1158
+ <span class="bp">self</span><span class="o">.</span><span class="n">provider</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_provider</span><span class="p">()</span>
1159
+
1160
+ <span class="k">def</span><span class="w"> </span><span class="nf">labels</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1161
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the list of category labels.</span>
1162
+
1163
+ <span class="sd"> Returns:</span>
1164
+ <span class="sd"> list: A list of category labels.</span>
1165
+
1166
+ <span class="sd"> Example:</span>
1167
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1168
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
1169
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1170
+ <span class="sd"> &gt;&gt;&gt; hardware_set.labels()</span>
1171
+ <span class="sd"> [&#39;CPU&#39;, &#39;GPU&#39;]</span>
1172
+
1173
+ <span class="sd"> &quot;&quot;&quot;</span>
1174
+ <span class="k">return</span> <span class="p">[</span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">categories</span><span class="p">]</span>
1175
+
1176
+ <span class="k">def</span><span class="w"> </span><span class="nf">number_of_categories</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1177
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the number of categories in the data.</span>
1178
+
1179
+ <span class="sd"> Returns:</span>
1180
+ <span class="sd"> int: The number of categories.</span>
1181
+
1182
+ <span class="sd"> Example:</span>
1183
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1184
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
1185
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1186
+ <span class="sd"> &gt;&gt;&gt; hardware_set.number_of_categories()</span>
1187
+ <span class="sd"> 2</span>
1188
+
1189
+ <span class="sd"> &quot;&quot;&quot;</span>
1190
+ <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">categories</span><span class="p">)</span>
1191
+
1192
+ <span class="k">def</span><span class="w"> </span><span class="nf">recategorize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partitioner</span><span class="p">):</span>
1193
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Recategorize the instance types.</span>
1194
+
1195
+ <span class="sd"> Args:</span>
1196
+ <span class="sd"> partitioner (function): A function that takes an instance type and returns a list of categories to assign to it. The function should return an empty list if the instance type should not be categorized.</span>
1197
+
1198
+ <span class="sd"> Example:</span>
1199
+ <span class="sd"> # Confirm current categories</span>
1200
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1201
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
1202
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1203
+ <span class="sd"> &gt;&gt;&gt; print(hardware_set.labels()</span>
1204
+ <span class="sd"> [&#39;CPU&#39;, &#39;GPU&#39;]</span>
1205
+
1206
+ <span class="sd"> # Recategorize</span>
1207
+ <span class="sd"> &gt;&gt;&gt; hardware_set.recategorize(lambda x: [{&#39;label&#39;: &#39;Low cores&#39;, &#39;order&#39;: 10}] if x[&quot;cores&quot;] &lt; 16 else [{&#39;label&#39;: &#39;High cores&#39;, &#39;order&#39;: 20}])</span>
1208
+ <span class="sd"> &gt;&gt;&gt; print(hardware_set.labels()</span>
1209
+ <span class="sd"> [&#39;Low cores&#39;, &#39;High cores&#39;]</span>
1210
+ <span class="sd"> &quot;&quot;&quot;</span>
1211
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">:</span>
1212
+ <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s2">&quot;categories&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">partitioner</span><span class="p">(</span>
1213
+ <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
1214
+ <span class="p">)</span>
1215
+ <span class="bp">self</span><span class="o">.</span><span class="n">categories</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_categories</span><span class="p">()</span>
1216
+
1217
+ <span class="k">def</span><span class="w"> </span><span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
1218
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Find an instance type by its name (sku).</span>
1219
+
1220
+ <span class="sd"> Args:</span>
1221
+ <span class="sd"> name (str): The name of the instance type.</span>
1222
+
1223
+ <span class="sd"> Returns:</span>
1224
+ <span class="sd"> dict: The instance type or None if not found.</span>
1225
+ <span class="sd"> Example:</span>
1226
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1227
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
1228
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1229
+ <span class="sd"> &gt;&gt;&gt; hardware_set.find(&quot;n2-highmem-80&quot;)</span>
1230
+ <span class="sd"> {</span>
1231
+ <span class="sd"> &#39;cores&#39;: 80,</span>
1232
+ <span class="sd"> &#39;description&#39;: &#39;80 core, 640GB Mem&#39;,</span>
1233
+ <span class="sd"> &#39;gpu&#39;: None,</span>
1234
+ <span class="sd"> &#39;memory&#39;: &#39;640&#39;,</span>
1235
+ <span class="sd"> &#39;name&#39;: &#39;n2-highmem-80&#39;,</span>
1236
+ <span class="sd"> &#39;operating_system&#39;: &#39;linux&#39;,</span>
1237
+ <span class="sd"> &#39;categories&#39;: [</span>
1238
+ <span class="sd"> {&#39;label&#39;: &#39;High cores&#39;, &#39;order&#39;: 20}</span>
1239
+ <span class="sd"> ]</span>
1240
+ <span class="sd"> }</span>
1241
+
1242
+ <span class="sd"> &quot;&quot;&quot;</span>
1243
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">category</span><span class="p">:</span>
1244
+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
1245
+
1246
+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">find_first</span><span class="p">(</span>
1247
+ <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">name</span>
1248
+ <span class="ow">and</span> <span class="n">category</span> <span class="ow">in</span> <span class="p">[</span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">x</span><span class="p">[</span><span class="s2">&quot;categories&quot;</span><span class="p">]]</span>
1249
+ <span class="p">)</span>
1250
+
1251
+ <span class="k">def</span><span class="w"> </span><span class="nf">find_category</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">label</span><span class="p">):</span>
1252
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Find a category by label.</span>
1253
+
1254
+ <span class="sd"> Args:</span>
1255
+ <span class="sd"> label (str): The label of the category.</span>
1256
+
1257
+ <span class="sd"> Returns:</span>
1258
+ <span class="sd"> dict: The category or None if not found.</span>
1259
+ <span class="sd"> Example:</span>
1260
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1261
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
1262
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1263
+ <span class="sd"> &gt;&gt;&gt; hardware_set.find_category(&quot;High cores&quot;)</span>
1264
+ <span class="sd"> {</span>
1265
+ <span class="sd"> &quot;label&quot;: &quot;Low cores&quot;,</span>
1266
+ <span class="sd"> &quot;content&quot;: [</span>
1267
+ <span class="sd"> {</span>
1268
+ <span class="sd"> &quot;cores&quot;: 8,</span>
1269
+ <span class="sd"> &quot;description&quot;: &quot;8 core, 52GB Mem&quot;,</span>
1270
+ <span class="sd"> &quot;gpu&quot;: None,</span>
1271
+ <span class="sd"> &quot;memory&quot;: &quot;52&quot;,</span>
1272
+ <span class="sd"> &quot;name&quot;: &quot;n1-highmem-8&quot;,</span>
1273
+ <span class="sd"> &quot;operating_system&quot;: &quot;linux&quot;,</span>
1274
+ <span class="sd"> &quot;categories&quot;: [{&quot;label&quot;: &quot;Low cores&quot;, &quot;order&quot;: 10}],</span>
1275
+ <span class="sd"> },</span>
1276
+ <span class="sd"> {</span>
1277
+ <span class="sd"> &quot;cores&quot;: 8,</span>
1278
+ <span class="sd"> &quot;description&quot;: &quot;8 core, 7.2GB Mem&quot;,</span>
1279
+ <span class="sd"> &quot;gpu&quot;: None,</span>
1280
+ <span class="sd"> &quot;memory&quot;: &quot;7.2&quot;,</span>
1281
+ <span class="sd"> &quot;name&quot;: &quot;n1-highcpu-8&quot;,</span>
1282
+ <span class="sd"> &quot;operating_system&quot;: &quot;linux&quot;,</span>
1283
+ <span class="sd"> &quot;categories&quot;: [{&quot;label&quot;: &quot;Low cores&quot;, &quot;order&quot;: 10}],</span>
1284
+ <span class="sd"> },</span>
1285
+ <span class="sd"> ...</span>
1286
+ <span class="sd"> ],</span>
1287
+ <span class="sd"> &quot;order&quot;: 10</span>
1288
+ <span class="sd"> }</span>
1289
+ <span class="sd"> &quot;&quot;&quot;</span>
1290
+ <span class="k">return</span> <span class="nb">next</span><span class="p">((</span><span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">categories</span> <span class="k">if</span> <span class="n">c</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">label</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
1291
+
1292
+ <span class="k">def</span><span class="w"> </span><span class="nf">find_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">):</span>
1293
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Find all instance types that match a condition.</span>
1294
+
1295
+ <span class="sd"> Args:</span>
1296
+ <span class="sd"> condition (function): A function that takes an instance type and returns True or False.</span>
1297
+
1298
+ <span class="sd"> Returns:</span>
1299
+ <span class="sd"> list: A list of instance types that match the condition.</span>
1300
+
1301
+ <span class="sd"> Example:</span>
1302
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1303
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
1304
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1305
+ <span class="sd"> &gt;&gt;&gt; hardware_set.find_all(lambda x: x[&quot;gpu&quot;])</span>
1306
+ <span class="sd"> [</span>
1307
+ <span class="sd"> {</span>
1308
+ <span class="sd"> &quot;cores&quot;: 4,</span>
1309
+ <span class="sd"> &quot;description&quot;: &quot;4 core, 15GB Mem (1 T4 Tensor GPU with 16GB Mem)&quot;,</span>
1310
+ <span class="sd"> &quot;gpu&quot;: {</span>
1311
+ <span class="sd"> &quot;gpu_architecture&quot;: &quot;NVIDIA Turing&quot;,</span>
1312
+ <span class="sd"> &quot;gpu_count&quot;: 1,</span>
1313
+ <span class="sd"> &quot;gpu_cuda_cores&quot;: 2560,</span>
1314
+ <span class="sd"> &quot;gpu_memory&quot;: &quot;16&quot;,</span>
1315
+ <span class="sd"> &quot;gpu_model&quot;: &quot;T4 Tensor&quot;,</span>
1316
+ <span class="sd"> &quot;gpu_rt_cores&quot;: 0,</span>
1317
+ <span class="sd"> &quot;gpu_tensor_cores&quot;: 0,</span>
1318
+ <span class="sd"> &quot;total_gpu_cuda_cores&quot;: 2560,</span>
1319
+ <span class="sd"> &quot;total_gpu_memory&quot;: &quot;16&quot;,</span>
1320
+ <span class="sd"> &quot;total_gpu_rt_cores&quot;: 0,</span>
1321
+ <span class="sd"> &quot;total_gpu_tensor_cores&quot;: 0,</span>
1322
+ <span class="sd"> },</span>
1323
+ <span class="sd"> &quot;memory&quot;: &quot;15&quot;,</span>
1324
+ <span class="sd"> &quot;name&quot;: &quot;n1-standard-4-t4-1&quot;,</span>
1325
+ <span class="sd"> &quot;operating_system&quot;: &quot;linux&quot;,</span>
1326
+ <span class="sd"> &quot;categories&quot;: [{&quot;label&quot;: &quot;Low cores&quot;, &quot;order&quot;: 10}],</span>
1327
+ <span class="sd"> },</span>
1328
+ <span class="sd"> {</span>
1329
+ <span class="sd"> &quot;cores&quot;: 8,</span>
1330
+ <span class="sd"> &quot;description&quot;: &quot;8 core, 30GB Mem (1 T4 Tensor GPU with 16GB Mem)&quot;,</span>
1331
+ <span class="sd"> &quot;gpu&quot;: {</span>
1332
+ <span class="sd"> &quot;gpu_architecture&quot;: &quot;NVIDIA Turing&quot;,</span>
1333
+ <span class="sd"> &quot;gpu_count&quot;: 1,</span>
1334
+ <span class="sd"> &quot;gpu_cuda_cores&quot;: 2560,</span>
1335
+ <span class="sd"> &quot;gpu_memory&quot;: &quot;16&quot;,</span>
1336
+ <span class="sd"> &quot;gpu_model&quot;: &quot;T4 Tensor&quot;,</span>
1337
+ <span class="sd"> &quot;gpu_rt_cores&quot;: 0,</span>
1338
+ <span class="sd"> &quot;gpu_tensor_cores&quot;: 0,</span>
1339
+ <span class="sd"> &quot;total_gpu_cuda_cores&quot;: 2560,</span>
1340
+ <span class="sd"> &quot;total_gpu_memory&quot;: &quot;16&quot;,</span>
1341
+ <span class="sd"> &quot;total_gpu_rt_cores&quot;: 0,</span>
1342
+ <span class="sd"> &quot;total_gpu_tensor_cores&quot;: 0,</span>
1343
+ <span class="sd"> },</span>
1344
+ <span class="sd"> &quot;memory&quot;: &quot;30&quot;,</span>
1345
+ <span class="sd"> &quot;name&quot;: &quot;n1-standard-8-t4-1&quot;,</span>
1346
+ <span class="sd"> &quot;operating_system&quot;: &quot;linux&quot;,</span>
1347
+ <span class="sd"> &quot;categories&quot;: [{&quot;label&quot;: &quot;Low cores&quot;, &quot;order&quot;: 10}],</span>
1348
+ <span class="sd"> },</span>
1349
+ <span class="sd"> ...</span>
1350
+ <span class="sd"> ]</span>
1351
+ <span class="sd"> &quot;&quot;&quot;</span>
1352
+ <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
1353
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">:</span>
1354
+ <span class="k">if</span> <span class="n">condition</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">[</span><span class="n">key</span><span class="p">]):</span>
1355
+ <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
1356
+ <span class="k">return</span> <span class="n">result</span>
1357
+
1358
+ <span class="k">def</span><span class="w"> </span><span class="nf">find_first</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">):</span>
1359
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Find the first instance type that matches a condition.</span>
1360
+
1361
+ <span class="sd"> Please see find_all() above for more details. This method is just a convenience wrapper around find_all() that returns the first result or None if not found.</span>
1362
+
1363
+ <span class="sd"> Args:</span>
1364
+ <span class="sd"> condition (function): A function that takes an instance type and returns True or False.</span>
1365
+
1366
+ <span class="sd"> Returns:</span>
1367
+ <span class="sd"> dict: The first instance type that matches the condition or None if not found.</span>
1368
+ <span class="sd"> &quot;&quot;&quot;</span>
1369
+ <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">condition</span><span class="p">)),</span> <span class="kc">None</span><span class="p">)</span>
1370
+
1371
+ <span class="c1"># DEPRECATED</span>
1372
+ <span class="k">def</span><span class="w"> </span><span class="nf">get_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_misc</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
1373
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the categories structure with renaming ready for some specific widget, such as a Qt Combobox.</span>
1374
+
1375
+ <span class="sd"> Deprecated:</span>
1376
+ <span class="sd"> The get_model() method is deprecated. The `with_misc` parameter is no longer used, which means that this function only serves to rename a few keys. What&#39;s more, the init function ensures that every instance type has a category. This function is no longer needed. Submitters that use it will work but should be updated to use the categories structure directly as it minimizes the levels of indirection necessary to work with it.</span>
1377
+ <span class="sd"> &quot;&quot;&quot;</span>
1378
+ <span class="k">if</span> <span class="n">with_misc</span><span class="p">:</span>
1379
+ <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;with_misc is no longer used&quot;</span><span class="p">)</span>
1380
+ <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
1381
+ <span class="k">for</span> <span class="n">category</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">categories</span><span class="p">:</span>
1382
+ <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
1383
+ <span class="p">{</span>
1384
+ <span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="n">category</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">],</span>
1385
+ <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="p">[</span>
1386
+ <span class="p">{</span><span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="n">k</span><span class="p">[</span><span class="s2">&quot;description&quot;</span><span class="p">],</span> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="n">k</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]}</span>
1387
+ <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">category</span><span class="p">[</span><span class="s2">&quot;content&quot;</span><span class="p">]</span>
1388
+ <span class="p">],</span>
1389
+ <span class="p">}</span>
1390
+ <span class="p">)</span>
1391
+
1392
+ <span class="k">return</span> <span class="n">result</span>
1393
+
1394
+ <span class="c1"># PRIVATE METHODS</span>
1395
+ <span class="nd">@classmethod</span>
1396
+ <span class="k">def</span><span class="w"> </span><span class="nf">_build_unique</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">instance_types</span><span class="p">):</span>
1397
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a dictionary of instance types using the name field as key. This allows fast lookup by name.</span>
1398
+
1399
+ <span class="sd"> Args:</span>
1400
+ <span class="sd"> instance_types (list): A list of instance types.</span>
1401
+
1402
+ <span class="sd"> Returns:</span>
1403
+ <span class="sd"> dict: A dictionary of instance types with the name field as key.</span>
1404
+ <span class="sd"> &quot;&quot;&quot;</span>
1405
+
1406
+ <span class="n">instance_types</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_rewrite_descriptions</span><span class="p">(</span><span class="n">instance_types</span><span class="p">)</span>
1407
+ <span class="n">categories</span> <span class="o">=</span> <span class="p">[</span>
1408
+ <span class="n">category</span>
1409
+ <span class="k">for</span> <span class="n">it</span> <span class="ow">in</span> <span class="n">instance_types</span>
1410
+ <span class="k">for</span> <span class="n">category</span> <span class="ow">in</span> <span class="p">(</span><span class="n">it</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;categories&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[])</span>
1411
+ <span class="p">]</span>
1412
+ <span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
1413
+ <span class="k">for</span> <span class="n">it</span> <span class="ow">in</span> <span class="n">instance_types</span><span class="p">:</span>
1414
+ <span class="n">is_gpu</span> <span class="o">=</span> <span class="n">it</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;gpu&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
1415
+ <span class="k">if</span> <span class="n">categories</span><span class="p">:</span>
1416
+ <span class="k">if</span> <span class="n">it</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;categories&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[[],</span> <span class="kc">None</span><span class="p">]:</span>
1417
+ <span class="k">continue</span>
1418
+ <span class="k">else</span><span class="p">:</span>
1419
+ <span class="c1"># make our own categories GPU/CPU</span>
1420
+ <span class="n">it</span><span class="p">[</span><span class="s2">&quot;categories&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
1421
+ <span class="p">[{</span><span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="s2">&quot;GPU&quot;</span><span class="p">,</span> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">}]</span>
1422
+ <span class="k">if</span> <span class="n">is_gpu</span>
1423
+ <span class="k">else</span> <span class="p">[{</span><span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="s2">&quot;CPU&quot;</span><span class="p">,</span> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">}]</span>
1424
+ <span class="p">)</span>
1425
+ <span class="n">result</span><span class="p">[</span><span class="n">it</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">it</span>
1426
+
1427
+ <span class="k">return</span> <span class="n">result</span>
1428
+
1429
+
1430
+
1431
+
1432
+ <span class="nd">@classmethod</span>
1433
+ <span class="k">def</span><span class="w"> </span><span class="nf">_rewrite_descriptions</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">instance_types</span><span class="p">):</span>
1434
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Rewrite the descriptions of the instance types.</span>
1435
+
1436
+ <span class="sd"> If there are both OS types, then the descriptions are prefixed with the OS type.</span>
1437
+
1438
+ <span class="sd"> Args:</span>
1439
+ <span class="sd"> instance_types (list): A list of instance types.</span>
1440
+
1441
+ <span class="sd"> Returns:</span>
1442
+ <span class="sd"> list: A list of instance types with rewritten descriptions.</span>
1443
+ <span class="sd"> &quot;&quot;&quot;</span>
1444
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">instance_types</span><span class="p">:</span>
1445
+ <span class="k">return</span> <span class="n">instance_types</span>
1446
+
1447
+ <span class="n">first_os</span> <span class="o">=</span> <span class="n">instance_types</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;operating_system&quot;</span><span class="p">]</span>
1448
+ <span class="n">dual_platforms</span> <span class="o">=</span> <span class="nb">next</span><span class="p">((</span><span class="n">it</span> <span class="k">for</span> <span class="n">it</span> <span class="ow">in</span> <span class="n">instance_types</span> <span class="k">if</span> <span class="n">it</span><span class="p">[</span><span class="s2">&quot;operating_system&quot;</span><span class="p">]</span> <span class="o">!=</span> <span class="n">first_os</span><span class="p">),</span> <span class="kc">False</span><span class="p">)</span>
1449
+
1450
+ <span class="k">if</span> <span class="n">dual_platforms</span><span class="p">:</span>
1451
+ <span class="k">for</span> <span class="n">it</span> <span class="ow">in</span> <span class="n">instance_types</span><span class="p">:</span>
1452
+ <span class="n">flat_dict</span> <span class="o">=</span> <span class="n">flatten_dict</span><span class="p">(</span><span class="n">it</span><span class="p">)</span>
1453
+ <span class="n">is_gpu</span> <span class="o">=</span> <span class="s2">&quot;gpu_count&quot;</span> <span class="ow">in</span> <span class="n">flat_dict</span>
1454
+ <span class="k">if</span> <span class="n">is_gpu</span><span class="p">:</span>
1455
+ <span class="n">it</span><span class="p">[</span><span class="s2">&quot;description&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">DESCRIPTION_TEMPLATE_OS</span><span class="p">[</span><span class="s2">&quot;gpu&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">flat_dict</span><span class="p">)</span>
1456
+ <span class="k">else</span><span class="p">:</span>
1457
+ <span class="n">it</span><span class="p">[</span><span class="s2">&quot;description&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">DESCRIPTION_TEMPLATE_OS</span><span class="p">[</span><span class="s2">&quot;cpu&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">flat_dict</span><span class="p">)</span>
1458
+ <span class="k">else</span><span class="p">:</span>
1459
+ <span class="k">for</span> <span class="n">it</span> <span class="ow">in</span> <span class="n">instance_types</span><span class="p">:</span>
1460
+ <span class="n">flat_dict</span> <span class="o">=</span> <span class="n">flatten_dict</span><span class="p">(</span><span class="n">it</span><span class="p">)</span>
1461
+ <span class="n">is_gpu</span> <span class="o">=</span> <span class="s2">&quot;gpu_count&quot;</span> <span class="ow">in</span> <span class="n">flat_dict</span>
1462
+ <span class="k">if</span> <span class="n">is_gpu</span><span class="p">:</span>
1463
+ <span class="n">it</span><span class="p">[</span><span class="s2">&quot;description&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">DESCRIPTION_TEMPLATE</span><span class="p">[</span><span class="s2">&quot;gpu&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">flat_dict</span><span class="p">)</span>
1464
+ <span class="k">else</span><span class="p">:</span>
1465
+ <span class="n">it</span><span class="p">[</span><span class="s2">&quot;description&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">DESCRIPTION_TEMPLATE</span><span class="p">[</span><span class="s2">&quot;cpu&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">flat_dict</span><span class="p">)</span>
1466
+
1467
+ <span class="k">return</span> <span class="n">instance_types</span>
1468
+
1469
+ <span class="k">def</span><span class="w"> </span><span class="nf">_build_categories</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1470
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a sorted list of categories where each category contains a sorted list of machines.</span>
1471
+
1472
+ <span class="sd"> Returns:</span>
1473
+ <span class="sd"> list: A list of categories where each category is a dictionary with keys: `label`, `content`, and `order`.</span>
1474
+ <span class="sd"> &quot;&quot;&quot;</span>
1475
+
1476
+ <span class="n">dikt</span> <span class="o">=</span> <span class="p">{}</span>
1477
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">:</span>
1478
+ <span class="n">it</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
1479
+ <span class="n">categories</span> <span class="o">=</span> <span class="n">it</span><span class="p">[</span><span class="s2">&quot;categories&quot;</span><span class="p">]</span>
1480
+ <span class="k">for</span> <span class="n">category</span> <span class="ow">in</span> <span class="n">categories</span><span class="p">:</span>
1481
+ <span class="n">label</span> <span class="o">=</span> <span class="n">category</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">]</span>
1482
+ <span class="k">if</span> <span class="n">label</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">dikt</span><span class="p">:</span>
1483
+ <span class="n">dikt</span><span class="p">[</span><span class="n">label</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
1484
+ <span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
1485
+ <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="p">[],</span>
1486
+ <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="n">category</span><span class="p">[</span><span class="s2">&quot;order&quot;</span><span class="p">],</span>
1487
+ <span class="p">}</span>
1488
+ <span class="n">dikt</span><span class="p">[</span><span class="n">label</span><span class="p">][</span><span class="s2">&quot;content&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">it</span><span class="p">)</span>
1489
+
1490
+ <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
1491
+ <span class="k">for</span> <span class="n">label</span> <span class="ow">in</span> <span class="n">dikt</span><span class="p">:</span>
1492
+ <span class="n">category</span> <span class="o">=</span> <span class="n">dikt</span><span class="p">[</span><span class="n">label</span><span class="p">]</span>
1493
+ <span class="n">category</span><span class="p">[</span><span class="s2">&quot;content&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="p">(</span><span class="n">k</span><span class="p">[</span><span class="s2">&quot;cores&quot;</span><span class="p">],</span> <span class="n">k</span><span class="p">[</span><span class="s2">&quot;memory&quot;</span><span class="p">]))</span>
1494
+ <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">category</span><span class="p">)</span>
1495
+ <span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="n">k</span><span class="p">[</span><span class="s2">&quot;order&quot;</span><span class="p">])</span>
1496
+
1497
+ <span class="k">def</span><span class="w"> </span><span class="nf">_get_provider</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1498
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the provider from the first instance type.</span>
1499
+
1500
+ <span class="sd"> Returns:</span>
1501
+ <span class="sd"> str: The provider.</span>
1502
+ <span class="sd"> &quot;&quot;&quot;</span>
1503
+ <span class="n">first_name</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">))</span>
1504
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">first_name</span><span class="p">:</span>
1505
+ <span class="k">return</span> <span class="kc">None</span>
1506
+ <span class="k">if</span> <span class="n">first_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;cw-&quot;</span><span class="p">):</span>
1507
+ <span class="k">return</span> <span class="s2">&quot;cw&quot;</span>
1508
+ <span class="k">if</span> <span class="s2">&quot;.&quot;</span> <span class="ow">in</span> <span class="n">first_name</span><span class="p">:</span>
1509
+ <span class="k">return</span> <span class="s2">&quot;aws&quot;</span>
1510
+ <span class="k">return</span> <span class="s2">&quot;gcp&quot;</span>
1511
+ </code></pre></div>
1512
+ </details>
1513
+
1514
+
1515
+
1516
+ <div class="doc doc-children">
1517
+
1518
+
1519
+
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+ <div class="doc doc-object doc-method">
1527
+
1528
+
1529
+
1530
+ <h3 id="ciocore.hardware_set.HardwareSet.__init__" class="doc doc-heading">
1531
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance_types</span><span class="p">)</span></code>
1532
+
1533
+ <span class="doc doc-properties">
1534
+ <small class="doc doc-property doc-property-special"><code>special</code></small>
1535
+ </span>
1536
+
1537
+ </h3>
1538
+
1539
+ <div class="doc doc-contents ">
1540
+
1541
+ <p>Initialize the HardwareSet with a list of instance types.
1542
+ Typically, you would access the HardwareSet through the ciocore.data.data() function, which initializes it for you. However, you can also initialize it directly with a list of instance types straight from ciocore.api_client. The difference being that the latter contains all instance types, whereas the former contains only the instance types compatible with the products you have specified, as well as being cached.</p>
1543
+
1544
+ <p><strong>Parameters:</strong></p>
1545
+ <table>
1546
+ <thead>
1547
+ <tr>
1548
+ <th>Name</th>
1549
+ <th>Type</th>
1550
+ <th>Description</th>
1551
+ <th>Default</th>
1552
+ </tr>
1553
+ </thead>
1554
+ <tbody>
1555
+ <tr>
1556
+ <td><code>instance_types</code></td>
1557
+ <td><code>list</code></td>
1558
+ <td><p>A list of instance types.</p></td>
1559
+ <td><em>required</em></td>
1560
+ </tr>
1561
+ </tbody>
1562
+ </table>
1563
+ <p><strong>Returns:</strong></p>
1564
+ <table>
1565
+ <thead>
1566
+ <tr>
1567
+ <th>Type</th>
1568
+ <th>Description</th>
1569
+ </tr>
1570
+ </thead>
1571
+ <tbody>
1572
+ <tr>
1573
+ <td><code>HardwareSet</code></td>
1574
+ <td><p>The initialized HardwareSet.</p></td>
1575
+ </tr>
1576
+ </tbody>
1577
+ </table>
1578
+ <p><strong>Examples:</strong></p>
1579
+ <h6 id="ciocore.hardware_set.HardwareSet.__init__--initialize-with-a-list-of-instance-types">Initialize with a list of instance types</h6>
1580
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span>
1581
+ <span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore.hardware_set</span><span class="w"> </span><span class="kn">import</span> <span class="n">HardwareSet</span>
1582
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">instance_types</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">request_instance_types</span><span class="p">()</span>
1583
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span> <span class="o">=</span> <span class="n">HardwareSet</span><span class="p">(</span><span class="n">instance_types</span><span class="p">)</span>
1584
+ <span class="o">&lt;</span><span class="n">ciocore</span><span class="o">.</span><span class="n">hardware_set</span><span class="o">.</span><span class="n">HardwareSet</span> <span class="nb">object</span> <span class="n">at</span> <span class="mh">0x104c43d30</span><span class="o">&gt;</span>
1585
+ </code></pre></div>
1586
+ <h6 id="ciocore.hardware_set.HardwareSet.__init__--initialize-implicitly-with-a-list-of-instance-types-from-ciocoredata-recommended">Initialize implicitly with a list of instance types from ciocore.data (recommended).</h6>
1587
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">data</span> <span class="k">as</span> <span class="n">coredata</span>
1588
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">coredata</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="s2">&quot;cinema4d&quot;</span><span class="p">)</span>
1589
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span> <span class="o">=</span> <span class="n">coredata</span><span class="o">.</span><span class="n">data</span><span class="p">()[</span><span class="s2">&quot;instance_types&quot;</span><span class="p">]</span>
1590
+ <span class="o">&lt;</span><span class="n">ciocore</span><span class="o">.</span><span class="n">hardware_set</span><span class="o">.</span><span class="n">HardwareSet</span> <span class="nb">object</span> <span class="n">at</span> <span class="mh">0x104c43ee0</span><span class="o">&gt;</span>
1591
+ </code></pre></div>
1592
+ <div class="admonition note">
1593
+ <p class="admonition-title">Note</p>
1594
+ <p>To avoid repetition, we use the implicit initialization for the examples below.</p>
1595
+ </div>
1596
+
1597
+ <details class="quote">
1598
+ <summary>Source code in <code>ciocore/hardware_set.py</code></summary>
1599
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance_types</span><span class="p">):</span>
1600
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Initialize the HardwareSet with a list of instance types.</span>
1601
+ <span class="sd"> Typically, you would access the HardwareSet through the ciocore.data.data() function, which initializes it for you. However, you can also initialize it directly with a list of instance types straight from ciocore.api_client. The difference being that the latter contains all instance types, whereas the former contains only the instance types compatible with the products you have specified, as well as being cached.</span>
1602
+
1603
+ <span class="sd"> Args:</span>
1604
+ <span class="sd"> instance_types (list): A list of instance types.</span>
1605
+
1606
+ <span class="sd"> Returns:</span>
1607
+ <span class="sd"> HardwareSet: The initialized HardwareSet.</span>
1608
+
1609
+ <span class="sd"> Examples:</span>
1610
+ <span class="sd"> ### Initialize with a list of instance types</span>
1611
+ <span class="sd"> &gt;&gt;&gt; from ciocore import api_client</span>
1612
+ <span class="sd"> &gt;&gt;&gt; from ciocore.hardware_set import HardwareSet</span>
1613
+ <span class="sd"> &gt;&gt;&gt; instance_types = api_client.request_instance_types()</span>
1614
+ <span class="sd"> &gt;&gt;&gt; hardware_set = HardwareSet(instance_types)</span>
1615
+ <span class="sd"> &lt;ciocore.hardware_set.HardwareSet object at 0x104c43d30&gt;</span>
1616
+
1617
+ <span class="sd"> ### Initialize implicitly with a list of instance types from ciocore.data (recommended).</span>
1618
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1619
+ <span class="sd"> &gt;&gt;&gt; coredata.init(&quot;cinema4d&quot;)</span>
1620
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1621
+ <span class="sd"> &lt;ciocore.hardware_set.HardwareSet object at 0x104c43ee0&gt;</span>
1622
+
1623
+ <span class="sd"> !!! note</span>
1624
+ <span class="sd"> To avoid repetition, we use the implicit initialization for the examples below.</span>
1625
+ <span class="sd"> &quot;&quot;&quot;</span>
1626
+
1627
+ <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_unique</span><span class="p">(</span><span class="n">instance_types</span><span class="p">)</span>
1628
+ <span class="bp">self</span><span class="o">.</span><span class="n">categories</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_categories</span><span class="p">()</span>
1629
+ <span class="bp">self</span><span class="o">.</span><span class="n">provider</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_provider</span><span class="p">()</span>
1630
+ </code></pre></div>
1631
+ </details>
1632
+ </div>
1633
+
1634
+ </div>
1635
+
1636
+
1637
+
1638
+ <div class="doc doc-object doc-method">
1639
+
1640
+
1641
+
1642
+ <h3 id="ciocore.hardware_set.HardwareSet.labels" class="doc doc-heading">
1643
+ <code class="highlight language-python"><span class="n">labels</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></code>
1644
+
1645
+
1646
+ </h3>
1647
+
1648
+ <div class="doc doc-contents ">
1649
+
1650
+ <p>Get the list of category labels.</p>
1651
+
1652
+ <p><strong>Returns:</strong></p>
1653
+ <table>
1654
+ <thead>
1655
+ <tr>
1656
+ <th>Type</th>
1657
+ <th>Description</th>
1658
+ </tr>
1659
+ </thead>
1660
+ <tbody>
1661
+ <tr>
1662
+ <td><code>list</code></td>
1663
+ <td><p>A list of category labels.</p></td>
1664
+ </tr>
1665
+ </tbody>
1666
+ </table>
1667
+ <p><strong>Examples:</strong></p>
1668
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">data</span> <span class="k">as</span> <span class="n">coredata</span>
1669
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">coredata</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
1670
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span> <span class="o">=</span> <span class="n">coredata</span><span class="o">.</span><span class="n">data</span><span class="p">()[</span><span class="s2">&quot;instance_types&quot;</span><span class="p">]</span>
1671
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span><span class="o">.</span><span class="n">labels</span><span class="p">()</span>
1672
+ <span class="p">[</span><span class="s1">&#39;CPU&#39;</span><span class="p">,</span> <span class="s1">&#39;GPU&#39;</span><span class="p">]</span>
1673
+ </code></pre></div>
1674
+
1675
+ <details class="quote">
1676
+ <summary>Source code in <code>ciocore/hardware_set.py</code></summary>
1677
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">labels</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1678
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the list of category labels.</span>
1679
+
1680
+ <span class="sd"> Returns:</span>
1681
+ <span class="sd"> list: A list of category labels.</span>
1682
+
1683
+ <span class="sd"> Example:</span>
1684
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1685
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
1686
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1687
+ <span class="sd"> &gt;&gt;&gt; hardware_set.labels()</span>
1688
+ <span class="sd"> [&#39;CPU&#39;, &#39;GPU&#39;]</span>
1689
+
1690
+ <span class="sd"> &quot;&quot;&quot;</span>
1691
+ <span class="k">return</span> <span class="p">[</span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">categories</span><span class="p">]</span>
1692
+ </code></pre></div>
1693
+ </details>
1694
+ </div>
1695
+
1696
+ </div>
1697
+
1698
+
1699
+
1700
+ <div class="doc doc-object doc-method">
1701
+
1702
+
1703
+
1704
+ <h3 id="ciocore.hardware_set.HardwareSet.number_of_categories" class="doc doc-heading">
1705
+ <code class="highlight language-python"><span class="n">number_of_categories</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></code>
1706
+
1707
+
1708
+ </h3>
1709
+
1710
+ <div class="doc doc-contents ">
1711
+
1712
+ <p>Get the number of categories in the data.</p>
1713
+
1714
+ <p><strong>Returns:</strong></p>
1715
+ <table>
1716
+ <thead>
1717
+ <tr>
1718
+ <th>Type</th>
1719
+ <th>Description</th>
1720
+ </tr>
1721
+ </thead>
1722
+ <tbody>
1723
+ <tr>
1724
+ <td><code>int</code></td>
1725
+ <td><p>The number of categories.</p></td>
1726
+ </tr>
1727
+ </tbody>
1728
+ </table>
1729
+ <p><strong>Examples:</strong></p>
1730
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">data</span> <span class="k">as</span> <span class="n">coredata</span>
1731
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">coredata</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
1732
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span> <span class="o">=</span> <span class="n">coredata</span><span class="o">.</span><span class="n">data</span><span class="p">()[</span><span class="s2">&quot;instance_types&quot;</span><span class="p">]</span>
1733
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span><span class="o">.</span><span class="n">number_of_categories</span><span class="p">()</span>
1734
+ <span class="mi">2</span>
1735
+ </code></pre></div>
1736
+
1737
+ <details class="quote">
1738
+ <summary>Source code in <code>ciocore/hardware_set.py</code></summary>
1739
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">number_of_categories</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1740
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the number of categories in the data.</span>
1741
+
1742
+ <span class="sd"> Returns:</span>
1743
+ <span class="sd"> int: The number of categories.</span>
1744
+
1745
+ <span class="sd"> Example:</span>
1746
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1747
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
1748
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1749
+ <span class="sd"> &gt;&gt;&gt; hardware_set.number_of_categories()</span>
1750
+ <span class="sd"> 2</span>
1751
+
1752
+ <span class="sd"> &quot;&quot;&quot;</span>
1753
+ <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">categories</span><span class="p">)</span>
1754
+ </code></pre></div>
1755
+ </details>
1756
+ </div>
1757
+
1758
+ </div>
1759
+
1760
+
1761
+
1762
+ <div class="doc doc-object doc-method">
1763
+
1764
+
1765
+
1766
+ <h3 id="ciocore.hardware_set.HardwareSet.recategorize" class="doc doc-heading">
1767
+ <code class="highlight language-python"><span class="n">recategorize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partitioner</span><span class="p">)</span></code>
1768
+
1769
+
1770
+ </h3>
1771
+
1772
+ <div class="doc doc-contents ">
1773
+
1774
+ <p>Recategorize the instance types.</p>
1775
+
1776
+ <p><strong>Parameters:</strong></p>
1777
+ <table>
1778
+ <thead>
1779
+ <tr>
1780
+ <th>Name</th>
1781
+ <th>Type</th>
1782
+ <th>Description</th>
1783
+ <th>Default</th>
1784
+ </tr>
1785
+ </thead>
1786
+ <tbody>
1787
+ <tr>
1788
+ <td><code>partitioner</code></td>
1789
+ <td><code>function</code></td>
1790
+ <td><p>A function that takes an instance type and returns a list of categories to assign to it. The function should return an empty list if the instance type should not be categorized.</p></td>
1791
+ <td><em>required</em></td>
1792
+ </tr>
1793
+ </tbody>
1794
+ </table>
1795
+ <p><strong>Examples:</strong></p>
1796
+ <h4 id="ciocore.hardware_set.HardwareSet.recategorize--confirm-current-categories">Confirm current categories</h4>
1797
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">data</span> <span class="k">as</span> <span class="n">coredata</span>
1798
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">coredata</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
1799
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span> <span class="o">=</span> <span class="n">coredata</span><span class="o">.</span><span class="n">data</span><span class="p">()[</span><span class="s2">&quot;instance_types&quot;</span><span class="p">]</span>
1800
+ <span class="o">&gt;&gt;&gt;</span> <span class="nb">print</span><span class="p">(</span><span class="n">hardware_set</span><span class="o">.</span><span class="n">labels</span><span class="p">()</span>
1801
+ <span class="p">[</span><span class="s1">&#39;CPU&#39;</span><span class="p">,</span> <span class="s1">&#39;GPU&#39;</span><span class="p">]</span>
1802
+ </code></pre></div>
1803
+ <h4 id="ciocore.hardware_set.HardwareSet.recategorize--recategorize">Recategorize</h4>
1804
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span><span class="o">.</span><span class="n">recategorize</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="p">[{</span><span class="s1">&#39;label&#39;</span><span class="p">:</span> <span class="s1">&#39;Low cores&#39;</span><span class="p">,</span> <span class="s1">&#39;order&#39;</span><span class="p">:</span> <span class="mi">10</span><span class="p">}]</span> <span class="k">if</span> <span class="n">x</span><span class="p">[</span><span class="s2">&quot;cores&quot;</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">16</span> <span class="k">else</span> <span class="p">[{</span><span class="s1">&#39;label&#39;</span><span class="p">:</span> <span class="s1">&#39;High cores&#39;</span><span class="p">,</span> <span class="s1">&#39;order&#39;</span><span class="p">:</span> <span class="mi">20</span><span class="p">}])</span>
1805
+ <span class="o">&gt;&gt;&gt;</span> <span class="nb">print</span><span class="p">(</span><span class="n">hardware_set</span><span class="o">.</span><span class="n">labels</span><span class="p">()</span>
1806
+ <span class="p">[</span><span class="s1">&#39;Low cores&#39;</span><span class="p">,</span> <span class="s1">&#39;High cores&#39;</span><span class="p">]</span>
1807
+ </code></pre></div>
1808
+
1809
+ <details class="quote">
1810
+ <summary>Source code in <code>ciocore/hardware_set.py</code></summary>
1811
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">recategorize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partitioner</span><span class="p">):</span>
1812
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Recategorize the instance types.</span>
1813
+
1814
+ <span class="sd"> Args:</span>
1815
+ <span class="sd"> partitioner (function): A function that takes an instance type and returns a list of categories to assign to it. The function should return an empty list if the instance type should not be categorized.</span>
1816
+
1817
+ <span class="sd"> Example:</span>
1818
+ <span class="sd"> # Confirm current categories</span>
1819
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1820
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
1821
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1822
+ <span class="sd"> &gt;&gt;&gt; print(hardware_set.labels()</span>
1823
+ <span class="sd"> [&#39;CPU&#39;, &#39;GPU&#39;]</span>
1824
+
1825
+ <span class="sd"> # Recategorize</span>
1826
+ <span class="sd"> &gt;&gt;&gt; hardware_set.recategorize(lambda x: [{&#39;label&#39;: &#39;Low cores&#39;, &#39;order&#39;: 10}] if x[&quot;cores&quot;] &lt; 16 else [{&#39;label&#39;: &#39;High cores&#39;, &#39;order&#39;: 20}])</span>
1827
+ <span class="sd"> &gt;&gt;&gt; print(hardware_set.labels()</span>
1828
+ <span class="sd"> [&#39;Low cores&#39;, &#39;High cores&#39;]</span>
1829
+ <span class="sd"> &quot;&quot;&quot;</span>
1830
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">:</span>
1831
+ <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s2">&quot;categories&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">partitioner</span><span class="p">(</span>
1832
+ <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
1833
+ <span class="p">)</span>
1834
+ <span class="bp">self</span><span class="o">.</span><span class="n">categories</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_categories</span><span class="p">()</span>
1835
+ </code></pre></div>
1836
+ </details>
1837
+ </div>
1838
+
1839
+ </div>
1840
+
1841
+
1842
+
1843
+ <div class="doc doc-object doc-method">
1844
+
1845
+
1846
+
1847
+ <h3 id="ciocore.hardware_set.HardwareSet.find" class="doc doc-heading">
1848
+ <code class="highlight language-python"><span class="n">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
1849
+
1850
+
1851
+ </h3>
1852
+
1853
+ <div class="doc doc-contents ">
1854
+
1855
+ <p>Find an instance type by its name (sku).</p>
1856
+
1857
+ <p><strong>Parameters:</strong></p>
1858
+ <table>
1859
+ <thead>
1860
+ <tr>
1861
+ <th>Name</th>
1862
+ <th>Type</th>
1863
+ <th>Description</th>
1864
+ <th>Default</th>
1865
+ </tr>
1866
+ </thead>
1867
+ <tbody>
1868
+ <tr>
1869
+ <td><code>name</code></td>
1870
+ <td><code>str</code></td>
1871
+ <td><p>The name of the instance type.</p></td>
1872
+ <td><em>required</em></td>
1873
+ </tr>
1874
+ </tbody>
1875
+ </table>
1876
+ <p><strong>Returns:</strong></p>
1877
+ <table>
1878
+ <thead>
1879
+ <tr>
1880
+ <th>Type</th>
1881
+ <th>Description</th>
1882
+ </tr>
1883
+ </thead>
1884
+ <tbody>
1885
+ <tr>
1886
+ <td><code>dict</code></td>
1887
+ <td><p>The instance type or None if not found.</p></td>
1888
+ </tr>
1889
+ </tbody>
1890
+ </table>
1891
+ <p><strong>Examples:</strong></p>
1892
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">data</span> <span class="k">as</span> <span class="n">coredata</span>
1893
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">coredata</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
1894
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span> <span class="o">=</span> <span class="n">coredata</span><span class="o">.</span><span class="n">data</span><span class="p">()[</span><span class="s2">&quot;instance_types&quot;</span><span class="p">]</span>
1895
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;n2-highmem-80&quot;</span><span class="p">)</span>
1896
+ <span class="p">{</span>
1897
+ <span class="s1">&#39;cores&#39;</span><span class="p">:</span> <span class="mi">80</span><span class="p">,</span>
1898
+ <span class="s1">&#39;description&#39;</span><span class="p">:</span> <span class="s1">&#39;80 core, 640GB Mem&#39;</span><span class="p">,</span>
1899
+ <span class="s1">&#39;gpu&#39;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
1900
+ <span class="s1">&#39;memory&#39;</span><span class="p">:</span> <span class="s1">&#39;640&#39;</span><span class="p">,</span>
1901
+ <span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;n2-highmem-80&#39;</span><span class="p">,</span>
1902
+ <span class="s1">&#39;operating_system&#39;</span><span class="p">:</span> <span class="s1">&#39;linux&#39;</span><span class="p">,</span>
1903
+ <span class="s1">&#39;categories&#39;</span><span class="p">:</span> <span class="p">[</span>
1904
+ <span class="p">{</span><span class="s1">&#39;label&#39;</span><span class="p">:</span> <span class="s1">&#39;High cores&#39;</span><span class="p">,</span> <span class="s1">&#39;order&#39;</span><span class="p">:</span> <span class="mi">20</span><span class="p">}</span>
1905
+ <span class="p">]</span>
1906
+ <span class="p">}</span>
1907
+ </code></pre></div>
1908
+
1909
+ <details class="quote">
1910
+ <summary>Source code in <code>ciocore/hardware_set.py</code></summary>
1911
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
1912
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Find an instance type by its name (sku).</span>
1913
+
1914
+ <span class="sd"> Args:</span>
1915
+ <span class="sd"> name (str): The name of the instance type.</span>
1916
+
1917
+ <span class="sd"> Returns:</span>
1918
+ <span class="sd"> dict: The instance type or None if not found.</span>
1919
+ <span class="sd"> Example:</span>
1920
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
1921
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
1922
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
1923
+ <span class="sd"> &gt;&gt;&gt; hardware_set.find(&quot;n2-highmem-80&quot;)</span>
1924
+ <span class="sd"> {</span>
1925
+ <span class="sd"> &#39;cores&#39;: 80,</span>
1926
+ <span class="sd"> &#39;description&#39;: &#39;80 core, 640GB Mem&#39;,</span>
1927
+ <span class="sd"> &#39;gpu&#39;: None,</span>
1928
+ <span class="sd"> &#39;memory&#39;: &#39;640&#39;,</span>
1929
+ <span class="sd"> &#39;name&#39;: &#39;n2-highmem-80&#39;,</span>
1930
+ <span class="sd"> &#39;operating_system&#39;: &#39;linux&#39;,</span>
1931
+ <span class="sd"> &#39;categories&#39;: [</span>
1932
+ <span class="sd"> {&#39;label&#39;: &#39;High cores&#39;, &#39;order&#39;: 20}</span>
1933
+ <span class="sd"> ]</span>
1934
+ <span class="sd"> }</span>
1935
+
1936
+ <span class="sd"> &quot;&quot;&quot;</span>
1937
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">category</span><span class="p">:</span>
1938
+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
1939
+
1940
+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">find_first</span><span class="p">(</span>
1941
+ <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">name</span>
1942
+ <span class="ow">and</span> <span class="n">category</span> <span class="ow">in</span> <span class="p">[</span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">x</span><span class="p">[</span><span class="s2">&quot;categories&quot;</span><span class="p">]]</span>
1943
+ <span class="p">)</span>
1944
+ </code></pre></div>
1945
+ </details>
1946
+ </div>
1947
+
1948
+ </div>
1949
+
1950
+
1951
+
1952
+ <div class="doc doc-object doc-method">
1953
+
1954
+
1955
+
1956
+ <h3 id="ciocore.hardware_set.HardwareSet.find_category" class="doc doc-heading">
1957
+ <code class="highlight language-python"><span class="n">find_category</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">label</span><span class="p">)</span></code>
1958
+
1959
+
1960
+ </h3>
1961
+
1962
+ <div class="doc doc-contents ">
1963
+
1964
+ <p>Find a category by label.</p>
1965
+
1966
+ <p><strong>Parameters:</strong></p>
1967
+ <table>
1968
+ <thead>
1969
+ <tr>
1970
+ <th>Name</th>
1971
+ <th>Type</th>
1972
+ <th>Description</th>
1973
+ <th>Default</th>
1974
+ </tr>
1975
+ </thead>
1976
+ <tbody>
1977
+ <tr>
1978
+ <td><code>label</code></td>
1979
+ <td><code>str</code></td>
1980
+ <td><p>The label of the category.</p></td>
1981
+ <td><em>required</em></td>
1982
+ </tr>
1983
+ </tbody>
1984
+ </table>
1985
+ <p><strong>Returns:</strong></p>
1986
+ <table>
1987
+ <thead>
1988
+ <tr>
1989
+ <th>Type</th>
1990
+ <th>Description</th>
1991
+ </tr>
1992
+ </thead>
1993
+ <tbody>
1994
+ <tr>
1995
+ <td><code>dict</code></td>
1996
+ <td><p>The category or None if not found.</p></td>
1997
+ </tr>
1998
+ </tbody>
1999
+ </table>
2000
+ <p><strong>Examples:</strong></p>
2001
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">data</span> <span class="k">as</span> <span class="n">coredata</span>
2002
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">coredata</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
2003
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span> <span class="o">=</span> <span class="n">coredata</span><span class="o">.</span><span class="n">data</span><span class="p">()[</span><span class="s2">&quot;instance_types&quot;</span><span class="p">]</span>
2004
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span><span class="o">.</span><span class="n">find_category</span><span class="p">(</span><span class="s2">&quot;High cores&quot;</span><span class="p">)</span>
2005
+ <span class="p">{</span>
2006
+ <span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="s2">&quot;Low cores&quot;</span><span class="p">,</span>
2007
+ <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="p">[</span>
2008
+ <span class="p">{</span>
2009
+ <span class="s2">&quot;cores&quot;</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
2010
+ <span class="s2">&quot;description&quot;</span><span class="p">:</span> <span class="s2">&quot;8 core, 52GB Mem&quot;</span><span class="p">,</span>
2011
+ <span class="s2">&quot;gpu&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
2012
+ <span class="s2">&quot;memory&quot;</span><span class="p">:</span> <span class="s2">&quot;52&quot;</span><span class="p">,</span>
2013
+ <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;n1-highmem-8&quot;</span><span class="p">,</span>
2014
+ <span class="s2">&quot;operating_system&quot;</span><span class="p">:</span> <span class="s2">&quot;linux&quot;</span><span class="p">,</span>
2015
+ <span class="s2">&quot;categories&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="s2">&quot;Low cores&quot;</span><span class="p">,</span> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="mi">10</span><span class="p">}],</span>
2016
+ <span class="p">},</span>
2017
+ <span class="p">{</span>
2018
+ <span class="s2">&quot;cores&quot;</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
2019
+ <span class="s2">&quot;description&quot;</span><span class="p">:</span> <span class="s2">&quot;8 core, 7.2GB Mem&quot;</span><span class="p">,</span>
2020
+ <span class="s2">&quot;gpu&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
2021
+ <span class="s2">&quot;memory&quot;</span><span class="p">:</span> <span class="s2">&quot;7.2&quot;</span><span class="p">,</span>
2022
+ <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;n1-highcpu-8&quot;</span><span class="p">,</span>
2023
+ <span class="s2">&quot;operating_system&quot;</span><span class="p">:</span> <span class="s2">&quot;linux&quot;</span><span class="p">,</span>
2024
+ <span class="s2">&quot;categories&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="s2">&quot;Low cores&quot;</span><span class="p">,</span> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="mi">10</span><span class="p">}],</span>
2025
+ <span class="p">},</span>
2026
+ <span class="o">...</span>
2027
+ <span class="p">],</span>
2028
+ <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="mi">10</span>
2029
+ <span class="p">}</span>
2030
+ </code></pre></div>
2031
+
2032
+ <details class="quote">
2033
+ <summary>Source code in <code>ciocore/hardware_set.py</code></summary>
2034
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">find_category</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">label</span><span class="p">):</span>
2035
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Find a category by label.</span>
2036
+
2037
+ <span class="sd"> Args:</span>
2038
+ <span class="sd"> label (str): The label of the category.</span>
2039
+
2040
+ <span class="sd"> Returns:</span>
2041
+ <span class="sd"> dict: The category or None if not found.</span>
2042
+ <span class="sd"> Example:</span>
2043
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
2044
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
2045
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
2046
+ <span class="sd"> &gt;&gt;&gt; hardware_set.find_category(&quot;High cores&quot;)</span>
2047
+ <span class="sd"> {</span>
2048
+ <span class="sd"> &quot;label&quot;: &quot;Low cores&quot;,</span>
2049
+ <span class="sd"> &quot;content&quot;: [</span>
2050
+ <span class="sd"> {</span>
2051
+ <span class="sd"> &quot;cores&quot;: 8,</span>
2052
+ <span class="sd"> &quot;description&quot;: &quot;8 core, 52GB Mem&quot;,</span>
2053
+ <span class="sd"> &quot;gpu&quot;: None,</span>
2054
+ <span class="sd"> &quot;memory&quot;: &quot;52&quot;,</span>
2055
+ <span class="sd"> &quot;name&quot;: &quot;n1-highmem-8&quot;,</span>
2056
+ <span class="sd"> &quot;operating_system&quot;: &quot;linux&quot;,</span>
2057
+ <span class="sd"> &quot;categories&quot;: [{&quot;label&quot;: &quot;Low cores&quot;, &quot;order&quot;: 10}],</span>
2058
+ <span class="sd"> },</span>
2059
+ <span class="sd"> {</span>
2060
+ <span class="sd"> &quot;cores&quot;: 8,</span>
2061
+ <span class="sd"> &quot;description&quot;: &quot;8 core, 7.2GB Mem&quot;,</span>
2062
+ <span class="sd"> &quot;gpu&quot;: None,</span>
2063
+ <span class="sd"> &quot;memory&quot;: &quot;7.2&quot;,</span>
2064
+ <span class="sd"> &quot;name&quot;: &quot;n1-highcpu-8&quot;,</span>
2065
+ <span class="sd"> &quot;operating_system&quot;: &quot;linux&quot;,</span>
2066
+ <span class="sd"> &quot;categories&quot;: [{&quot;label&quot;: &quot;Low cores&quot;, &quot;order&quot;: 10}],</span>
2067
+ <span class="sd"> },</span>
2068
+ <span class="sd"> ...</span>
2069
+ <span class="sd"> ],</span>
2070
+ <span class="sd"> &quot;order&quot;: 10</span>
2071
+ <span class="sd"> }</span>
2072
+ <span class="sd"> &quot;&quot;&quot;</span>
2073
+ <span class="k">return</span> <span class="nb">next</span><span class="p">((</span><span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">categories</span> <span class="k">if</span> <span class="n">c</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">label</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
2074
+ </code></pre></div>
2075
+ </details>
2076
+ </div>
2077
+
2078
+ </div>
2079
+
2080
+
2081
+
2082
+ <div class="doc doc-object doc-method">
2083
+
2084
+
2085
+
2086
+ <h3 id="ciocore.hardware_set.HardwareSet.find_all" class="doc doc-heading">
2087
+ <code class="highlight language-python"><span class="n">find_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">)</span></code>
2088
+
2089
+
2090
+ </h3>
2091
+
2092
+ <div class="doc doc-contents ">
2093
+
2094
+ <p>Find all instance types that match a condition.</p>
2095
+
2096
+ <p><strong>Parameters:</strong></p>
2097
+ <table>
2098
+ <thead>
2099
+ <tr>
2100
+ <th>Name</th>
2101
+ <th>Type</th>
2102
+ <th>Description</th>
2103
+ <th>Default</th>
2104
+ </tr>
2105
+ </thead>
2106
+ <tbody>
2107
+ <tr>
2108
+ <td><code>condition</code></td>
2109
+ <td><code>function</code></td>
2110
+ <td><p>A function that takes an instance type and returns True or False.</p></td>
2111
+ <td><em>required</em></td>
2112
+ </tr>
2113
+ </tbody>
2114
+ </table>
2115
+ <p><strong>Returns:</strong></p>
2116
+ <table>
2117
+ <thead>
2118
+ <tr>
2119
+ <th>Type</th>
2120
+ <th>Description</th>
2121
+ </tr>
2122
+ </thead>
2123
+ <tbody>
2124
+ <tr>
2125
+ <td><code>list</code></td>
2126
+ <td><p>A list of instance types that match the condition.</p></td>
2127
+ </tr>
2128
+ </tbody>
2129
+ </table>
2130
+ <p><strong>Examples:</strong></p>
2131
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">data</span> <span class="k">as</span> <span class="n">coredata</span>
2132
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">coredata</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
2133
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span> <span class="o">=</span> <span class="n">coredata</span><span class="o">.</span><span class="n">data</span><span class="p">()[</span><span class="s2">&quot;instance_types&quot;</span><span class="p">]</span>
2134
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">hardware_set</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="s2">&quot;gpu&quot;</span><span class="p">])</span>
2135
+ <span class="p">[</span>
2136
+ <span class="p">{</span>
2137
+ <span class="s2">&quot;cores&quot;</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
2138
+ <span class="s2">&quot;description&quot;</span><span class="p">:</span> <span class="s2">&quot;4 core, 15GB Mem (1 T4 Tensor GPU with 16GB Mem)&quot;</span><span class="p">,</span>
2139
+ <span class="s2">&quot;gpu&quot;</span><span class="p">:</span> <span class="p">{</span>
2140
+ <span class="s2">&quot;gpu_architecture&quot;</span><span class="p">:</span> <span class="s2">&quot;NVIDIA Turing&quot;</span><span class="p">,</span>
2141
+ <span class="s2">&quot;gpu_count&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
2142
+ <span class="s2">&quot;gpu_cuda_cores&quot;</span><span class="p">:</span> <span class="mi">2560</span><span class="p">,</span>
2143
+ <span class="s2">&quot;gpu_memory&quot;</span><span class="p">:</span> <span class="s2">&quot;16&quot;</span><span class="p">,</span>
2144
+ <span class="s2">&quot;gpu_model&quot;</span><span class="p">:</span> <span class="s2">&quot;T4 Tensor&quot;</span><span class="p">,</span>
2145
+ <span class="s2">&quot;gpu_rt_cores&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
2146
+ <span class="s2">&quot;gpu_tensor_cores&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
2147
+ <span class="s2">&quot;total_gpu_cuda_cores&quot;</span><span class="p">:</span> <span class="mi">2560</span><span class="p">,</span>
2148
+ <span class="s2">&quot;total_gpu_memory&quot;</span><span class="p">:</span> <span class="s2">&quot;16&quot;</span><span class="p">,</span>
2149
+ <span class="s2">&quot;total_gpu_rt_cores&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
2150
+ <span class="s2">&quot;total_gpu_tensor_cores&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
2151
+ <span class="p">},</span>
2152
+ <span class="s2">&quot;memory&quot;</span><span class="p">:</span> <span class="s2">&quot;15&quot;</span><span class="p">,</span>
2153
+ <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;n1-standard-4-t4-1&quot;</span><span class="p">,</span>
2154
+ <span class="s2">&quot;operating_system&quot;</span><span class="p">:</span> <span class="s2">&quot;linux&quot;</span><span class="p">,</span>
2155
+ <span class="s2">&quot;categories&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="s2">&quot;Low cores&quot;</span><span class="p">,</span> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="mi">10</span><span class="p">}],</span>
2156
+ <span class="p">},</span>
2157
+ <span class="p">{</span>
2158
+ <span class="s2">&quot;cores&quot;</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
2159
+ <span class="s2">&quot;description&quot;</span><span class="p">:</span> <span class="s2">&quot;8 core, 30GB Mem (1 T4 Tensor GPU with 16GB Mem)&quot;</span><span class="p">,</span>
2160
+ <span class="s2">&quot;gpu&quot;</span><span class="p">:</span> <span class="p">{</span>
2161
+ <span class="s2">&quot;gpu_architecture&quot;</span><span class="p">:</span> <span class="s2">&quot;NVIDIA Turing&quot;</span><span class="p">,</span>
2162
+ <span class="s2">&quot;gpu_count&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
2163
+ <span class="s2">&quot;gpu_cuda_cores&quot;</span><span class="p">:</span> <span class="mi">2560</span><span class="p">,</span>
2164
+ <span class="s2">&quot;gpu_memory&quot;</span><span class="p">:</span> <span class="s2">&quot;16&quot;</span><span class="p">,</span>
2165
+ <span class="s2">&quot;gpu_model&quot;</span><span class="p">:</span> <span class="s2">&quot;T4 Tensor&quot;</span><span class="p">,</span>
2166
+ <span class="s2">&quot;gpu_rt_cores&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
2167
+ <span class="s2">&quot;gpu_tensor_cores&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
2168
+ <span class="s2">&quot;total_gpu_cuda_cores&quot;</span><span class="p">:</span> <span class="mi">2560</span><span class="p">,</span>
2169
+ <span class="s2">&quot;total_gpu_memory&quot;</span><span class="p">:</span> <span class="s2">&quot;16&quot;</span><span class="p">,</span>
2170
+ <span class="s2">&quot;total_gpu_rt_cores&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
2171
+ <span class="s2">&quot;total_gpu_tensor_cores&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
2172
+ <span class="p">},</span>
2173
+ <span class="s2">&quot;memory&quot;</span><span class="p">:</span> <span class="s2">&quot;30&quot;</span><span class="p">,</span>
2174
+ <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;n1-standard-8-t4-1&quot;</span><span class="p">,</span>
2175
+ <span class="s2">&quot;operating_system&quot;</span><span class="p">:</span> <span class="s2">&quot;linux&quot;</span><span class="p">,</span>
2176
+ <span class="s2">&quot;categories&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="s2">&quot;Low cores&quot;</span><span class="p">,</span> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="mi">10</span><span class="p">}],</span>
2177
+ <span class="p">},</span>
2178
+ <span class="o">...</span>
2179
+ <span class="p">]</span>
2180
+ </code></pre></div>
2181
+
2182
+ <details class="quote">
2183
+ <summary>Source code in <code>ciocore/hardware_set.py</code></summary>
2184
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">find_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">):</span>
2185
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Find all instance types that match a condition.</span>
2186
+
2187
+ <span class="sd"> Args:</span>
2188
+ <span class="sd"> condition (function): A function that takes an instance type and returns True or False.</span>
2189
+
2190
+ <span class="sd"> Returns:</span>
2191
+ <span class="sd"> list: A list of instance types that match the condition.</span>
2192
+
2193
+ <span class="sd"> Example:</span>
2194
+ <span class="sd"> &gt;&gt;&gt; from ciocore import data as coredata</span>
2195
+ <span class="sd"> &gt;&gt;&gt; coredata.init()</span>
2196
+ <span class="sd"> &gt;&gt;&gt; hardware_set = coredata.data()[&quot;instance_types&quot;]</span>
2197
+ <span class="sd"> &gt;&gt;&gt; hardware_set.find_all(lambda x: x[&quot;gpu&quot;])</span>
2198
+ <span class="sd"> [</span>
2199
+ <span class="sd"> {</span>
2200
+ <span class="sd"> &quot;cores&quot;: 4,</span>
2201
+ <span class="sd"> &quot;description&quot;: &quot;4 core, 15GB Mem (1 T4 Tensor GPU with 16GB Mem)&quot;,</span>
2202
+ <span class="sd"> &quot;gpu&quot;: {</span>
2203
+ <span class="sd"> &quot;gpu_architecture&quot;: &quot;NVIDIA Turing&quot;,</span>
2204
+ <span class="sd"> &quot;gpu_count&quot;: 1,</span>
2205
+ <span class="sd"> &quot;gpu_cuda_cores&quot;: 2560,</span>
2206
+ <span class="sd"> &quot;gpu_memory&quot;: &quot;16&quot;,</span>
2207
+ <span class="sd"> &quot;gpu_model&quot;: &quot;T4 Tensor&quot;,</span>
2208
+ <span class="sd"> &quot;gpu_rt_cores&quot;: 0,</span>
2209
+ <span class="sd"> &quot;gpu_tensor_cores&quot;: 0,</span>
2210
+ <span class="sd"> &quot;total_gpu_cuda_cores&quot;: 2560,</span>
2211
+ <span class="sd"> &quot;total_gpu_memory&quot;: &quot;16&quot;,</span>
2212
+ <span class="sd"> &quot;total_gpu_rt_cores&quot;: 0,</span>
2213
+ <span class="sd"> &quot;total_gpu_tensor_cores&quot;: 0,</span>
2214
+ <span class="sd"> },</span>
2215
+ <span class="sd"> &quot;memory&quot;: &quot;15&quot;,</span>
2216
+ <span class="sd"> &quot;name&quot;: &quot;n1-standard-4-t4-1&quot;,</span>
2217
+ <span class="sd"> &quot;operating_system&quot;: &quot;linux&quot;,</span>
2218
+ <span class="sd"> &quot;categories&quot;: [{&quot;label&quot;: &quot;Low cores&quot;, &quot;order&quot;: 10}],</span>
2219
+ <span class="sd"> },</span>
2220
+ <span class="sd"> {</span>
2221
+ <span class="sd"> &quot;cores&quot;: 8,</span>
2222
+ <span class="sd"> &quot;description&quot;: &quot;8 core, 30GB Mem (1 T4 Tensor GPU with 16GB Mem)&quot;,</span>
2223
+ <span class="sd"> &quot;gpu&quot;: {</span>
2224
+ <span class="sd"> &quot;gpu_architecture&quot;: &quot;NVIDIA Turing&quot;,</span>
2225
+ <span class="sd"> &quot;gpu_count&quot;: 1,</span>
2226
+ <span class="sd"> &quot;gpu_cuda_cores&quot;: 2560,</span>
2227
+ <span class="sd"> &quot;gpu_memory&quot;: &quot;16&quot;,</span>
2228
+ <span class="sd"> &quot;gpu_model&quot;: &quot;T4 Tensor&quot;,</span>
2229
+ <span class="sd"> &quot;gpu_rt_cores&quot;: 0,</span>
2230
+ <span class="sd"> &quot;gpu_tensor_cores&quot;: 0,</span>
2231
+ <span class="sd"> &quot;total_gpu_cuda_cores&quot;: 2560,</span>
2232
+ <span class="sd"> &quot;total_gpu_memory&quot;: &quot;16&quot;,</span>
2233
+ <span class="sd"> &quot;total_gpu_rt_cores&quot;: 0,</span>
2234
+ <span class="sd"> &quot;total_gpu_tensor_cores&quot;: 0,</span>
2235
+ <span class="sd"> },</span>
2236
+ <span class="sd"> &quot;memory&quot;: &quot;30&quot;,</span>
2237
+ <span class="sd"> &quot;name&quot;: &quot;n1-standard-8-t4-1&quot;,</span>
2238
+ <span class="sd"> &quot;operating_system&quot;: &quot;linux&quot;,</span>
2239
+ <span class="sd"> &quot;categories&quot;: [{&quot;label&quot;: &quot;Low cores&quot;, &quot;order&quot;: 10}],</span>
2240
+ <span class="sd"> },</span>
2241
+ <span class="sd"> ...</span>
2242
+ <span class="sd"> ]</span>
2243
+ <span class="sd"> &quot;&quot;&quot;</span>
2244
+ <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
2245
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">:</span>
2246
+ <span class="k">if</span> <span class="n">condition</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">[</span><span class="n">key</span><span class="p">]):</span>
2247
+ <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">instance_types</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
2248
+ <span class="k">return</span> <span class="n">result</span>
2249
+ </code></pre></div>
2250
+ </details>
2251
+ </div>
2252
+
2253
+ </div>
2254
+
2255
+
2256
+
2257
+ <div class="doc doc-object doc-method">
2258
+
2259
+
2260
+
2261
+ <h3 id="ciocore.hardware_set.HardwareSet.find_first" class="doc doc-heading">
2262
+ <code class="highlight language-python"><span class="n">find_first</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">)</span></code>
2263
+
2264
+
2265
+ </h3>
2266
+
2267
+ <div class="doc doc-contents ">
2268
+
2269
+ <p>Find the first instance type that matches a condition.</p>
2270
+ <p>Please see find_all() above for more details. This method is just a convenience wrapper around find_all() that returns the first result or None if not found.</p>
2271
+
2272
+ <p><strong>Parameters:</strong></p>
2273
+ <table>
2274
+ <thead>
2275
+ <tr>
2276
+ <th>Name</th>
2277
+ <th>Type</th>
2278
+ <th>Description</th>
2279
+ <th>Default</th>
2280
+ </tr>
2281
+ </thead>
2282
+ <tbody>
2283
+ <tr>
2284
+ <td><code>condition</code></td>
2285
+ <td><code>function</code></td>
2286
+ <td><p>A function that takes an instance type and returns True or False.</p></td>
2287
+ <td><em>required</em></td>
2288
+ </tr>
2289
+ </tbody>
2290
+ </table>
2291
+ <p><strong>Returns:</strong></p>
2292
+ <table>
2293
+ <thead>
2294
+ <tr>
2295
+ <th>Type</th>
2296
+ <th>Description</th>
2297
+ </tr>
2298
+ </thead>
2299
+ <tbody>
2300
+ <tr>
2301
+ <td><code>dict</code></td>
2302
+ <td><p>The first instance type that matches the condition or None if not found.</p></td>
2303
+ </tr>
2304
+ </tbody>
2305
+ </table>
2306
+ <details class="quote">
2307
+ <summary>Source code in <code>ciocore/hardware_set.py</code></summary>
2308
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">find_first</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">):</span>
2309
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Find the first instance type that matches a condition.</span>
2310
+
2311
+ <span class="sd"> Please see find_all() above for more details. This method is just a convenience wrapper around find_all() that returns the first result or None if not found.</span>
2312
+
2313
+ <span class="sd"> Args:</span>
2314
+ <span class="sd"> condition (function): A function that takes an instance type and returns True or False.</span>
2315
+
2316
+ <span class="sd"> Returns:</span>
2317
+ <span class="sd"> dict: The first instance type that matches the condition or None if not found.</span>
2318
+ <span class="sd"> &quot;&quot;&quot;</span>
2319
+ <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">condition</span><span class="p">)),</span> <span class="kc">None</span><span class="p">)</span>
2320
+ </code></pre></div>
2321
+ </details>
2322
+ </div>
2323
+
2324
+ </div>
2325
+
2326
+
2327
+
2328
+ <div class="doc doc-object doc-method">
2329
+
2330
+
2331
+
2332
+ <h3 id="ciocore.hardware_set.HardwareSet.get_model" class="doc doc-heading">
2333
+ <code class="highlight language-python"><span class="n">get_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_misc</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
2334
+
2335
+
2336
+ </h3>
2337
+
2338
+ <div class="doc doc-contents ">
2339
+
2340
+ <p>Get the categories structure with renaming ready for some specific widget, such as a Qt Combobox.</p>
2341
+ <div class="admonition deprecated">
2342
+ <p class="admonition-title">Deprecated</p>
2343
+ <p>The get_model() method is deprecated. The <code>with_misc</code> parameter is no longer used, which means that this function only serves to rename a few keys. What's more, the init function ensures that every instance type has a category. This function is no longer needed. Submitters that use it will work but should be updated to use the categories structure directly as it minimizes the levels of indirection necessary to work with it.</p>
2344
+ </div>
2345
+
2346
+ <details class="quote">
2347
+ <summary>Source code in <code>ciocore/hardware_set.py</code></summary>
2348
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_misc</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
2349
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the categories structure with renaming ready for some specific widget, such as a Qt Combobox.</span>
2350
+
2351
+ <span class="sd"> Deprecated:</span>
2352
+ <span class="sd"> The get_model() method is deprecated. The `with_misc` parameter is no longer used, which means that this function only serves to rename a few keys. What&#39;s more, the init function ensures that every instance type has a category. This function is no longer needed. Submitters that use it will work but should be updated to use the categories structure directly as it minimizes the levels of indirection necessary to work with it.</span>
2353
+ <span class="sd"> &quot;&quot;&quot;</span>
2354
+ <span class="k">if</span> <span class="n">with_misc</span><span class="p">:</span>
2355
+ <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;with_misc is no longer used&quot;</span><span class="p">)</span>
2356
+ <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
2357
+ <span class="k">for</span> <span class="n">category</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">categories</span><span class="p">:</span>
2358
+ <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
2359
+ <span class="p">{</span>
2360
+ <span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="n">category</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">],</span>
2361
+ <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="p">[</span>
2362
+ <span class="p">{</span><span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="n">k</span><span class="p">[</span><span class="s2">&quot;description&quot;</span><span class="p">],</span> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="n">k</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]}</span>
2363
+ <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">category</span><span class="p">[</span><span class="s2">&quot;content&quot;</span><span class="p">]</span>
2364
+ <span class="p">],</span>
2365
+ <span class="p">}</span>
2366
+ <span class="p">)</span>
2367
+
2368
+ <span class="k">return</span> <span class="n">result</span>
2369
+ </code></pre></div>
2370
+ </details>
2371
+ </div>
2372
+
2373
+ </div>
2374
+
2375
+
2376
+
2377
+
2378
+
2379
+ </div>
2380
+
2381
+ </div>
2382
+
2383
+ </div>
2384
+
2385
+
2386
+
2387
+
2388
+
2389
+
2390
+
2391
+
2392
+ </div>
2393
+
2394
+ </div>
2395
+
2396
+ </div>
2397
+
2398
+
2399
+
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+
2406
+
2407
+
2408
+
2409
+
2410
+ </article>
2411
+ </div>
2412
+
2413
+
2414
+ <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
2415
+ </div>
2416
+
2417
+ <button type="button" class="md-top md-icon" data-md-component="top" hidden>
2418
+
2419
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
2420
+ Back to top
2421
+ </button>
2422
+
2423
+ </main>
2424
+
2425
+ <footer class="md-footer">
2426
+
2427
+ <div class="md-footer-meta md-typeset">
2428
+ <div class="md-footer-meta__inner md-grid">
2429
+ <div class="md-copyright">
2430
+
2431
+ <div class="md-copyright__highlight">
2432
+ Copyright &copy; 2023, CoreWeave.
2433
+ </div>
2434
+
2435
+
2436
+ Made with
2437
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2438
+ Material for MkDocs
2439
+ </a>
2440
+
2441
+ </div>
2442
+
2443
+ </div>
2444
+ </div>
2445
+ </footer>
2446
+
2447
+ </div>
2448
+ <div class="md-dialog" data-md-component="dialog">
2449
+ <div class="md-dialog__inner md-typeset"></div>
2450
+ </div>
2451
+
2452
+
2453
+ <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.expand", "navigation.instant", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "navigation.top"], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
2454
+
2455
+
2456
+ <script src="../../assets/javascripts/bundle.471ce7a9.min.js"></script>
2457
+
2458
+
2459
+ </body>
2460
+ </html>