eegdash 0.0.1__py3-none-any.whl → 0.0.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 eegdash might be problematic. Click here for more details.

Files changed (71) hide show
  1. eegdash/data_utils.py +5 -1
  2. eegdash/{aws_ingest.py → script.py} +8 -12
  3. eegdash/signalstore_data_utils.py +352 -2
  4. {eegdash-0.0.1.dist-info → eegdash-0.0.2.dist-info}/METADATA +75 -8
  5. eegdash-0.0.2.dist-info/RECORD +10 -0
  6. {eegdash-0.0.1.dist-info → eegdash-0.0.2.dist-info}/WHEEL +1 -1
  7. eegdash/SignalStore/__init__.py +0 -0
  8. eegdash/SignalStore/signalstore/__init__.py +0 -3
  9. eegdash/SignalStore/signalstore/adapters/read_adapters/abstract_read_adapter.py +0 -13
  10. eegdash/SignalStore/signalstore/adapters/read_adapters/domain_modeling/schema_read_adapter.py +0 -16
  11. eegdash/SignalStore/signalstore/adapters/read_adapters/domain_modeling/vocabulary_read_adapter.py +0 -19
  12. eegdash/SignalStore/signalstore/adapters/read_adapters/handmade_records/excel_study_organizer_read_adapter.py +0 -114
  13. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/axona/axona_read_adapter.py +0 -912
  14. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/ReadIntanSpikeFile.py +0 -140
  15. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/intan_read_adapter.py +0 -29
  16. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhd_format/intanutil/__init__.py +0 -0
  17. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhd_format/intanutil/data_to_result.py +0 -62
  18. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhd_format/intanutil/get_bytes_per_data_block.py +0 -36
  19. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhd_format/intanutil/notch_filter.py +0 -50
  20. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhd_format/intanutil/qstring.py +0 -41
  21. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhd_format/intanutil/read_header.py +0 -135
  22. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhd_format/intanutil/read_one_data_block.py +0 -45
  23. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhd_format/load_intan_rhd_format.py +0 -204
  24. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhs_format/intanutil/__init__.py +0 -0
  25. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhs_format/intanutil/data_to_result.py +0 -60
  26. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhs_format/intanutil/get_bytes_per_data_block.py +0 -37
  27. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhs_format/intanutil/notch_filter.py +0 -50
  28. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhs_format/intanutil/qstring.py +0 -41
  29. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhs_format/intanutil/read_header.py +0 -153
  30. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhs_format/intanutil/read_one_data_block.py +0 -47
  31. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/intan/load_intan_rhs_format/load_intan_rhs_format.py +0 -213
  32. eegdash/SignalStore/signalstore/adapters/read_adapters/recording_acquisitions/neurodata_without_borders/neurodata_without_borders_read_adapter.py +0 -14
  33. eegdash/SignalStore/signalstore/operations/__init__.py +0 -4
  34. eegdash/SignalStore/signalstore/operations/handler_executor.py +0 -22
  35. eegdash/SignalStore/signalstore/operations/handler_factory.py +0 -41
  36. eegdash/SignalStore/signalstore/operations/handlers/base_handler.py +0 -44
  37. eegdash/SignalStore/signalstore/operations/handlers/domain/property_model_handlers.py +0 -79
  38. eegdash/SignalStore/signalstore/operations/handlers/domain/schema_handlers.py +0 -3
  39. eegdash/SignalStore/signalstore/operations/helpers/abstract_helper.py +0 -17
  40. eegdash/SignalStore/signalstore/operations/helpers/neuroscikit_extractor.py +0 -33
  41. eegdash/SignalStore/signalstore/operations/helpers/neuroscikit_rawio.py +0 -165
  42. eegdash/SignalStore/signalstore/operations/helpers/spikeinterface_helper.py +0 -100
  43. eegdash/SignalStore/signalstore/operations/helpers/wrappers/neo_wrappers.py +0 -21
  44. eegdash/SignalStore/signalstore/operations/helpers/wrappers/nwb_wrappers.py +0 -27
  45. eegdash/SignalStore/signalstore/store/__init__.py +0 -8
  46. eegdash/SignalStore/signalstore/store/data_access_objects.py +0 -1181
  47. eegdash/SignalStore/signalstore/store/datafile_adapters.py +0 -131
  48. eegdash/SignalStore/signalstore/store/repositories.py +0 -928
  49. eegdash/SignalStore/signalstore/store/store_errors.py +0 -68
  50. eegdash/SignalStore/signalstore/store/unit_of_work.py +0 -97
  51. eegdash/SignalStore/signalstore/store/unit_of_work_provider.py +0 -67
  52. eegdash/SignalStore/signalstore/utilities/data_adapters/spike_interface_adapters/si_recording.py +0 -1
  53. eegdash/SignalStore/signalstore/utilities/data_adapters/spike_interface_adapters/si_sorter.py +0 -1
  54. eegdash/SignalStore/signalstore/utilities/testing/data_mocks.py +0 -513
  55. eegdash/SignalStore/signalstore/utilities/tools/dataarrays.py +0 -49
  56. eegdash/SignalStore/signalstore/utilities/tools/mongo_records.py +0 -25
  57. eegdash/SignalStore/signalstore/utilities/tools/operation_response.py +0 -78
  58. eegdash/SignalStore/signalstore/utilities/tools/purge_orchestration_response.py +0 -21
  59. eegdash/SignalStore/signalstore/utilities/tools/quantities.py +0 -15
  60. eegdash/SignalStore/signalstore/utilities/tools/strings.py +0 -38
  61. eegdash/SignalStore/signalstore/utilities/tools/time.py +0 -17
  62. eegdash/SignalStore/tests/conftest.py +0 -799
  63. eegdash/SignalStore/tests/data/valid_data/data_arrays/make_fake_data.py +0 -59
  64. eegdash/SignalStore/tests/unit/store/conftest.py +0 -0
  65. eegdash/SignalStore/tests/unit/store/test_data_access_objects.py +0 -1235
  66. eegdash/SignalStore/tests/unit/store/test_repositories.py +0 -1309
  67. eegdash/SignalStore/tests/unit/store/test_unit_of_work.py +0 -7
  68. eegdash/SignalStore/tests/unit/test_ci_cd.py +0 -8
  69. eegdash-0.0.1.dist-info/RECORD +0 -72
  70. {eegdash-0.0.1.dist-info → eegdash-0.0.2.dist-info}/LICENSE +0 -0
  71. {eegdash-0.0.1.dist-info → eegdash-0.0.2.dist-info}/top_level.txt +0 -0
@@ -1,114 +0,0 @@
1
- from signalstore.operations.importers.adapters.abstract_read_adapter import AbstractReadAdapter
2
-
3
- import openpyxl as xl
4
-
5
- class ExcelStudyOrganizerReadAdapter(AbstractReadAdapter):
6
- def __init__(self, path):
7
- self.path = path
8
- self.wb = xl.load_workbook(path)
9
- self.ws = self.wb.active
10
- self.tables = [str(table) for table in self.wb.sheetnames]
11
-
12
- def read(self):
13
- for table in self.tables:
14
- for record in self._get_table_records(table):
15
- yield record
16
-
17
- def read_records(self):
18
- records = []
19
- for table in self.tables:
20
- records.extend(list(self._get_table_records(table)))
21
- return records
22
-
23
- def read_records_by_table(self):
24
- records = {}
25
- for table in self.tables:
26
- records[str(table).lower()] = list(self._get_table_records(table))
27
- return records
28
-
29
- def _classify_table(self, table):
30
- # check if name column is unique
31
- has_unique_keys = self._has_unique_keys(table)
32
-
33
- # check if the table columns include only the name column,
34
- # an attribute column and a value column
35
- is_attr_value_format = self._is_attr_value_format(table)
36
-
37
- if not has_unique_keys and is_attr_value_format:
38
- return 'attribute'
39
- elif has_unique_keys and not is_attr_value_format:
40
- return 'record'
41
- else:
42
- error_string = f'Could not classify table {table}.'
43
- if not has_unique_keys:
44
- error_string += '\nTable does not have unique keys.'
45
- if not is_attr_value_format:
46
- error_string += '\nTable is not in attribute-value format.'
47
- raise StudyOrganizerKeyError(error_string)
48
-
49
- def _has_unique_keys(self, table):
50
- ws = self.wb[table]
51
- keys = [str(cell.value).lower() for cell in ws['A'] if cell.value is not None]
52
- return len(keys) == len(set(keys))
53
-
54
- def _is_attr_value_format(self, table):
55
- ws = self.wb[table]
56
- columns = [str(cell.value).lower() for cell in ws[1]]
57
- if columns[0] == f'name' and columns[1] == 'attribute' and columns[2] == 'value' and len(columns) == 3:
58
- return True
59
- else:
60
- return False
61
-
62
- def _get_table_records(self, table):
63
- table_type = self._classify_table(table)
64
- readers = {'record': self._get_simple_table_records,
65
- 'attribute': self._get_attribute_table_records}
66
- records = readers[table_type](table)
67
- for record in records:
68
- yield record
69
-
70
- def _get_simple_table_records(self, table):
71
- self.ws = self.wb[table]
72
- columns = [str(cell.value).lower() for cell in self.ws[1]]
73
- self._validate_columns(columns, table)
74
- for row in self.ws.iter_rows(min_row=2):
75
- record = {}
76
- for i, column in enumerate(columns):
77
- value = row[i].value
78
- if value is not None:
79
- record[column] = value
80
- if record != {}:
81
- record['type'] = table
82
- yield record
83
-
84
- def _get_attribute_table_records(self, table):
85
- self.ws = self.wb[table]
86
- columns = [str(cell.value).lower() for cell in self.ws[1]]
87
- self._validate_columns(columns, table)
88
- attr_records = []
89
- for row in self.ws.iter_rows(min_row=2):
90
- record = {}
91
- for i, column in enumerate(columns):
92
- record[column] = row[i].value
93
- attr_records.append(record)
94
- records = {}
95
- for attr_record in attr_records:
96
- rkey = attr_record['name']
97
- if rkey not in records.keys() and rkey is not None:
98
- records[rkey] = {'name': rkey, 'type': table}
99
- if attr_record['value'] is not None:
100
- records[rkey][attr_record['attribute']] = attr_record['value']
101
- for record in records.values():
102
- if record != {}:
103
- yield record
104
-
105
- def _validate_columns(self, columns, table_name):
106
- if not self._first_column_is_key(columns, table_name):
107
- raise StudyOrganizerKeyError(f'First column must be a "name" column, but is {columns[0]}.')
108
-
109
- def _first_column_is_key(self, columns, table_name):
110
- return str(columns[0]) == f'name'
111
-
112
-
113
- class StudyOrganizerKeyError(KeyError):
114
- pass