ivoryos 1.2.0b1__py3-none-any.whl → 1.2.2__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.

Potentially problematic release.


This version of ivoryos might be problematic. Click here for more details.

Files changed (82) hide show
  1. ivoryos/__init__.py +22 -1
  2. ivoryos/config.py +1 -0
  3. ivoryos/optimizer/ax_optimizer.py +164 -0
  4. ivoryos/optimizer/base_optimizer.py +65 -0
  5. ivoryos/optimizer/baybe_optimizer.py +183 -0
  6. ivoryos/optimizer/registry.py +9 -0
  7. ivoryos/routes/auth/auth.py +3 -1
  8. ivoryos/routes/data/data.py +2 -0
  9. ivoryos/routes/design/design.py +4 -4
  10. ivoryos/routes/library/library.py +4 -4
  11. ivoryos/utils/script_runner.py +1 -1
  12. ivoryos/utils/serilize.py +4 -6
  13. ivoryos/utils/utils.py +2 -1
  14. ivoryos/version.py +1 -1
  15. {ivoryos-1.2.0b1.dist-info → ivoryos-1.2.2.dist-info}/METADATA +60 -35
  16. ivoryos-1.2.2.dist-info/RECORD +47 -0
  17. {ivoryos-1.2.0b1.dist-info → ivoryos-1.2.2.dist-info}/WHEEL +1 -1
  18. {ivoryos-1.2.0b1.dist-info → ivoryos-1.2.2.dist-info}/top_level.txt +0 -1
  19. ivoryos/routes/auth/templates/login.html +0 -25
  20. ivoryos/routes/auth/templates/signup.html +0 -32
  21. ivoryos/routes/control/templates/controllers.html +0 -166
  22. ivoryos/routes/control/templates/controllers_new.html +0 -112
  23. ivoryos/routes/data/templates/components/step_card.html +0 -13
  24. ivoryos/routes/data/templates/workflow_database.html +0 -109
  25. ivoryos/routes/data/templates/workflow_view.html +0 -130
  26. ivoryos/routes/design/templates/components/action_form.html +0 -53
  27. ivoryos/routes/design/templates/components/actions_panel.html +0 -25
  28. ivoryos/routes/design/templates/components/autofill_toggle.html +0 -10
  29. ivoryos/routes/design/templates/components/canvas.html +0 -5
  30. ivoryos/routes/design/templates/components/canvas_footer.html +0 -9
  31. ivoryos/routes/design/templates/components/canvas_header.html +0 -75
  32. ivoryos/routes/design/templates/components/canvas_main.html +0 -34
  33. ivoryos/routes/design/templates/components/deck_selector.html +0 -10
  34. ivoryos/routes/design/templates/components/edit_action_form.html +0 -38
  35. ivoryos/routes/design/templates/components/instruments_panel.html +0 -66
  36. ivoryos/routes/design/templates/components/modals/drop_modal.html +0 -17
  37. ivoryos/routes/design/templates/components/modals/json_modal.html +0 -22
  38. ivoryos/routes/design/templates/components/modals/new_script_modal.html +0 -17
  39. ivoryos/routes/design/templates/components/modals/rename_modal.html +0 -23
  40. ivoryos/routes/design/templates/components/modals/saveas_modal.html +0 -27
  41. ivoryos/routes/design/templates/components/modals.html +0 -6
  42. ivoryos/routes/design/templates/components/python_code_overlay.html +0 -39
  43. ivoryos/routes/design/templates/components/sidebar.html +0 -15
  44. ivoryos/routes/design/templates/components/text_to_code_panel.html +0 -20
  45. ivoryos/routes/design/templates/experiment_builder.html +0 -41
  46. ivoryos/routes/execute/templates/components/error_modal.html +0 -20
  47. ivoryos/routes/execute/templates/components/logging_panel.html +0 -31
  48. ivoryos/routes/execute/templates/components/progress_panel.html +0 -27
  49. ivoryos/routes/execute/templates/components/run_panel.html +0 -9
  50. ivoryos/routes/execute/templates/components/run_tabs.html +0 -17
  51. ivoryos/routes/execute/templates/components/tab_bayesian.html +0 -399
  52. ivoryos/routes/execute/templates/components/tab_configuration.html +0 -98
  53. ivoryos/routes/execute/templates/components/tab_repeat.html +0 -14
  54. ivoryos/routes/execute/templates/experiment_run.html +0 -294
  55. ivoryos/routes/library/templates/library.html +0 -91
  56. ivoryos/routes/main/templates/help.html +0 -141
  57. ivoryos/routes/main/templates/home.html +0 -103
  58. ivoryos/static/favicon.ico +0 -0
  59. ivoryos/static/gui_annotation/Slide1.png +0 -0
  60. ivoryos/static/gui_annotation/Slide2.PNG +0 -0
  61. ivoryos/static/js/action_handlers.js +0 -213
  62. ivoryos/static/js/db_delete.js +0 -23
  63. ivoryos/static/js/overlay.js +0 -12
  64. ivoryos/static/js/script_metadata.js +0 -39
  65. ivoryos/static/js/socket_handler.js +0 -125
  66. ivoryos/static/js/sortable_card.js +0 -24
  67. ivoryos/static/js/sortable_design.js +0 -138
  68. ivoryos/static/js/ui_state.js +0 -113
  69. ivoryos/static/logo.webp +0 -0
  70. ivoryos/static/style.css +0 -211
  71. ivoryos/templates/base.html +0 -157
  72. ivoryos-1.2.0b1.dist-info/RECORD +0 -105
  73. tests/__init__.py +0 -0
  74. tests/conftest.py +0 -133
  75. tests/integration/__init__.py +0 -0
  76. tests/integration/test_route_auth.py +0 -80
  77. tests/integration/test_route_control.py +0 -94
  78. tests/integration/test_route_database.py +0 -61
  79. tests/integration/test_route_design.py +0 -36
  80. tests/integration/test_route_main.py +0 -35
  81. tests/integration/test_sockets.py +0 -26
  82. {ivoryos-1.2.0b1.dist-info → ivoryos-1.2.2.dist-info/licenses}/LICENSE +0 -0
ivoryos/static/style.css DELETED
@@ -1,211 +0,0 @@
1
- .login {
2
- width: 500px;
3
- padding: 8% 0 0;
4
- margin: auto;
5
- align-content: center;
6
- }
7
- .card{
8
- display: flex;
9
- justify-content: flex-end;
10
- cursor: move;
11
- border: none;
12
- transition: transform 0.3s ease, box-shadow 0.3s ease;
13
-
14
- }
15
-
16
- .card a {
17
- text-decoration: none;
18
- }
19
- .card-title {
20
- color: #007bff; /* Bootstrap primary color */
21
- }
22
- .grid-container {
23
- display: grid;
24
- grid-template-columns: repeat(auto-fit, minmax(350px, 400px));
25
- gap: 25px;
26
- padding: 10px;
27
- }
28
- .navbar-nav {
29
- font-size: larger;
30
- }
31
- .navbar-nav li{
32
- margin-right:10px;
33
- margin-left:10px;
34
- }
35
-
36
- .canvas {
37
- height: 70vh;
38
- overflow: hidden;
39
- overflow-y: scroll;
40
- background: #e8e8cd;
41
- background-size: 20px 20px;
42
- background-image: radial-gradient(circle, cadetblue 1px, rgba(0, 0, 0, 0) 1px);
43
- }
44
-
45
- .canvas content{
46
- margin-top: 10px;
47
- }
48
- body {
49
- padding-top: 100px;
50
- background-color: #f8f9fa; /* Light grey background */
51
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
52
- }
53
- /*.run-panel-row-height {*/
54
- /* height: 80vh;*/
55
- /*}*/
56
- pre {
57
- tab-size: 4;
58
- }
59
- .scroll-column{
60
- height: 90vh;
61
- overflow: hidden;
62
- overflow-y: scroll;
63
- }
64
-
65
- label {
66
- display:block
67
- }
68
-
69
- .scroll {
70
- overflow: auto;
71
- -webkit-overflow-scrolling: touch; /* enables momentum-scrolling on iOS */
72
- position: absolute;
73
- top: 0;
74
- left: 0;
75
- right: 0;
76
- bottom: 0;
77
- }
78
-
79
-
80
- /*Remove the scrollbar from Chrome, Safari, Edge and IE*/
81
- ::-webkit-scrollbar {
82
- background: transparent;
83
- }
84
-
85
- * {
86
- -ms-overflow-style: none !important;
87
- }
88
- .script-table{
89
- background: white;
90
- width: fit-content;
91
- }
92
- .script-table td {
93
- border-bottom: none;
94
- border-top: cadetblue;
95
- }
96
- .script-table th{
97
- border-top: cadetblue;
98
- border-bottom: none;
99
- }
100
-
101
- .bottom-button {
102
- position: absolute;
103
- bottom: 20px;
104
- }
105
-
106
- hr.vertical {
107
- width: 5px;
108
- height: 100%;
109
- display: inline-block;
110
- /* or height in PX */
111
- }
112
- .list-group a {
113
- text-align: left;
114
- }
115
-
116
- .tray input[type="checkbox"]:checked + label{
117
- background: radial-gradient(circle, white 40%, midnightblue, dodgerblue 43%);
118
- }
119
-
120
- .btn-vial{
121
- height: 50px;
122
- width: 50px;
123
- border-radius: 50%;
124
- background: lightgray;
125
- margin-right: 10px;
126
- margin-top: 10px;
127
- /*text-align: center;*/
128
-
129
- }
130
-
131
- .tray {
132
- width: 70px;
133
- height: 70px;
134
- display: inline-block;
135
- background: darkgrey;
136
- /*text-align:center;*/
137
- vertical-align: middle;
138
- }
139
-
140
- .disabled-link {
141
- pointer-events: none;
142
- color: currentColor;
143
- cursor: not-allowed;
144
- opacity: 0.5;
145
- text-decoration: none;
146
- }
147
-
148
-
149
- .controller-card a {
150
- text-decoration: none;
151
- }
152
-
153
- #logging-panel {
154
- flex-grow: 1;
155
- height: 50vh;
156
- overflow-y: auto;
157
- background-color: #f5f5f5;
158
- padding: 10px;
159
- }
160
-
161
- .dropdown:hover .dropdown-menu {
162
- display: block;
163
- }
164
-
165
- #reorder {
166
- overflow-y: scroll;
167
- -webkit-overflow-scrolling: touch;
168
- }
169
-
170
- .accordion-item.design-control .accordion-button.collapsed {
171
- background-color:#c1f2f1 !important;
172
- }
173
- .accordion-item.design-control .accordion-button {
174
- background-color:#b3dad9 !important;
175
- }
176
- .accordion-item.design-control .accordion-button:hover {
177
- background-color:#b3dad9 !important;
178
- }
179
-
180
- .accordion-item.text-to-code .accordion-button.collapsed {
181
- background-color: #cdc1f2 !important;
182
- }
183
- .accordion-item.text-to-code .accordion-button {
184
- background-color: #cdc1f2 !important;
185
- }
186
- .accordion-item.text-to-code .accordion-button:hover {
187
- background-color: #b8afdc !important;
188
- }
189
- .overlay {
190
- position: fixed;
191
- top: 0;
192
- left: 0;
193
- width: 100%;
194
- height: 100%;
195
- background-color: rgba(0, 0, 0, 0.5);
196
- display: none;
197
- z-index: 1000;
198
- text-align: center;
199
- color: white;
200
- font-size: 24px;
201
- padding-top: 20%;
202
- }
203
- .drop-placeholder {
204
- height: 2px !important; /* Keep it very thin */
205
- min-height: 2px !important;
206
- margin: 0 !important;
207
- padding: 0 !important;
208
- background: rgba(0, 0, 0, 0.2); /* Slight visibility */
209
- border-radius: 2px;
210
- list-style: none; /* Remove any default list styling */
211
- }
@@ -1,157 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>{% block title %}{% endblock %}</title>
7
- {#bootstrap#}
8
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css" integrity="sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp" crossorigin="anonymous">
9
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css">
10
- <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
11
- {#static#}
12
- <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
13
- <link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">
14
- {#for python code displaying#}
15
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css">
16
- <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/js/bootstrap.bundle.min.js" integrity="sha384-qKXV1j0HvMUeCBQ+QVp7JcfGl760yU08IQ+GpUo5hlbpg51QRiuqHAJz8+BrxE/N" crossorigin="anonymous"></script>
17
- <script>hljs.highlightAll();</script>
18
- {#drag design#}
19
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
20
- {#drag card#}
21
- <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
22
- </head>
23
- <body>
24
- <nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
25
- <div class= "container">
26
- {# {{ module_config }}#}
27
- <a class="navbar-brand" href="{{ url_for('main.index') }}">
28
- <img src="{{url_for('static', filename='logo.webp')}}" alt="Logo" height="60" class="d-inline-block align-text-bottom">
29
- </a>
30
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
31
- <span class="navbar-toggler-icon"></span>
32
- </button>
33
-
34
- <div class="collapse navbar-collapse" id="navbarSupportedContent">
35
- <ul class="navbar-nav mr-auto">
36
- <li class="nav-item">
37
- <a class="nav-link" href="{{ url_for('main.index') }}" aria-current="page">Home</a>
38
- </li>
39
- {% if enable_design %}
40
- <li class="nav-item">
41
- <a class="nav-link" href="{{ url_for('library.load_from_database') }}" aria-current="page">Library</a>
42
- </li>
43
- <li class="nav-item">
44
- <a class="nav-link" href="{{ url_for('design.experiment_builder') }}">Design</a>
45
- </li>
46
- <li class="nav-item">
47
- <a class="nav-link" href="{{ url_for('execute.experiment_run') }}">Compile/Run</a>
48
- </li>
49
- <li class="nav-item">
50
- <a class="nav-link" href="{{ url_for('data.list_workflows') }}">Data</a>
51
- </li>
52
- {% endif %}
53
-
54
- <li class="nav-item">
55
- <a class="nav-link" href="{{ url_for('control.deck_controllers') }}">Devices</a></li>
56
- </li>
57
- {# <li class="nav-item">#}
58
- {# <a class="nav-link" href="{{ url_for('control.controllers_home') }}">Temp Devices</a></li>#}
59
- {# </li>#}
60
- {# <li class="nav-item">#}
61
- {# <a class="nav-link" href="{{ url_for('main.help_info') }}">About</a>#}
62
- {# </li>#}
63
- {% if plugins %}
64
- {% for plugin in plugins %}
65
- <li class="nav-item">
66
- <a class="nav-link" href="{{ url_for(plugin+'.main') }}">{{ plugin.capitalize() }}</a></li>
67
- </li>
68
- {% endfor %}
69
- {% endif %}
70
- </ul>
71
- <ul class="navbar-nav ms-auto">
72
-
73
- {% if session["user"] %}
74
- <div class="dropdown">
75
- <li class="nav-item " aria-expanded="false"><i class="bi bi-person-circle"></i> {{ session["user"] }}</li>
76
- <ul class="dropdown-menu">
77
- <li><a class="dropdown-item" href="{{ url_for("auth.logout") }}" role="button" aria-expanded="false">Logout</a></li>
78
- </ul>
79
-
80
- </div>
81
- {% else %}
82
- <li class="nav-item">
83
- <a class="nav-link" href="{{ url_for("auth.login") }}">Login</a>
84
- </li>
85
- {% endif %}
86
- {# <li class="nav-item">#}
87
- {# <a class="nav-link"href="{{ url_for("signup") }}">Signup</a>#}
88
- {# </li>#}
89
- </ul>
90
- </div>
91
- </div>
92
- </nav>
93
-
94
- <div class= "container">
95
- <div class="flash">
96
- {% with messages = get_flashed_messages() %}
97
- {% if messages %}
98
- <div class="alert alert-warning">
99
- Message:
100
- {% for message in messages %}
101
- <div >
102
- {{ message|safe }}
103
- </div>
104
- {% endfor %}
105
- </div>
106
- {% endif %}
107
- {% endwith %}
108
- </div>
109
- {% block body %}{% endblock %}
110
- </div>
111
-
112
- <div class="modal fade" id="importModal" tabindex="-1" aria-labelledby="importModal" aria-hidden="true" >
113
- <div class="modal-dialog">
114
- <div class="modal-content">
115
- <div class="modal-header">
116
- <h1 class="modal-title fs-5" id="importModal">Import deck by file path</h1>
117
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
118
- </div>
119
- <form method="POST" action="{{ url_for('control.temp.import_deck') }}" enctype="multipart/form-data">
120
- <div class="modal-body">
121
- <h5>from connection history</h5>
122
- <div class="form-group">
123
- <select class="form-select" name="filepath">
124
- <option disabled selected value> -- select an option -- </option>
125
- {% for connection in history %}
126
- <option style="overflow-wrap: break-word;" name="filepath" id="filepath" value="{{connection}}">{{connection}}</option>
127
- {% endfor %}
128
- {# <option>clear history</option>#}
129
- </select>
130
- </div>
131
- <h5>input manually</h5>
132
- <div class="input-group mb-3">
133
- <label class="input-group-text" for="filepath">File Path:</label>
134
- <input type="text" class="form-control" name="filepath" id="filepath">
135
- </div>
136
- <div class="input-group mb-3">
137
- <div class="form-check">
138
- <input type="checkbox" class="form-check-input" id="update" name="update" value="update">
139
- <label class="form-check-label" for="update">Update editor config</label>
140
- </div>
141
- </div>
142
-
143
- <div class="modal-footer">
144
- <div class="form-check">
145
- <input type="checkbox" class="form-check-input" id="dismiss" name="dismiss" value="dismiss">
146
- <label class="form-check-label" for="dismiss">Don't remind me</label>
147
- </div>
148
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal"> Close </button>
149
- <button type="submit" class="btn btn-primary"> Save </button>
150
- </div>
151
- </div>
152
- </form>
153
- </div>
154
- </div>
155
- </div>
156
- </body>
157
- </html>
@@ -1,105 +0,0 @@
1
- ivoryos/__init__.py,sha256=p9m5csEeKgE7VJ_PPf-d50G5Q4A9aN2vRfJRJdi9Z4c,9149
2
- ivoryos/config.py,sha256=sk4dskm-K_Nv4uaA3QuE6xtew8wL6q3HmIoLgRm7p8U,2153
3
- ivoryos/socket_handlers.py,sha256=VWVWiIdm4jYAutwGu6R0t1nK5MuMyOCL0xAnFn06jWQ,1302
4
- ivoryos/version.py,sha256=ntKvvsY6AbFg07ckzinzd85OeFjImJxCjVyQw6rMO2s,24
5
- ivoryos/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- ivoryos/routes/api/api.py,sha256=X_aZMB_nCxW41pqZpJOiEEwGmlqLqJUArruevuy41v0,2284
7
- ivoryos/routes/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- ivoryos/routes/auth/auth.py,sha256=SbtiMc1kFHDXIauvT1o3_8rJ-jVVz2C6hfKeSCmoXSE,3231
9
- ivoryos/routes/auth/templates/login.html,sha256=WSRrKbdM_oobqSXFRTo-j9UlOgp6sYzS9tm7TqqPULI,1207
10
- ivoryos/routes/auth/templates/signup.html,sha256=b5LTXtpfTSkSS7X8u1ldwQbbgEFTk6UNMAediA5BwBY,1465
11
- ivoryos/routes/control/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- ivoryos/routes/control/control.py,sha256=Vmy3GRZz8EbKmV9qslR8gsaYaYzb5HQTpukp42HfMow,5236
13
- ivoryos/routes/control/control_file.py,sha256=NIAzwhswvpl3u0mansy1ku-rPDybS5hVbmbnymOikWk,1548
14
- ivoryos/routes/control/control_new_device.py,sha256=mfJKg5JAOagIpUKbp2b5nRwvd2V3bzT3M0zIhIsEaFM,5456
15
- ivoryos/routes/control/utils.py,sha256=at11wA5HPAZN4BfMaymj1GKEvRTrqi4Wg6cTqUZJDjU,1155
16
- ivoryos/routes/control/templates/controllers.html,sha256=tgtTuns8S2Pf6XKeojinQZ1bz112ieRGLPF5-1cElfE,8030
17
- ivoryos/routes/control/templates/controllers_new.html,sha256=eVeLABT39DWOIYrwWClw7sAD3lCoAGCznygPgFbQoRc,5945
18
- ivoryos/routes/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- ivoryos/routes/data/data.py,sha256=PhuTNlQptpqBZ_9cVCYN_PbM7LBma5BjvsDlZ5gpPxM,4186
20
- ivoryos/routes/data/templates/workflow_database.html,sha256=ofvHcovpwmJXo1SFiSrL8I9kLU_3U1UxsJUUrQ2CJUU,4878
21
- ivoryos/routes/data/templates/workflow_view.html,sha256=72xKreX9WhYx-0n0cFf-CL-fJIWXPCIaTi_Aa8Tq3xg,3651
22
- ivoryos/routes/data/templates/components/step_card.html,sha256=9lKR4NCgU2v5Nbdv2uaJ-9aKibtiB_2-Y_kyHX6Ka1k,730
23
- ivoryos/routes/design/__init__.py,sha256=zS3HXKaw0ALL5n6t_W1rUz5Uj5_tTQ-Y1VMXyzewvR0,113
24
- ivoryos/routes/design/design.py,sha256=9xP6uOro4ZRzvVNJ0oVv9cc27LrQw06lLsxhgYTym9c,17711
25
- ivoryos/routes/design/design_file.py,sha256=m4yku8fkpLUs4XvLJBqR5V-kyaGKbGB6ZoRxGbjEU5Q,2140
26
- ivoryos/routes/design/design_step.py,sha256=l8U3-FuXmap__sYm51AueKdbTaLCFaKjAz-j02b4g-E,5200
27
- ivoryos/routes/design/templates/experiment_builder.html,sha256=hh-d2tOc_40gww5WfUYIf8sM3qBaALZnR8Sx7Ja4tpU,1623
28
- ivoryos/routes/design/templates/components/action_form.html,sha256=ktnmXVwe2WFLM6Sg_VbBfDrPXrnongSUxjpYhZGamPY,3058
29
- ivoryos/routes/design/templates/components/actions_panel.html,sha256=jHTR58saTUIZInBdC-vLc1ZTbStLiULeWbupjB4hQzo,977
30
- ivoryos/routes/design/templates/components/autofill_toggle.html,sha256=CRVQUHoQT7sOSO5-Vax54ImHdT4G_mEgqR5OQkeUwK8,617
31
- ivoryos/routes/design/templates/components/canvas.html,sha256=bKLCJaG1B36Yy9Vsnz4P5qiX4BPdfaGe9JeQQzu9rsI,268
32
- ivoryos/routes/design/templates/components/canvas_footer.html,sha256=5VRRacMZbzx0hUej0NPP-PmXM_AtUqduHzDS7a60cQY,435
33
- ivoryos/routes/design/templates/components/canvas_header.html,sha256=7iIzLDGHX7MnmBbf98nWtLDprbeIgoNV4dJUO1zE4Tc,3598
34
- ivoryos/routes/design/templates/components/canvas_main.html,sha256=9inYO700zRa09lfQI2NY4FJGGeTh-9rvX4ltjj0LK3k,1432
35
- ivoryos/routes/design/templates/components/deck_selector.html,sha256=ryTRpljYezo0AzGLCJu_qOMokjjnft3GIxddmNGtBA0,657
36
- ivoryos/routes/design/templates/components/edit_action_form.html,sha256=Dz7FnnOK4PYptAHNy9_WFCU1RZTSV61-1lNHHOSRJNs,1876
37
- ivoryos/routes/design/templates/components/instruments_panel.html,sha256=r1jnScVRAknrRPRbAnIVApfnx9f4yavgf9ZlNhNpjW4,3135
38
- ivoryos/routes/design/templates/components/modals.html,sha256=6Dl8I8oD4ln7kK8C5e92pFVVH5KDte-vVTL0U_6NSTg,306
39
- ivoryos/routes/design/templates/components/python_code_overlay.html,sha256=GUHgsmUWQf0P1Fbg5W0OJC34TXCUIMQVUkS7KDoauyI,1264
40
- ivoryos/routes/design/templates/components/sidebar.html,sha256=A6dRo53zIB6QJVrRLJcBZHUNJ3qpYPnR3kWxM8gTkjw,501
41
- ivoryos/routes/design/templates/components/text_to_code_panel.html,sha256=d-omdXk-PXAR5AyWPr4Rc4pqsebZOiTiMrnz3pPCnUY,1197
42
- ivoryos/routes/design/templates/components/modals/drop_modal.html,sha256=LPxcycSiBjdQbajYOegjMQEi7ValcaczGoWmW8Sz3Ms,779
43
- ivoryos/routes/design/templates/components/modals/json_modal.html,sha256=R-SeEdhtuDVbwOWYYH_hCdpul7y4ybCWoNwVIO5j49s,1122
44
- ivoryos/routes/design/templates/components/modals/new_script_modal.html,sha256=pxZdWWDgI52VsTFzz6pIM9m_dTwR6jARcvCYQ6fV3Lc,937
45
- ivoryos/routes/design/templates/components/modals/rename_modal.html,sha256=40rLNF9JprdXekB3mv_S3OdqVuQYOe-BZSCgOnIkxJQ,1202
46
- ivoryos/routes/design/templates/components/modals/saveas_modal.html,sha256=N5PEqUuK3qxDFbtDKFnzHwhLarQLPHiX-XQAdQPL1AU,1555
47
- ivoryos/routes/execute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- ivoryos/routes/execute/execute.py,sha256=hFnCvzO1OzR0XckCRzHfP_RZV70DtbH_p7kw1YhIe3o,12250
49
- ivoryos/routes/execute/execute_file.py,sha256=TelWYV295p4ZPhkUDJSVxfYROfVaKodEmDPTS2plQHI,2816
50
- ivoryos/routes/execute/templates/experiment_run.html,sha256=D-ek7ISQrIQXy4PH37TnsURihbGNdpCgdTC8w79cwQc,10355
51
- ivoryos/routes/execute/templates/components/error_modal.html,sha256=5Dmp9V0Ys6781Y-pKn_mc4N9J46c8EwIkjkHX22xCsw,1025
52
- ivoryos/routes/execute/templates/components/logging_panel.html,sha256=FllozlPd6o7uBd8eflGjRktPV435J3XgiEeLZugoUi0,1623
53
- ivoryos/routes/execute/templates/components/progress_panel.html,sha256=-nX76aFLxSOiYgI1xMjznC9rDYF-Vb92TmfjXYpBtps,1323
54
- ivoryos/routes/execute/templates/components/run_panel.html,sha256=CmK-LYJ4K6RonHn6l9eJkqRw0XQizThOugxiXZonSDs,373
55
- ivoryos/routes/execute/templates/components/run_tabs.html,sha256=u-msoTQPBGvyE_5_UczRtR9bh7zD3EvsgJhT77rTzOI,1145
56
- ivoryos/routes/execute/templates/components/tab_bayesian.html,sha256=8knnqec4N-4P7XHPCPY_NeTcLGe4KCYlLvDQm3wgz2I,21315
57
- ivoryos/routes/execute/templates/components/tab_configuration.html,sha256=JIHsYvwcYQZmJJz503NXnhcceKxd9B3JKFUSvGNWe_0,5131
58
- ivoryos/routes/execute/templates/components/tab_repeat.html,sha256=X-r7p78tVRrfwmAbhhZGBZbm78C4nTJS6O2A4dvzGEg,760
59
- ivoryos/routes/library/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- ivoryos/routes/library/library.py,sha256=jook_OZRIO1nr3nBxU_X9yrDw5PSLqa0wrInI7GY6sg,5457
61
- ivoryos/routes/library/templates/library.html,sha256=8pyKTc0TmrSSrwSVAYrh6cuPRHutg_yAA8mqzLFyZIg,3968
62
- ivoryos/routes/main/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- ivoryos/routes/main/main.py,sha256=1AcSouCocHWjlpEED-ECn5OFiu0-3u0N-0st5RtKCVY,952
64
- ivoryos/routes/main/templates/help.html,sha256=IOktMEsOPk0SCiMBXZ4mpffClERAyX8W82fel71M3M0,9370
65
- ivoryos/routes/main/templates/home.html,sha256=BDvwkVthxniQ157H6E2hgYHT1Vv1GVBwu6dQejtzwoo,4633
66
- ivoryos/static/favicon.ico,sha256=RhlrPtfITOkzC9BjP1UB1V5L9Oyp6NwNtWeMcGOnpyc,15406
67
- ivoryos/static/logo.webp,sha256=lXgfQR-4mHTH83k7VV9iB54-oC2ipe6uZvbwdOnLETc,14974
68
- ivoryos/static/style.css,sha256=zQVx35A5g6JMJ-K84-6fSKtzXGjp_p5ZVG6KLHPM2IE,4021
69
- ivoryos/static/gui_annotation/Slide1.png,sha256=Lm4gdOkUF5HIUFaB94tl6koQVkzpitKj43GXV_XYMMc,121727
70
- ivoryos/static/gui_annotation/Slide2.PNG,sha256=z3wQ9oVgg4JTWVLQGKK_KhtepRHUYP1e05XUWGT2A0I,118761
71
- ivoryos/static/js/action_handlers.js,sha256=VEDox3gQvg0YXJ6WW6IthOsFqZKmvUGJ8pmQdfzHQFw,5122
72
- ivoryos/static/js/db_delete.js,sha256=l67fqUaN_FVDaL7v91Hd7LyRbxnqXx9nyjF34-7aewY,561
73
- ivoryos/static/js/overlay.js,sha256=dPxop19es0E0ZUSY3d_4exIk7CJuQEnlW5uTt5fZfzI,483
74
- ivoryos/static/js/script_metadata.js,sha256=m8VYZ8OGT2oTx1kXMXq60bKQI9WCbJNkzcFDzLvRuGc,1188
75
- ivoryos/static/js/socket_handler.js,sha256=2Iyv_3METjhSlSavs_L9FE3PKY4xDEpfzJpd2FywY9o,5300
76
- ivoryos/static/js/sortable_card.js,sha256=ifmlGe3yy0U_KzMphV4ClRhK2DLOvkELYMlq1vECuac,807
77
- ivoryos/static/js/sortable_design.js,sha256=QqYyk385JNm6zCgZK_Oa-cJEP1uPtZ_tVz27x4hyx5A,4790
78
- ivoryos/static/js/ui_state.js,sha256=5EuqwIDndjZTqj9dsAR_IA91iGMcodY_TuQo17LLL1w,3331
79
- ivoryos/templates/base.html,sha256=SdZswZmfLWehorMsoGkm-FjLFtB1ivLkdUJFbpDRqp4,8519
80
- ivoryos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- ivoryos/utils/bo_campaign.py,sha256=Fil-zT7JexL_p9XqyWByjAk42XB1R9XUKN8CdV5bi6c,9714
82
- ivoryos/utils/client_proxy.py,sha256=0OT2xTMkqh_2ybgCxMV_71ZVUThWwrsnAhTIBY5vDR8,2095
83
- ivoryos/utils/db_models.py,sha256=baE4LJcSGUj10Tj6imfINXi4JQX_4oLv_kb9bd0rp-M,27920
84
- ivoryos/utils/form.py,sha256=eIk1N77Ynxc4Omww5ZYlmpOIJfQPWto2qfiU6nzIIeQ,21755
85
- ivoryos/utils/global_config.py,sha256=zNO9GYhGn7El3msWoxJIm3S4Mzb3VMh2i5ZEsVtvb2Q,2463
86
- ivoryos/utils/llm_agent.py,sha256=-lVCkjPlpLues9sNTmaT7bT4sdhWvV2DiojNwzB2Lcw,6422
87
- ivoryos/utils/py_to_json.py,sha256=fyqjaxDHPh-sahgT6IHSn34ktwf6y51_x1qvhbNlH-U,7314
88
- ivoryos/utils/script_runner.py,sha256=W4UL2iMt9bTBlb47pu2kc7SJyL9hlKzdtPudVZ9FvIM,16723
89
- ivoryos/utils/serilize.py,sha256=Ded3Vbicl4KYN8GJ_gY7HJMuInAeFZEPk5ZtuEtHPns,6933
90
- ivoryos/utils/task_runner.py,sha256=cDIcmDaqYh0vXoYaL_kO877pluAo2tyfsHl9OgZqJJE,3029
91
- ivoryos/utils/utils.py,sha256=BzgKIMMb7vyUIwYMhGDsWtwJEy5vNKtEHRJHHSiTSnM,13881
92
- tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
- tests/conftest.py,sha256=u2sQ6U-Lghyl7et1Oz6J2E5VZ47VINKcjRM_2leAE2s,3627
94
- tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
- tests/integration/test_route_auth.py,sha256=l3ZDqr0oiCWS3yYSXGK5yMP6qI2t7Sv5I9zoYTkiyQU,2754
96
- tests/integration/test_route_control.py,sha256=YYIll84bTUEKiAxFiFSz6LF3fTldPNfCtHs0IR3mSdM,3935
97
- tests/integration/test_route_database.py,sha256=mS026W_hEuCTMpSkdRWvM-f4MYykK_6nRDJ4K5a7QA0,2342
98
- tests/integration/test_route_design.py,sha256=PJAvGRiCY6B53Pu1v5vPAVHHsuaqRmRKk2eesSNshLU,1157
99
- tests/integration/test_route_main.py,sha256=bmuf8Y_9CRWhiLLf4up11ltEd5YCdsLx6I-o26VGDEw,1228
100
- tests/integration/test_sockets.py,sha256=4ZyFyExm7a-DYzVqpzEONpWeb1a0IT68wyFaQu0rY_Y,925
101
- ivoryos-1.2.0b1.dist-info/LICENSE,sha256=p2c8S8i-8YqMpZCJnadLz1-ofxnRMILzz6NCMIypRag,1084
102
- ivoryos-1.2.0b1.dist-info/METADATA,sha256=qWMSlIivrw_uADCC-MTA6kPha-YvxXwaFxxI1Kw_JWU,8836
103
- ivoryos-1.2.0b1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
104
- ivoryos-1.2.0b1.dist-info/top_level.txt,sha256=mIOiZkdpSwxFJt1R5fsyOff8mNprXHq1nMGNKNULIyE,14
105
- ivoryos-1.2.0b1.dist-info/RECORD,,
tests/__init__.py DELETED
File without changes
tests/conftest.py DELETED
@@ -1,133 +0,0 @@
1
- from enum import Enum
2
-
3
- import bcrypt
4
- import pytest
5
- from ivoryos.config import get_config
6
-
7
- from ivoryos import create_app, socketio, db as _db, utils, global_config
8
- from ivoryos.utils.db_models import User
9
-
10
-
11
- @pytest.fixture(scope='session')
12
- def app():
13
- """Create a new app instance for the test session."""
14
- _app = create_app(get_config('testing'))
15
- return _app
16
-
17
- @pytest.fixture
18
- def client(app):
19
- """A test client for the app."""
20
- with app.test_client() as client:
21
- with app.app_context():
22
- _db.create_all()
23
- yield client
24
- with app.app_context():
25
- _db.drop_all()
26
-
27
- # @pytest.fixture(scope='session')
28
- # def db(app):
29
- # """Session-wide test database."""
30
- # with app.app_context():
31
- # _db.create_all()
32
- # yield _db
33
- # _db.drop_all()
34
-
35
- @pytest.fixture(scope='module')
36
- def init_database(app):
37
- """
38
- Creates the database tables and seeds it with a default test user.
39
- This runs once per test module.
40
- """
41
- with app.app_context():
42
- # Drop everything first to ensure a clean slate
43
- _db.drop_all()
44
- # Create the database tables
45
- _db.create_all()
46
-
47
- # Insert a default user for authentication tests
48
- # Note: In a real app with password hashing, you'd call a hash function here.
49
- password = 'password'
50
- bcrypt_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
51
- default_user = User(username='testuser', password=bcrypt_password)
52
- _db.session.add(default_user)
53
- _db.session.commit()
54
-
55
- yield _db # this is where the testing happens!
56
-
57
- # Teardown: drop all tables after the tests in the module are done
58
- _db.drop_all()
59
-
60
-
61
- # ---------------------
62
- # Authentication Fixture
63
- # ---------------------
64
-
65
- @pytest.fixture(scope='function')
66
- def auth(client, init_database):
67
- """
68
- Logs in the default user for a single test function.
69
- Depends on `init_database` to ensure the user exists.
70
- Handles logout as part of teardown.
71
- """
72
- # Log in the default user
73
- client.post('/ivoryos/auth/login', data={
74
- 'username': 'testuser',
75
- 'password': 'password'
76
- }, follow_redirects=True)
77
-
78
- yield client # this is where the testing happens!
79
-
80
- # Log out the user after the test is done
81
- client.get('/ivoryos/auth/logout', follow_redirects=True)
82
-
83
-
84
- @pytest.fixture
85
- def socketio_client(app):
86
- """A test client for Socket.IO."""
87
- return socketio.test_client(app)
88
-
89
-
90
- class TestEnum(Enum):
91
- """An example Enum for testing type conversion."""
92
- OPTION_A = 'A'
93
- OPTION_B = 'B'
94
-
95
- class DummyModule:
96
- """A more comprehensive dummy instrument for testing."""
97
- def int_method(self, arg: int = 1):
98
- return arg
99
-
100
- def float_method(self, arg: float = 1.0):
101
- return arg
102
-
103
- def bool_method(self, arg: bool = False):
104
- return arg
105
-
106
- def list_method(self, arg: list = None):
107
- return arg or []
108
-
109
- def enum_method(self, arg: TestEnum = TestEnum.OPTION_A):
110
- return arg
111
-
112
- def str_method(self) -> dict:
113
- return {'status': 'OK'}
114
-
115
-
116
- @pytest.fixture
117
- def test_deck(app):
118
- """
119
- A fixture that creates and loads a predictable 'deck' of dummy instruments
120
- for testing the dynamic control routes.
121
- """
122
- dummy_module = DummyModule()
123
- snapshot = utils.create_deck_snapshot(dummy_module)
124
-
125
- with app.app_context():
126
- global_config.deck_snapshot = snapshot
127
- global_config.deck = dummy_module # instantiate the class
128
-
129
- yield DummyModule
130
-
131
- with app.app_context():
132
- global_config.deck_snapshot = {}
133
- global_config.deck = {}
File without changes