datajoint 0.14.4__py3-none-any.whl → 0.14.5__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 datajoint might be problematic. Click here for more details.
- datajoint/autopopulate.py +74 -11
- datajoint/blob.py +2 -2
- datajoint/condition.py +1 -1
- datajoint/diagram.py +1 -1
- datajoint/preview.py +1 -1
- datajoint/table.py +11 -10
- datajoint/utils.py +2 -0
- datajoint/version.py +1 -1
- {datajoint-0.14.4.dist-info → datajoint-0.14.5.dist-info}/METADATA +23 -24
- {datajoint-0.14.4.dist-info → datajoint-0.14.5.dist-info}/RECORD +14 -14
- {datajoint-0.14.4.dist-info → datajoint-0.14.5.dist-info}/WHEEL +1 -1
- {datajoint-0.14.4.dist-info → datajoint-0.14.5.dist-info}/entry_points.txt +0 -0
- {datajoint-0.14.4.dist-info → datajoint-0.14.5.dist-info}/licenses/LICENSE.txt +0 -0
- {datajoint-0.14.4.dist-info → datajoint-0.14.5.dist-info}/top_level.txt +0 -0
datajoint/autopopulate.py
CHANGED
|
@@ -95,13 +95,76 @@ class AutoPopulate:
|
|
|
95
95
|
|
|
96
96
|
def make(self, key):
|
|
97
97
|
"""
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
This method must be implemented by derived classes to perform automated computation.
|
|
99
|
+
The method must implement the following three steps:
|
|
100
|
+
|
|
101
|
+
1. Fetch data from tables above in the dependency hierarchy, restricted by the given key.
|
|
102
|
+
2. Compute secondary attributes based on the fetched data.
|
|
103
|
+
3. Insert the new tuple(s) into the current table.
|
|
104
|
+
|
|
105
|
+
The method can be implemented either as:
|
|
106
|
+
(a) Regular method: All three steps are performed in a single database transaction.
|
|
107
|
+
The method must return None.
|
|
108
|
+
(b) Generator method:
|
|
109
|
+
The make method is split into three functions:
|
|
110
|
+
- `make_fetch`: Fetches data from the parent tables.
|
|
111
|
+
- `make_compute`: Computes secondary attributes based on the fetched data.
|
|
112
|
+
- `make_insert`: Inserts the computed data into the current table.
|
|
113
|
+
|
|
114
|
+
Then populate logic is executes as follows:
|
|
115
|
+
|
|
116
|
+
<pseudocode>
|
|
117
|
+
fetched_data1 = self.make_fetch(key)
|
|
118
|
+
computed_result = self.make_compute(key, *fetched_data1)
|
|
119
|
+
begin transaction:
|
|
120
|
+
fetched_data2 = self.make_fetch(key)
|
|
121
|
+
if fetched_data1 != fetched_data2:
|
|
122
|
+
cancel transaction
|
|
123
|
+
else:
|
|
124
|
+
self.make_insert(key, *computed_result)
|
|
125
|
+
commit_transaction
|
|
126
|
+
<pseudocode>
|
|
127
|
+
|
|
128
|
+
Importantly, the output of make_fetch is a tuple that serves as the input into `make_compute`.
|
|
129
|
+
The output of `make_compute` is a tuple that serves as the input into `make_insert`.
|
|
130
|
+
|
|
131
|
+
The functionality must be strictly divided between these three methods:
|
|
132
|
+
- All database queries must be completed in `make_fetch`.
|
|
133
|
+
- All computation must be completed in `make_compute`.
|
|
134
|
+
- All database inserts must be completed in `make_insert`.
|
|
135
|
+
|
|
136
|
+
DataJoint may programmatically enforce this separation in the future.
|
|
137
|
+
|
|
138
|
+
:param key: The primary key value used to restrict the data fetching.
|
|
139
|
+
:raises NotImplementedError: If the derived class does not implement the required methods.
|
|
101
140
|
"""
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
141
|
+
|
|
142
|
+
if not (
|
|
143
|
+
hasattr(self, "make_fetch")
|
|
144
|
+
and hasattr(self, "make_insert")
|
|
145
|
+
and hasattr(self, "make_compute")
|
|
146
|
+
):
|
|
147
|
+
# user must implement `make`
|
|
148
|
+
raise NotImplementedError(
|
|
149
|
+
"Subclasses of AutoPopulate must implement the method `make` "
|
|
150
|
+
"or (`make_fetch` + `make_compute` + `make_insert`)"
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
# User has implemented `_fetch`, `_compute`, and `_insert` methods instead
|
|
154
|
+
|
|
155
|
+
# Step 1: Fetch data from parent tables
|
|
156
|
+
fetched_data = self.make_fetch(key) # fetched_data is a tuple
|
|
157
|
+
computed_result = yield fetched_data # passed as input into make_compute
|
|
158
|
+
|
|
159
|
+
# Step 2: If computed result is not passed in, compute the result
|
|
160
|
+
if computed_result is None:
|
|
161
|
+
# this is only executed in the first invocation
|
|
162
|
+
computed_result = self.make_compute(key, *fetched_data)
|
|
163
|
+
yield computed_result # this is passed to the second invocation of make
|
|
164
|
+
|
|
165
|
+
# Step 3: Insert the computed result into the current table.
|
|
166
|
+
self.make_insert(key, *computed_result)
|
|
167
|
+
yield
|
|
105
168
|
|
|
106
169
|
@property
|
|
107
170
|
def target(self):
|
|
@@ -203,9 +266,8 @@ class AutoPopulate:
|
|
|
203
266
|
self.connection.schemas[self.target.database].jobs if reserve_jobs else None
|
|
204
267
|
)
|
|
205
268
|
|
|
206
|
-
# define and set up signal handler for SIGTERM:
|
|
207
269
|
if reserve_jobs:
|
|
208
|
-
|
|
270
|
+
# Define a signal handler for SIGTERM
|
|
209
271
|
def handler(signum, frame):
|
|
210
272
|
logger.info("Populate terminated by SIGTERM")
|
|
211
273
|
raise SystemExit("SIGTERM received")
|
|
@@ -350,9 +412,10 @@ class AutoPopulate:
|
|
|
350
412
|
!= deepdiff.DeepHash(fetched_data, ignore_iterable_order=False)[
|
|
351
413
|
fetched_data
|
|
352
414
|
]
|
|
353
|
-
): #
|
|
354
|
-
|
|
355
|
-
|
|
415
|
+
): # raise error if fetched data has changed
|
|
416
|
+
raise DataJointError(
|
|
417
|
+
"Referential integrity failed! The `make_fetch` data has changed"
|
|
418
|
+
)
|
|
356
419
|
gen.send(computed_result) # insert
|
|
357
420
|
|
|
358
421
|
except (KeyboardInterrupt, SystemExit, Exception) as error:
|
datajoint/blob.py
CHANGED
|
@@ -140,7 +140,7 @@ class Blob:
|
|
|
140
140
|
"S": self.read_struct, # matlab struct array
|
|
141
141
|
"C": self.read_cell_array, # matlab cell array
|
|
142
142
|
# basic data types
|
|
143
|
-
"\
|
|
143
|
+
"\xff": self.read_none, # None
|
|
144
144
|
"\x01": self.read_tuple, # a Sequence (e.g. tuple)
|
|
145
145
|
"\x02": self.read_list, # a MutableSequence (e.g. list)
|
|
146
146
|
"\x03": self.read_set, # a Set
|
|
@@ -401,7 +401,7 @@ class Blob:
|
|
|
401
401
|
|
|
402
402
|
@staticmethod
|
|
403
403
|
def pack_none():
|
|
404
|
-
return b"\
|
|
404
|
+
return b"\xff"
|
|
405
405
|
|
|
406
406
|
def read_tuple(self):
|
|
407
407
|
return tuple(
|
datajoint/condition.py
CHANGED
datajoint/diagram.py
CHANGED
|
@@ -35,7 +35,7 @@ if not diagram_active:
|
|
|
35
35
|
Entity relationship diagram, currently disabled due to the lack of required packages: matplotlib and pygraphviz.
|
|
36
36
|
|
|
37
37
|
To enable Diagram feature, please install both matplotlib and pygraphviz. For instructions on how to install
|
|
38
|
-
these two packages, refer to https://datajoint.com/
|
|
38
|
+
these two packages, refer to https://docs.datajoint.com/core/datajoint-python/0.14/client/install/
|
|
39
39
|
"""
|
|
40
40
|
|
|
41
41
|
def __init__(self, *args, **kwargs):
|
datajoint/preview.py
CHANGED
datajoint/table.py
CHANGED
|
@@ -137,7 +137,7 @@ class Table(QueryExpression):
|
|
|
137
137
|
sql, external_stores = alter(self.definition, old_definition, context)
|
|
138
138
|
if not sql:
|
|
139
139
|
if prompt:
|
|
140
|
-
logger.
|
|
140
|
+
logger.warning("Nothing to alter.")
|
|
141
141
|
else:
|
|
142
142
|
sql = "ALTER TABLE {tab}\n\t".format(
|
|
143
143
|
tab=self.full_table_name
|
|
@@ -520,7 +520,13 @@ class Table(QueryExpression):
|
|
|
520
520
|
try:
|
|
521
521
|
delete_count = table.delete_quick(get_count=True)
|
|
522
522
|
except IntegrityError as error:
|
|
523
|
-
match = foreign_key_error_regexp.match(error.args[0])
|
|
523
|
+
match = foreign_key_error_regexp.match(error.args[0])
|
|
524
|
+
if match is None:
|
|
525
|
+
raise DataJointError(
|
|
526
|
+
"Cascading deletes failed because the error message is missing foreign key information."
|
|
527
|
+
"Make sure you have REFERENCES privilege to all dependent tables."
|
|
528
|
+
) from None
|
|
529
|
+
match = match.groupdict()
|
|
524
530
|
# if schema name missing, use table
|
|
525
531
|
if "`.`" not in match["child"]:
|
|
526
532
|
match["child"] = "{}.{}".format(
|
|
@@ -643,7 +649,7 @@ class Table(QueryExpression):
|
|
|
643
649
|
# Confirm and commit
|
|
644
650
|
if delete_count == 0:
|
|
645
651
|
if safemode:
|
|
646
|
-
logger.
|
|
652
|
+
logger.warning("Nothing to delete.")
|
|
647
653
|
if transaction:
|
|
648
654
|
self.connection.cancel_transaction()
|
|
649
655
|
elif not transaction:
|
|
@@ -653,12 +659,12 @@ class Table(QueryExpression):
|
|
|
653
659
|
if transaction:
|
|
654
660
|
self.connection.commit_transaction()
|
|
655
661
|
if safemode:
|
|
656
|
-
logger.info("
|
|
662
|
+
logger.info("Delete committed.")
|
|
657
663
|
else:
|
|
658
664
|
if transaction:
|
|
659
665
|
self.connection.cancel_transaction()
|
|
660
666
|
if safemode:
|
|
661
|
-
logger.
|
|
667
|
+
logger.warning("Delete cancelled")
|
|
662
668
|
return delete_count
|
|
663
669
|
|
|
664
670
|
def drop_quick(self):
|
|
@@ -726,11 +732,6 @@ class Table(QueryExpression):
|
|
|
726
732
|
).fetchone()
|
|
727
733
|
return ret["Data_length"] + ret["Index_length"]
|
|
728
734
|
|
|
729
|
-
def show_definition(self):
|
|
730
|
-
raise AttributeError(
|
|
731
|
-
"show_definition is deprecated. Use the describe method instead."
|
|
732
|
-
)
|
|
733
|
-
|
|
734
735
|
def describe(self, context=None, printout=False):
|
|
735
736
|
"""
|
|
736
737
|
:return: the definition string for the query using DataJoint DDL.
|
datajoint/utils.py
CHANGED
datajoint/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# version bump auto managed by Github Actions:
|
|
2
2
|
# label_prs.yaml(prep), release.yaml(bump), post_release.yaml(edit)
|
|
3
3
|
# manually set this version will be eventually overwritten by the above actions
|
|
4
|
-
__version__ = "0.14.
|
|
4
|
+
__version__ = "0.14.5"
|
|
5
5
|
|
|
6
6
|
assert len(__version__) <= 10 # The log table limits version to the 10 characters
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datajoint
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.5
|
|
4
4
|
Summary: DataJoint for Python is a framework for scientific workflow management based on relational principles. DataJoint is built on the foundation of the relational data model and prescribes a consistent method for organizing, populating, computing, and querying data.
|
|
5
5
|
Author: Raphael Guzman, Edgar Walker
|
|
6
6
|
Author-email: Dimitri Yatsenko <dimitri@datajoint.com>, DataJoint Contributors <support@datajoint.com>
|
|
@@ -510,8 +510,8 @@ License: GNU LESSER GENERAL PUBLIC LICENSE
|
|
|
510
510
|
|
|
511
511
|
That's all there is to it!
|
|
512
512
|
|
|
513
|
-
Project-URL: Homepage, https://datajoint.com/
|
|
514
|
-
Project-URL: Documentation, https://datajoint.com/
|
|
513
|
+
Project-URL: Homepage, https://docs.datajoint.com/
|
|
514
|
+
Project-URL: Documentation, https://docs.datajoint.com/
|
|
515
515
|
Project-URL: Repository, https://github.com/datajoint/datajoint-python
|
|
516
516
|
Project-URL: Bug Tracker, https://github.com/datajoint/datajoint-python/issues
|
|
517
517
|
Project-URL: Release Notes, https://github.com/datajoint/datajoint-python/releases
|
|
@@ -589,8 +589,8 @@ Dynamic: license-file
|
|
|
589
589
|
<tr>
|
|
590
590
|
<td>Since Release</td>
|
|
591
591
|
<td>
|
|
592
|
-
<a id="commit-since-release-link" href="https://github.com/datajoint/datajoint-python/compare/v0.14.
|
|
593
|
-
<img id="commit-since-release-img" src="https://img.shields.io/github/commits-since/datajoint/datajoint-python/v0.14.
|
|
592
|
+
<a id="commit-since-release-link" href="https://github.com/datajoint/datajoint-python/compare/v0.14.5...master">
|
|
593
|
+
<img id="commit-since-release-img" src="https://img.shields.io/github/commits-since/datajoint/datajoint-python/v0.14.5?color=red" alt="commit since last release" />
|
|
594
594
|
</a>
|
|
595
595
|
</td>
|
|
596
596
|
</tr>
|
|
@@ -613,7 +613,7 @@ Dynamic: license-file
|
|
|
613
613
|
<tr>
|
|
614
614
|
<td>Doc Status</td>
|
|
615
615
|
<td>
|
|
616
|
-
<a href="https://datajoint.com
|
|
616
|
+
<a href="https://docs.datajoint.com">
|
|
617
617
|
<img src="https://github.com/datajoint/datajoint-python/actions/workflows/pages/pages-build-deployment/badge.svg" alt="doc status" />
|
|
618
618
|
</a>
|
|
619
619
|
</td>
|
|
@@ -627,12 +627,12 @@ Dynamic: license-file
|
|
|
627
627
|
</td>
|
|
628
628
|
</tr>
|
|
629
629
|
<tr>
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
630
|
+
<td>Developer Chat</td>
|
|
631
|
+
<td>
|
|
632
|
+
<a href="https://datajoint.slack.com/">
|
|
633
633
|
<img src="https://img.shields.io/badge/slack-datajoint-purple.svg" alt="datajoint slack"/>
|
|
634
|
-
|
|
635
|
-
|
|
634
|
+
</a>
|
|
635
|
+
</td>
|
|
636
636
|
</tr>
|
|
637
637
|
<tr>
|
|
638
638
|
<td>License</td>
|
|
@@ -643,21 +643,20 @@ Dynamic: license-file
|
|
|
643
643
|
</td>
|
|
644
644
|
</tr>
|
|
645
645
|
<tr>
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
646
|
+
<td>Citation</td>
|
|
647
|
+
<td>
|
|
648
|
+
<a href="https://doi.org/10.1101/031658">
|
|
649
|
+
<img src="https://img.shields.io/badge/DOI-10.1101/bioRxiv.031658-B31B1B.svg" alt="bioRxiv">
|
|
650
|
+
</a>
|
|
651
651
|
<br>
|
|
652
652
|
<a href="https://doi.org/10.5281/zenodo.6829062">
|
|
653
653
|
<img src="https://zenodo.org/badge/DOI/10.5281/zenodo.6829062.svg" alt="zenodo">
|
|
654
|
-
|
|
655
|
-
|
|
654
|
+
</a>
|
|
655
|
+
</td>
|
|
656
656
|
</tr>
|
|
657
657
|
|
|
658
658
|
</table>
|
|
659
659
|
|
|
660
|
-
|
|
661
660
|
DataJoint for Python is a framework for scientific workflow management based on
|
|
662
661
|
relational principles. DataJoint is built on the foundation of the relational data
|
|
663
662
|
model and prescribes a consistent method for organizing, populating, computing, and
|
|
@@ -669,7 +668,7 @@ volumes of data streaming from regular experiments. Starting in 2011, DataJoint
|
|
|
669
668
|
been available as an open-source project adopted by other labs and improved through
|
|
670
669
|
contributions from several developers.
|
|
671
670
|
Presently, the primary developer of DataJoint open-source software is the company
|
|
672
|
-
DataJoint (https://datajoint.com).
|
|
671
|
+
DataJoint (<https://datajoint.com>).
|
|
673
672
|
|
|
674
673
|
## Data Pipeline Example
|
|
675
674
|
|
|
@@ -691,13 +690,13 @@ DataJoint (https://datajoint.com).
|
|
|
691
690
|
pip install datajoint
|
|
692
691
|
```
|
|
693
692
|
|
|
694
|
-
- [Documentation & Tutorials](https://datajoint.com/
|
|
693
|
+
- [Documentation & Tutorials](https://docs.datajoint.com/core/datajoint-python/)
|
|
695
694
|
|
|
696
695
|
- [Interactive Tutorials](https://github.com/datajoint/datajoint-tutorials) on GitHub Codespaces
|
|
697
696
|
|
|
698
|
-
- [DataJoint Elements](https://datajoint.com/
|
|
697
|
+
- [DataJoint Elements](https://docs.datajoint.com/elements/) - Catalog of example pipelines for neuroscience experiments
|
|
699
698
|
|
|
700
699
|
- Contribute
|
|
701
|
-
- [Contribution Guidelines](https://datajoint.com/
|
|
700
|
+
- [Contribution Guidelines](https://docs.datajoint.com/about/contribute/)
|
|
702
701
|
|
|
703
|
-
- [Developer Guide](https://datajoint.com/
|
|
702
|
+
- [Developer Guide](https://docs.datajoint.com/core/datajoint-python/latest/develop/)
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
datajoint/__init__.py,sha256=uKCJiD2Vx-smjvfEPVBvxE3VXfm27WfHwKmF2s0r31w,2048
|
|
2
2
|
datajoint/admin.py,sha256=4FEQxrFtWz3Q9h9OCvytDsnx-W6HxXgsjF-TypHfRd8,4500
|
|
3
3
|
datajoint/attribute_adapter.py,sha256=bMcTyb0hIPb6CMVaevZ3FUMkWPbzMCoIj8gJvkQ8tI8,2333
|
|
4
|
-
datajoint/autopopulate.py,sha256=
|
|
5
|
-
datajoint/blob.py,sha256=
|
|
4
|
+
datajoint/autopopulate.py,sha256=ZhWmIcuxpW9Dd_vYUMalFeAccd9M_y7PQ0w7RKeye0I,18681
|
|
5
|
+
datajoint/blob.py,sha256=0XK_UBesZja-UjDOPY0gNLVURaXcTCN-rDWTc2VbEXU,21968
|
|
6
6
|
datajoint/cli.py,sha256=4ZZAtAn3_7bqi2hMbn_I541RIWDEcwHOwqZyEvHbr0E,2065
|
|
7
|
-
datajoint/condition.py,sha256=
|
|
7
|
+
datajoint/condition.py,sha256=zZhq2F0FslZkp2oiMvaCee0FGxxd9mlvZPVeDvM69SU,11848
|
|
8
8
|
datajoint/connection.py,sha256=zOh3Akvxlb7WeciTFQNuUBhWxhziwWReGCRVGDxZ1z8,15984
|
|
9
9
|
datajoint/declare.py,sha256=rXtH8riupNGXWIouxLvwta9Zwm4I2quTktBrP0fPZTA,21106
|
|
10
10
|
datajoint/dependencies.py,sha256=LDMVZ7tKZWrh7mbjECk73Jk1gXSxVOsLefwJSRXe3vg,8413
|
|
11
|
-
datajoint/diagram.py,sha256=
|
|
11
|
+
datajoint/diagram.py,sha256=3a5Wrz9cjbOp4YD7C-fRsvZY1zqGLw8g6qso16ml-4E,18027
|
|
12
12
|
datajoint/errors.py,sha256=FuD5QO-cIt4fNf8BSmjwypuM-k0P3qNYcjjuhPiE7jM,3337
|
|
13
13
|
datajoint/expression.py,sha256=HKS-Gt1HbOs1hgwFHci2d2MbQgecZWaKtJtE1HaPVSA,39098
|
|
14
14
|
datajoint/external.py,sha256=9p0M81zR8ifks2_Q4KMP9Rq14bqAAZJGHLXR5OiMjFU,19127
|
|
@@ -18,17 +18,17 @@ datajoint/heading.py,sha256=LJLIYMT2hwT2XgNbxOKBUcU3fcyuHpD2J5l9nWDI05k,19417
|
|
|
18
18
|
datajoint/jobs.py,sha256=T1m921P_QOo7keY9bm1RUE0hvZi2G4VWhb4zgTpMWmw,5630
|
|
19
19
|
datajoint/logging.py,sha256=n_dRV3CuTef7wYrVIbhSm9pAKDMWm_XD4oOJ1kMIen4,687
|
|
20
20
|
datajoint/plugin.py,sha256=VA0Wc8gxDMB1cy4MoBN40TbrkfWD-Cqi_j1JQN-HXYA,1555
|
|
21
|
-
datajoint/preview.py,sha256=
|
|
21
|
+
datajoint/preview.py,sha256=woHXMVVkW1E9AkAoNjRQdcCkcaW4svB0oHrL4oEXCNE,4806
|
|
22
22
|
datajoint/s3.py,sha256=-BU65VYY3I1l9wD1JeIotfOr-PQ5BzT85fbFE6iYtIY,4083
|
|
23
23
|
datajoint/schemas.py,sha256=xRY5OMlBV9Qup22CFP5gwcvRCOnOUbzNSn7EGtGHe40,20063
|
|
24
24
|
datajoint/settings.py,sha256=fJ5A7HR8aTb0HvN4GQ4eLwtmQxdyB11l6sMiguaQoz8,9406
|
|
25
|
-
datajoint/table.py,sha256=
|
|
25
|
+
datajoint/table.py,sha256=vVzeec-z1tFKYFDWCh6ArJi5sysdNTJWaTteAavwIsE,45185
|
|
26
26
|
datajoint/user_tables.py,sha256=vcnO-8NET543LwlzvI6y8yTmw-UHMUe7VuMk1EKp-8I,6941
|
|
27
|
-
datajoint/utils.py,sha256=
|
|
28
|
-
datajoint/version.py,sha256=
|
|
29
|
-
datajoint-0.14.
|
|
30
|
-
datajoint-0.14.
|
|
31
|
-
datajoint-0.14.
|
|
32
|
-
datajoint-0.14.
|
|
33
|
-
datajoint-0.14.
|
|
34
|
-
datajoint-0.14.
|
|
27
|
+
datajoint/utils.py,sha256=m-tnRa65dkwdCV6qqUG7kYHsIaFJGPSVr22QpHzeCZc,4576
|
|
28
|
+
datajoint/version.py,sha256=0J3S_RIdt9bVt0MteMQlEy0auezr5cWmUqFiP90qpzw,302
|
|
29
|
+
datajoint-0.14.5.dist-info/licenses/LICENSE.txt,sha256=7VXUyqv9idbgJNkr3OFy0vfuSqZa3JHmC2TpSavBpss,26444
|
|
30
|
+
datajoint-0.14.5.dist-info/METADATA,sha256=vnpbGSX4jahjFspaxbLoq972sKd5qKxi4hl_r_iU5UA,37822
|
|
31
|
+
datajoint-0.14.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
32
|
+
datajoint-0.14.5.dist-info/entry_points.txt,sha256=RLoyQD_Hz9HdlKG-ei0SlHDxuaTpasDJ6gZcvj9iZG0,71
|
|
33
|
+
datajoint-0.14.5.dist-info/top_level.txt,sha256=GLPeIbF_-lu3lpcSazCl0KUco1v2rr5uyUvieYAniLU,10
|
|
34
|
+
datajoint-0.14.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|