lamindb 0.77.2__py3-none-any.whl → 1.0.0__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 (89) hide show
  1. lamindb/__init__.py +39 -32
  2. lamindb/_artifact.py +95 -64
  3. lamindb/_can_curate.py +19 -10
  4. lamindb/_collection.py +51 -49
  5. lamindb/_feature.py +9 -9
  6. lamindb/_finish.py +99 -86
  7. lamindb/_from_values.py +20 -17
  8. lamindb/_is_versioned.py +2 -1
  9. lamindb/_parents.py +23 -16
  10. lamindb/_query_manager.py +3 -3
  11. lamindb/_query_set.py +85 -18
  12. lamindb/_record.py +121 -46
  13. lamindb/_run.py +3 -3
  14. lamindb/_save.py +14 -8
  15. lamindb/{_feature_set.py → _schema.py} +34 -31
  16. lamindb/_storage.py +2 -1
  17. lamindb/_transform.py +51 -23
  18. lamindb/_ulabel.py +17 -8
  19. lamindb/_view.py +15 -14
  20. lamindb/base/__init__.py +24 -0
  21. lamindb/base/fields.py +281 -0
  22. lamindb/base/ids.py +103 -0
  23. lamindb/base/types.py +51 -0
  24. lamindb/base/users.py +30 -0
  25. lamindb/base/validation.py +67 -0
  26. lamindb/core/__init__.py +19 -14
  27. lamindb/core/_context.py +297 -228
  28. lamindb/core/_data.py +44 -49
  29. lamindb/core/_describe.py +41 -31
  30. lamindb/core/_django.py +59 -44
  31. lamindb/core/_feature_manager.py +192 -168
  32. lamindb/core/_label_manager.py +22 -22
  33. lamindb/core/_mapped_collection.py +17 -14
  34. lamindb/core/_settings.py +1 -12
  35. lamindb/core/_sync_git.py +56 -9
  36. lamindb/core/_track_environment.py +1 -1
  37. lamindb/core/datasets/_core.py +5 -6
  38. lamindb/core/exceptions.py +0 -7
  39. lamindb/core/fields.py +1 -1
  40. lamindb/core/loaders.py +18 -2
  41. lamindb/core/{schema.py → relations.py} +22 -19
  42. lamindb/core/storage/_anndata_accessor.py +1 -2
  43. lamindb/core/storage/_backed_access.py +2 -1
  44. lamindb/core/storage/_tiledbsoma.py +40 -13
  45. lamindb/core/storage/objects.py +1 -1
  46. lamindb/core/storage/paths.py +13 -8
  47. lamindb/core/subsettings/__init__.py +0 -2
  48. lamindb/core/types.py +2 -23
  49. lamindb/core/versioning.py +11 -7
  50. lamindb/{_curate.py → curators/__init__.py} +700 -57
  51. lamindb/curators/_spatial.py +528 -0
  52. lamindb/integrations/_vitessce.py +1 -3
  53. lamindb/migrations/0052_squashed.py +1261 -0
  54. lamindb/migrations/0053_alter_featureset_hash_alter_paramvalue_created_by_and_more.py +57 -0
  55. lamindb/migrations/0054_alter_feature_previous_runs_and_more.py +35 -0
  56. lamindb/migrations/0055_artifact_type_artifactparamvalue_and_more.py +61 -0
  57. lamindb/migrations/0056_rename_ulabel_ref_is_name_artifactulabel_label_ref_is_name_and_more.py +22 -0
  58. lamindb/migrations/0057_link_models_latest_report_and_others.py +356 -0
  59. lamindb/migrations/0058_artifact__actions_collection__actions.py +22 -0
  60. lamindb/migrations/0059_alter_artifact__accessor_alter_artifact__hash_type_and_more.py +31 -0
  61. lamindb/migrations/0060_alter_artifact__actions.py +22 -0
  62. lamindb/migrations/0061_alter_collection_meta_artifact_alter_run_environment_and_more.py +45 -0
  63. lamindb/migrations/0062_add_is_latest_field.py +32 -0
  64. lamindb/migrations/0063_populate_latest_field.py +45 -0
  65. lamindb/migrations/0064_alter_artifact_version_alter_collection_version_and_more.py +33 -0
  66. lamindb/migrations/0065_remove_collection_feature_sets_and_more.py +22 -0
  67. lamindb/migrations/0066_alter_artifact__feature_values_and_more.py +352 -0
  68. lamindb/migrations/0067_alter_featurevalue_unique_together_and_more.py +20 -0
  69. lamindb/migrations/0068_alter_artifactulabel_unique_together_and_more.py +20 -0
  70. lamindb/migrations/0069_alter_artifact__accessor_alter_artifact__hash_type_and_more.py +1294 -0
  71. lamindb/migrations/0069_squashed.py +1770 -0
  72. lamindb/migrations/0070_lamindbv1_migrate_data.py +78 -0
  73. lamindb/migrations/0071_lamindbv1_migrate_schema.py +741 -0
  74. lamindb/migrations/0072_remove_user__branch_code_remove_user_aux_and_more.py +148 -0
  75. lamindb/migrations/0073_merge_ourprojects.py +945 -0
  76. lamindb/migrations/0074_lamindbv1_part4.py +374 -0
  77. lamindb/migrations/0075_lamindbv1_part5.py +276 -0
  78. lamindb/migrations/0076_lamindbv1_part6.py +621 -0
  79. lamindb/migrations/0077_lamindbv1_part6b.py +228 -0
  80. lamindb/migrations/0078_lamindbv1_part6c.py +468 -0
  81. lamindb/migrations/0079_alter_rundata_value_json_and_more.py +36 -0
  82. lamindb/migrations/__init__.py +0 -0
  83. lamindb/models.py +4064 -0
  84. {lamindb-0.77.2.dist-info → lamindb-1.0.0.dist-info}/METADATA +15 -20
  85. lamindb-1.0.0.dist-info/RECORD +100 -0
  86. {lamindb-0.77.2.dist-info → lamindb-1.0.0.dist-info}/WHEEL +1 -1
  87. lamindb/core/subsettings/_transform_settings.py +0 -21
  88. lamindb-0.77.2.dist-info/RECORD +0 -63
  89. {lamindb-0.77.2.dist-info → lamindb-1.0.0.dist-info}/LICENSE +0 -0
@@ -0,0 +1,228 @@
1
+ # Generated by Django 5.2 on 2025-01-15 17:55
2
+
3
+ import django.db.models.deletion
4
+ import django.db.models.functions.datetime
5
+ from django.db import migrations, models
6
+
7
+ import lamindb.base.fields
8
+ import lamindb.base.users
9
+ import lamindb.models
10
+
11
+
12
+ def update_type_values(apps, schema_editor):
13
+ Transform = apps.get_model("lamindb", "Transform")
14
+ Transform.objects.filter(type="glue").update(type="linker")
15
+
16
+
17
+ class Migration(migrations.Migration):
18
+ dependencies = [
19
+ ("lamindb", "0076_lamindbv1_part6"),
20
+ ]
21
+
22
+ operations = [
23
+ migrations.RunPython(update_type_values),
24
+ migrations.CreateModel(
25
+ name="FeatureProject",
26
+ fields=[
27
+ (
28
+ "created_at",
29
+ lamindb.base.fields.DateTimeField(
30
+ blank=True,
31
+ db_default=django.db.models.functions.datetime.Now(),
32
+ db_index=True,
33
+ editable=False,
34
+ ),
35
+ ),
36
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
37
+ (
38
+ "created_by",
39
+ lamindb.base.fields.ForeignKey(
40
+ blank=True,
41
+ default=lamindb.base.users.current_user_id,
42
+ editable=False,
43
+ on_delete=django.db.models.deletion.PROTECT,
44
+ related_name="+",
45
+ to="lamindb.user",
46
+ ),
47
+ ),
48
+ (
49
+ "feature",
50
+ lamindb.base.fields.ForeignKey(
51
+ blank=True,
52
+ on_delete=django.db.models.deletion.CASCADE,
53
+ related_name="links_project",
54
+ to="lamindb.feature",
55
+ ),
56
+ ),
57
+ (
58
+ "project",
59
+ lamindb.base.fields.ForeignKey(
60
+ blank=True,
61
+ on_delete=django.db.models.deletion.PROTECT,
62
+ related_name="links_feature",
63
+ to="lamindb.project",
64
+ ),
65
+ ),
66
+ (
67
+ "run",
68
+ lamindb.base.fields.ForeignKey(
69
+ blank=True,
70
+ default=lamindb.models.current_run,
71
+ null=True,
72
+ on_delete=django.db.models.deletion.PROTECT,
73
+ related_name="+",
74
+ to="lamindb.run",
75
+ ),
76
+ ),
77
+ ],
78
+ options={
79
+ "unique_together": {("feature", "project")},
80
+ },
81
+ bases=(lamindb.models.LinkORM, models.Model),
82
+ ),
83
+ migrations.AddField(
84
+ model_name="project",
85
+ name="features",
86
+ field=models.ManyToManyField(
87
+ related_name="projects",
88
+ through="lamindb.FeatureProject",
89
+ to="lamindb.feature",
90
+ ),
91
+ ),
92
+ migrations.CreateModel(
93
+ name="SchemaProject",
94
+ fields=[
95
+ (
96
+ "created_at",
97
+ lamindb.base.fields.DateTimeField(
98
+ blank=True,
99
+ db_default=django.db.models.functions.datetime.Now(),
100
+ db_index=True,
101
+ editable=False,
102
+ ),
103
+ ),
104
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
105
+ (
106
+ "created_by",
107
+ lamindb.base.fields.ForeignKey(
108
+ blank=True,
109
+ default=lamindb.base.users.current_user_id,
110
+ editable=False,
111
+ on_delete=django.db.models.deletion.PROTECT,
112
+ related_name="+",
113
+ to="lamindb.user",
114
+ ),
115
+ ),
116
+ (
117
+ "project",
118
+ lamindb.base.fields.ForeignKey(
119
+ blank=True,
120
+ on_delete=django.db.models.deletion.PROTECT,
121
+ related_name="links_schema",
122
+ to="lamindb.project",
123
+ ),
124
+ ),
125
+ (
126
+ "run",
127
+ lamindb.base.fields.ForeignKey(
128
+ blank=True,
129
+ default=lamindb.models.current_run,
130
+ null=True,
131
+ on_delete=django.db.models.deletion.PROTECT,
132
+ related_name="+",
133
+ to="lamindb.run",
134
+ ),
135
+ ),
136
+ (
137
+ "schema",
138
+ lamindb.base.fields.ForeignKey(
139
+ blank=True,
140
+ on_delete=django.db.models.deletion.CASCADE,
141
+ related_name="links_project",
142
+ to="lamindb.schema",
143
+ ),
144
+ ),
145
+ ],
146
+ options={
147
+ "unique_together": {("schema", "project")},
148
+ },
149
+ bases=(lamindb.models.LinkORM, models.Model),
150
+ ),
151
+ migrations.AddField(
152
+ model_name="project",
153
+ name="schemas",
154
+ field=models.ManyToManyField(
155
+ related_name="projects",
156
+ through="lamindb.SchemaProject",
157
+ to="lamindb.schema",
158
+ ),
159
+ ),
160
+ migrations.CreateModel(
161
+ name="ULabelProject",
162
+ fields=[
163
+ (
164
+ "created_at",
165
+ lamindb.base.fields.DateTimeField(
166
+ blank=True,
167
+ db_default=django.db.models.functions.datetime.Now(),
168
+ db_index=True,
169
+ editable=False,
170
+ ),
171
+ ),
172
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
173
+ (
174
+ "created_by",
175
+ lamindb.base.fields.ForeignKey(
176
+ blank=True,
177
+ default=lamindb.base.users.current_user_id,
178
+ editable=False,
179
+ on_delete=django.db.models.deletion.PROTECT,
180
+ related_name="+",
181
+ to="lamindb.user",
182
+ ),
183
+ ),
184
+ (
185
+ "project",
186
+ lamindb.base.fields.ForeignKey(
187
+ blank=True,
188
+ on_delete=django.db.models.deletion.PROTECT,
189
+ related_name="links_ulabel",
190
+ to="lamindb.project",
191
+ ),
192
+ ),
193
+ (
194
+ "run",
195
+ lamindb.base.fields.ForeignKey(
196
+ blank=True,
197
+ default=lamindb.models.current_run,
198
+ null=True,
199
+ on_delete=django.db.models.deletion.PROTECT,
200
+ related_name="+",
201
+ to="lamindb.run",
202
+ ),
203
+ ),
204
+ (
205
+ "ulabel",
206
+ lamindb.base.fields.ForeignKey(
207
+ blank=True,
208
+ on_delete=django.db.models.deletion.CASCADE,
209
+ related_name="links_project",
210
+ to="lamindb.ulabel",
211
+ ),
212
+ ),
213
+ ],
214
+ options={
215
+ "unique_together": {("ulabel", "project")},
216
+ },
217
+ bases=(lamindb.models.LinkORM, models.Model),
218
+ ),
219
+ migrations.AddField(
220
+ model_name="project",
221
+ name="ulabels",
222
+ field=models.ManyToManyField(
223
+ related_name="projects",
224
+ through="lamindb.ULabelProject",
225
+ to="lamindb.ulabel",
226
+ ),
227
+ ),
228
+ ]
@@ -0,0 +1,468 @@
1
+ # Generated by Django 5.2 on 2025-01-15 22:25
2
+
3
+ import django.contrib.postgres.fields.jsonb
4
+ import django.db.models.deletion
5
+ import django.db.models.functions.datetime
6
+ from django.db import migrations, models
7
+
8
+ import lamindb.base.fields
9
+ import lamindb.base.ids
10
+ import lamindb.base.users
11
+ import lamindb.models
12
+
13
+
14
+ class Migration(migrations.Migration):
15
+ dependencies = [
16
+ ("lamindb", "0077_lamindbv1_part6b"),
17
+ ]
18
+
19
+ operations = [
20
+ migrations.CreateModel(
21
+ name="TidyTable",
22
+ fields=[
23
+ (
24
+ "id",
25
+ models.BigAutoField(
26
+ auto_created=True,
27
+ primary_key=True,
28
+ serialize=False,
29
+ verbose_name="ID",
30
+ ),
31
+ ),
32
+ (
33
+ "created_at",
34
+ lamindb.base.fields.DateTimeField(
35
+ blank=True,
36
+ db_default=django.db.models.functions.datetime.Now(),
37
+ db_index=True,
38
+ editable=False,
39
+ ),
40
+ ),
41
+ (
42
+ "updated_at",
43
+ lamindb.base.fields.DateTimeField(
44
+ blank=True,
45
+ db_default=django.db.models.functions.datetime.Now(),
46
+ db_index=True,
47
+ editable=False,
48
+ ),
49
+ ),
50
+ (
51
+ "_branch_code",
52
+ models.SmallIntegerField(db_default=1, db_index=True, default=1),
53
+ ),
54
+ (
55
+ "_aux",
56
+ lamindb.base.fields.JSONField(
57
+ blank=True, db_default=None, default=None, null=True
58
+ ),
59
+ ),
60
+ (
61
+ "uid",
62
+ lamindb.base.fields.CharField(
63
+ blank=True,
64
+ db_index=True,
65
+ default=lamindb.base.ids.base62_12,
66
+ max_length=12,
67
+ unique=True,
68
+ ),
69
+ ),
70
+ (
71
+ "name",
72
+ lamindb.base.fields.CharField(
73
+ blank=True, default=None, max_length=255
74
+ ),
75
+ ),
76
+ (
77
+ "is_type",
78
+ lamindb.base.fields.BooleanField(
79
+ blank=True, db_index=True, default=None, null=True
80
+ ),
81
+ ),
82
+ (
83
+ "description",
84
+ lamindb.base.fields.TextField(blank=True, default=None),
85
+ ),
86
+ (
87
+ "created_by",
88
+ lamindb.base.fields.ForeignKey(
89
+ blank=True,
90
+ default=lamindb.base.users.current_user_id,
91
+ editable=False,
92
+ on_delete=django.db.models.deletion.PROTECT,
93
+ related_name="+",
94
+ to="lamindb.user",
95
+ ),
96
+ ),
97
+ (
98
+ "projects",
99
+ models.ManyToManyField(
100
+ related_name="_tidytables", to="lamindb.project"
101
+ ),
102
+ ),
103
+ (
104
+ "run",
105
+ lamindb.base.fields.ForeignKey(
106
+ blank=True,
107
+ default=lamindb.models.current_run,
108
+ null=True,
109
+ on_delete=django.db.models.deletion.PROTECT,
110
+ related_name="+",
111
+ to="lamindb.run",
112
+ ),
113
+ ),
114
+ (
115
+ "schema",
116
+ lamindb.base.fields.ForeignKey(
117
+ blank=True,
118
+ null=True,
119
+ on_delete=django.db.models.deletion.SET_NULL,
120
+ to="lamindb.schema",
121
+ ),
122
+ ),
123
+ (
124
+ "space",
125
+ lamindb.base.fields.ForeignKey(
126
+ blank=True,
127
+ db_default=1,
128
+ default=1,
129
+ on_delete=django.db.models.deletion.PROTECT,
130
+ to="lamindb.space",
131
+ ),
132
+ ),
133
+ (
134
+ "type",
135
+ lamindb.base.fields.ForeignKey(
136
+ blank=True,
137
+ null=True,
138
+ on_delete=django.db.models.deletion.PROTECT,
139
+ related_name="records",
140
+ to="lamindb.tidytable",
141
+ ),
142
+ ),
143
+ (
144
+ "ulabels",
145
+ models.ManyToManyField(
146
+ related_name="_tidytables", to="lamindb.ulabel"
147
+ ),
148
+ ),
149
+ ],
150
+ ),
151
+ migrations.CreateModel(
152
+ name="TidyTableData",
153
+ fields=[
154
+ (
155
+ "id",
156
+ models.BigAutoField(
157
+ auto_created=True,
158
+ primary_key=True,
159
+ serialize=False,
160
+ verbose_name="ID",
161
+ ),
162
+ ),
163
+ (
164
+ "row",
165
+ lamindb.base.fields.IntegerField(
166
+ blank=True, help_text="Use -1 for result data"
167
+ ),
168
+ ),
169
+ ("value_int", models.BigIntegerField(blank=True, null=True)),
170
+ ("value_float", models.FloatField(blank=True, null=True)),
171
+ ("value_str", models.TextField(blank=True, null=True)),
172
+ (
173
+ "value_upath",
174
+ models.CharField(blank=True, max_length=255, null=True),
175
+ ),
176
+ ("value_datetime", models.DateTimeField(blank=True, null=True)),
177
+ (
178
+ "value_json",
179
+ django.contrib.postgres.fields.jsonb.JSONField(
180
+ blank=True, null=True
181
+ ),
182
+ ),
183
+ (
184
+ "feature",
185
+ lamindb.base.fields.ForeignKey(
186
+ blank=True,
187
+ null=True,
188
+ on_delete=django.db.models.deletion.CASCADE,
189
+ related_name="+",
190
+ to="lamindb.feature",
191
+ ),
192
+ ),
193
+ (
194
+ "param",
195
+ lamindb.base.fields.ForeignKey(
196
+ blank=True,
197
+ null=True,
198
+ on_delete=django.db.models.deletion.CASCADE,
199
+ related_name="+",
200
+ to="lamindb.param",
201
+ ),
202
+ ),
203
+ (
204
+ "space",
205
+ lamindb.base.fields.ForeignKey(
206
+ blank=True,
207
+ db_default=1,
208
+ default=1,
209
+ on_delete=django.db.models.deletion.PROTECT,
210
+ to="lamindb.space",
211
+ ),
212
+ ),
213
+ (
214
+ "tidytable",
215
+ models.ForeignKey(
216
+ on_delete=django.db.models.deletion.CASCADE,
217
+ related_name="data",
218
+ to="lamindb.tidytable",
219
+ ),
220
+ ),
221
+ (
222
+ "value_artifact",
223
+ models.ForeignKey(
224
+ blank=True,
225
+ null=True,
226
+ on_delete=django.db.models.deletion.CASCADE,
227
+ related_name="+",
228
+ to="lamindb.artifact",
229
+ ),
230
+ ),
231
+ (
232
+ "value_collection",
233
+ models.ForeignKey(
234
+ blank=True,
235
+ null=True,
236
+ on_delete=django.db.models.deletion.CASCADE,
237
+ related_name="+",
238
+ to="lamindb.collection",
239
+ ),
240
+ ),
241
+ (
242
+ "value_person",
243
+ models.ForeignKey(
244
+ blank=True,
245
+ null=True,
246
+ on_delete=django.db.models.deletion.CASCADE,
247
+ related_name="+",
248
+ to="lamindb.person",
249
+ ),
250
+ ),
251
+ (
252
+ "value_project",
253
+ models.ForeignKey(
254
+ blank=True,
255
+ null=True,
256
+ on_delete=django.db.models.deletion.CASCADE,
257
+ related_name="+",
258
+ to="lamindb.project",
259
+ ),
260
+ ),
261
+ (
262
+ "value_ulabel",
263
+ models.ForeignKey(
264
+ blank=True,
265
+ null=True,
266
+ on_delete=django.db.models.deletion.CASCADE,
267
+ related_name="+",
268
+ to="lamindb.ulabel",
269
+ ),
270
+ ),
271
+ ],
272
+ ),
273
+ migrations.CreateModel(
274
+ name="RunData",
275
+ fields=[
276
+ (
277
+ "id",
278
+ models.BigAutoField(
279
+ auto_created=True,
280
+ primary_key=True,
281
+ serialize=False,
282
+ verbose_name="ID",
283
+ ),
284
+ ),
285
+ (
286
+ "row",
287
+ lamindb.base.fields.IntegerField(
288
+ blank=True, help_text="Use -1 for result data"
289
+ ),
290
+ ),
291
+ ("value_int", models.BigIntegerField(blank=True, null=True)),
292
+ ("value_float", models.FloatField(blank=True, null=True)),
293
+ ("value_str", models.TextField(blank=True, null=True)),
294
+ (
295
+ "value_upath",
296
+ models.CharField(blank=True, max_length=255, null=True),
297
+ ),
298
+ ("value_datetime", models.DateTimeField(blank=True, null=True)),
299
+ (
300
+ "value_json",
301
+ django.contrib.postgres.fields.jsonb.JSONField(
302
+ blank=True, null=True
303
+ ),
304
+ ),
305
+ (
306
+ "feature",
307
+ lamindb.base.fields.ForeignKey(
308
+ blank=True,
309
+ null=True,
310
+ on_delete=django.db.models.deletion.CASCADE,
311
+ related_name="+",
312
+ to="lamindb.feature",
313
+ ),
314
+ ),
315
+ (
316
+ "param",
317
+ lamindb.base.fields.ForeignKey(
318
+ blank=True,
319
+ null=True,
320
+ on_delete=django.db.models.deletion.CASCADE,
321
+ related_name="+",
322
+ to="lamindb.param",
323
+ ),
324
+ ),
325
+ (
326
+ "run",
327
+ models.ForeignKey(
328
+ on_delete=django.db.models.deletion.CASCADE,
329
+ related_name="data",
330
+ to="lamindb.run",
331
+ ),
332
+ ),
333
+ (
334
+ "space",
335
+ lamindb.base.fields.ForeignKey(
336
+ blank=True,
337
+ db_default=1,
338
+ default=1,
339
+ on_delete=django.db.models.deletion.PROTECT,
340
+ to="lamindb.space",
341
+ ),
342
+ ),
343
+ (
344
+ "value_artifact",
345
+ models.ForeignKey(
346
+ blank=True,
347
+ null=True,
348
+ on_delete=django.db.models.deletion.CASCADE,
349
+ related_name="+",
350
+ to="lamindb.artifact",
351
+ ),
352
+ ),
353
+ (
354
+ "value_collection",
355
+ models.ForeignKey(
356
+ blank=True,
357
+ null=True,
358
+ on_delete=django.db.models.deletion.CASCADE,
359
+ related_name="+",
360
+ to="lamindb.collection",
361
+ ),
362
+ ),
363
+ (
364
+ "value_person",
365
+ models.ForeignKey(
366
+ blank=True,
367
+ null=True,
368
+ on_delete=django.db.models.deletion.CASCADE,
369
+ related_name="+",
370
+ to="lamindb.person",
371
+ ),
372
+ ),
373
+ (
374
+ "value_project",
375
+ models.ForeignKey(
376
+ blank=True,
377
+ null=True,
378
+ on_delete=django.db.models.deletion.CASCADE,
379
+ related_name="+",
380
+ to="lamindb.project",
381
+ ),
382
+ ),
383
+ (
384
+ "value_ulabel",
385
+ models.ForeignKey(
386
+ blank=True,
387
+ null=True,
388
+ on_delete=django.db.models.deletion.CASCADE,
389
+ related_name="+",
390
+ to="lamindb.ulabel",
391
+ ),
392
+ ),
393
+ ],
394
+ options={
395
+ "indexes": [
396
+ models.Index(
397
+ fields=["run", "row"], name="lamindb_run_run_id_c02e71_idx"
398
+ ),
399
+ models.Index(
400
+ fields=["feature"], name="lamindb_run_feature_a37229_idx"
401
+ ),
402
+ models.Index(
403
+ fields=["param"], name="lamindb_run_param_i_cee058_idx"
404
+ ),
405
+ ],
406
+ "constraints": [
407
+ models.CheckConstraint(
408
+ condition=models.Q(
409
+ models.Q(
410
+ ("feature__isnull", False), ("param__isnull", True)
411
+ ),
412
+ models.Q(
413
+ ("feature__isnull", True), ("param__isnull", False)
414
+ ),
415
+ _connector="OR",
416
+ ),
417
+ name="run_data_feature_param_mutex",
418
+ ),
419
+ models.UniqueConstraint(
420
+ fields=("run", "row", "feature", "param"),
421
+ name="run_data_unique",
422
+ ),
423
+ ],
424
+ },
425
+ ),
426
+ migrations.AddIndex(
427
+ model_name="tidytable",
428
+ index=models.Index(fields=["uid"], name="lamindb_tid_uid_3a6e54_idx"),
429
+ ),
430
+ migrations.AddIndex(
431
+ model_name="tidytable",
432
+ index=models.Index(fields=["name"], name="lamindb_tid_name_50c5de_idx"),
433
+ ),
434
+ migrations.AddIndex(
435
+ model_name="tidytabledata",
436
+ index=models.Index(
437
+ fields=["tidytable", "row"], name="lamindb_tid_tidytab_b35a4d_idx"
438
+ ),
439
+ ),
440
+ migrations.AddIndex(
441
+ model_name="tidytabledata",
442
+ index=models.Index(
443
+ fields=["feature"], name="lamindb_tid_feature_5a0b1f_idx"
444
+ ),
445
+ ),
446
+ migrations.AddIndex(
447
+ model_name="tidytabledata",
448
+ index=models.Index(fields=["param"], name="lamindb_tid_param_i_16c884_idx"),
449
+ ),
450
+ migrations.AddConstraint(
451
+ model_name="tidytabledata",
452
+ constraint=models.CheckConstraint(
453
+ condition=models.Q(
454
+ models.Q(("feature__isnull", False), ("param__isnull", True)),
455
+ models.Q(("feature__isnull", True), ("param__isnull", False)),
456
+ _connector="OR",
457
+ ),
458
+ name="tidy_table_data_feature_param_mutex",
459
+ ),
460
+ ),
461
+ migrations.AddConstraint(
462
+ model_name="tidytabledata",
463
+ constraint=models.UniqueConstraint(
464
+ fields=("tidytable", "row", "feature", "param"),
465
+ name="tidy_table_data_unique",
466
+ ),
467
+ ),
468
+ ]