figpack 0.2.5__py3-none-any.whl → 0.2.7__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 figpack might be problematic. Click here for more details.

@@ -5,7 +5,7 @@
5
5
  <link rel="icon" type="image/png" href="./assets/neurosift-logo-CLsuwLMO.png" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>figpack figure</title>
8
- <script type="module" crossorigin src="./assets/index-CrYQmIda.js"></script>
8
+ <script type="module" crossorigin src="./assets/index-CTBd5_Gw.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="./assets/index-Cmae55E4.css">
10
10
  </head>
11
11
  <body>
@@ -77,32 +77,42 @@ class Autocorrelograms(FigpackView):
77
77
  group.attrs["view_type"] = "Autocorrelograms"
78
78
 
79
79
  # Store the number of autocorrelograms
80
- group.attrs["num_autocorrelograms"] = len(self.autocorrelograms)
80
+ num_autocorrelograms = len(self.autocorrelograms)
81
+ group.attrs["num_autocorrelograms"] = num_autocorrelograms
81
82
 
82
- # Store metadata for each autocorrelogram
83
+ if num_autocorrelograms == 0:
84
+ return
85
+
86
+ # Get dimensions from first autocorrelogram
87
+ num_bins = len(self.autocorrelograms[0].bin_counts)
88
+
89
+ # Store bin edges (same for all autocorrelograms)
90
+ group.create_dataset(
91
+ "bin_edges_sec",
92
+ data=self.autocorrelograms[0].bin_edges_sec,
93
+ dtype=np.float32,
94
+ )
95
+
96
+ # Create 2D array for all bin counts
97
+ bin_counts = np.zeros((num_autocorrelograms, num_bins), dtype=np.int32)
98
+
99
+ # Store metadata for each autocorrelogram and populate bin counts array
83
100
  autocorrelogram_metadata = []
84
101
  for i, autocorr in enumerate(self.autocorrelograms):
85
- autocorr_name = f"autocorrelogram_{i}"
86
-
87
- # Store metadata
88
102
  metadata = {
89
- "name": autocorr_name,
90
103
  "unit_id": str(autocorr.unit_id),
91
- "num_bins": len(autocorr.bin_counts),
104
+ "index": i, # Store index to map to bin_counts array
105
+ "num_bins": num_bins,
92
106
  }
93
107
  autocorrelogram_metadata.append(metadata)
94
-
95
- # Create arrays for this autocorrelogram
96
- group.create_dataset(
97
- f"{autocorr_name}/bin_edges_sec",
98
- data=autocorr.bin_edges_sec,
99
- dtype=np.float32,
100
- )
101
- group.create_dataset(
102
- f"{autocorr_name}/bin_counts",
103
- data=autocorr.bin_counts,
104
- dtype=np.int32,
105
- )
108
+ bin_counts[i] = autocorr.bin_counts
109
+
110
+ # Store the bin counts as a single 2D dataset
111
+ group.create_dataset(
112
+ "bin_counts",
113
+ data=bin_counts,
114
+ dtype=np.int32,
115
+ )
106
116
 
107
117
  # Store the autocorrelogram metadata
108
118
  group.attrs["autocorrelograms"] = autocorrelogram_metadata
@@ -90,33 +90,43 @@ class CrossCorrelograms(FigpackView):
90
90
  group.attrs["hide_unit_selector"] = self.hide_unit_selector
91
91
 
92
92
  # Store the number of cross-correlograms
93
- group.attrs["num_cross_correlograms"] = len(self.cross_correlograms)
93
+ num_cross_correlograms = len(self.cross_correlograms)
94
+ group.attrs["num_cross_correlograms"] = num_cross_correlograms
94
95
 
95
- # Store metadata for each cross-correlogram
96
+ if num_cross_correlograms == 0:
97
+ return
98
+
99
+ # Get dimensions from first cross-correlogram
100
+ num_bins = len(self.cross_correlograms[0].bin_counts)
101
+
102
+ # Store bin edges (same for all cross-correlograms)
103
+ group.create_dataset(
104
+ "bin_edges_sec",
105
+ data=self.cross_correlograms[0].bin_edges_sec,
106
+ dtype=np.float32,
107
+ )
108
+
109
+ # Create 2D array for all bin counts
110
+ bin_counts = np.zeros((num_cross_correlograms, num_bins), dtype=np.int32)
111
+
112
+ # Store metadata for each cross-correlogram and populate bin counts array
96
113
  cross_correlogram_metadata = []
97
114
  for i, cross_corr in enumerate(self.cross_correlograms):
98
- cross_corr_name = f"cross_correlogram_{i}"
99
-
100
- # Store metadata
101
115
  metadata = {
102
- "name": cross_corr_name,
103
116
  "unit_id1": str(cross_corr.unit_id1),
104
117
  "unit_id2": str(cross_corr.unit_id2),
105
- "num_bins": len(cross_corr.bin_counts),
118
+ "index": i, # Store index to map to bin_counts array
119
+ "num_bins": num_bins,
106
120
  }
107
121
  cross_correlogram_metadata.append(metadata)
108
-
109
- # Create arrays for this cross-correlogram
110
- group.create_dataset(
111
- f"{cross_corr_name}/bin_edges_sec",
112
- data=cross_corr.bin_edges_sec,
113
- dtype=np.float32,
114
- )
115
- group.create_dataset(
116
- f"{cross_corr_name}/bin_counts",
117
- data=cross_corr.bin_counts,
118
- dtype=np.int32,
119
- )
122
+ bin_counts[i] = cross_corr.bin_counts
123
+
124
+ # Store the bin counts as a single 2D dataset
125
+ group.create_dataset(
126
+ "bin_counts",
127
+ data=bin_counts,
128
+ dtype=np.int32,
129
+ )
120
130
 
121
131
  # Store the cross-correlogram metadata
122
132
  group.attrs["cross_correlograms"] = cross_correlogram_metadata
@@ -3,6 +3,7 @@ UnitsTable view for figpack - displays a table of units with their properties
3
3
  """
4
4
 
5
5
  from typing import List, Optional
6
+ import json
6
7
 
7
8
  import numpy as np
8
9
  import zarr
@@ -58,13 +59,31 @@ class UnitsTable(FigpackView):
58
59
  columns_metadata = [col.to_dict() for col in self.columns]
59
60
  group.attrs["columns"] = columns_metadata
60
61
 
61
- # Store rows metadata
62
- rows_metadata = [row.to_dict() for row in self.rows]
63
- group.attrs["rows"] = rows_metadata
62
+ # Store rows data in a zarr array
63
+ rows_data = [row.to_dict() for row in self.rows]
64
+ rows_json = json.dumps(rows_data).encode("utf-8")
65
+ rows_array = np.frombuffer(rows_json, dtype=np.uint8)
66
+ group.create_dataset(
67
+ "rows_data",
68
+ data=rows_array,
69
+ dtype=np.uint8,
70
+ chunks=True,
71
+ compressor=zarr.Blosc(cname="zstd", clevel=3, shuffle=zarr.Blosc.SHUFFLE),
72
+ )
73
+ group.attrs["rows_data_size"] = len(rows_json)
64
74
 
65
- # Store similarity scores if provided
75
+ # Store similarity scores in a zarr array
66
76
  if self.similarity_scores:
67
- similarity_scores_metadata = [
68
- score.to_dict() for score in self.similarity_scores
69
- ]
70
- group.attrs["similarityScores"] = similarity_scores_metadata
77
+ scores_data = [score.to_dict() for score in self.similarity_scores]
78
+ scores_json = json.dumps(scores_data).encode("utf-8")
79
+ scores_array = np.frombuffer(scores_json, dtype=np.uint8)
80
+ group.create_dataset(
81
+ "similarity_scores_data",
82
+ data=scores_array,
83
+ dtype=np.uint8,
84
+ chunks=True,
85
+ compressor=zarr.Blosc(
86
+ cname="zstd", clevel=3, shuffle=zarr.Blosc.SHUFFLE
87
+ ),
88
+ )
89
+ group.attrs["similarity_scores_data_size"] = len(scores_json)
@@ -0,0 +1,109 @@
1
+ """
2
+ DataFrame view for figpack - displays pandas DataFrames as interactive tables
3
+ """
4
+
5
+ import json
6
+ from typing import Any, Dict, Union
7
+
8
+ import numpy as np
9
+ import pandas as pd
10
+ import zarr
11
+
12
+ from ..core.figpack_view import FigpackView
13
+
14
+
15
+ class DataFrame(FigpackView):
16
+ """
17
+ A DataFrame visualization component for displaying pandas DataFrames as interactive tables
18
+ """
19
+
20
+ def __init__(self, df: pd.DataFrame):
21
+ """
22
+ Initialize a DataFrame view
23
+
24
+ Args:
25
+ df: The pandas DataFrame to display
26
+
27
+ Raises:
28
+ ValueError: If df is not a pandas DataFrame
29
+ """
30
+ if not isinstance(df, pd.DataFrame):
31
+ raise ValueError("df must be a pandas DataFrame")
32
+
33
+ self.df = df
34
+
35
+ def _write_to_zarr_group(self, group: zarr.Group) -> None:
36
+ """
37
+ Write the DataFrame data to a Zarr group
38
+
39
+ Args:
40
+ group: Zarr group to write data into
41
+ """
42
+ # Set the view type
43
+ group.attrs["view_type"] = "DataFrame"
44
+
45
+ try:
46
+ # Convert DataFrame to CSV string
47
+ csv_string = self.df.to_csv(index=False)
48
+
49
+ # Convert CSV string to bytes and store in numpy array
50
+ csv_bytes = csv_string.encode("utf-8")
51
+ csv_array = np.frombuffer(csv_bytes, dtype=np.uint8)
52
+
53
+ # Store the CSV data as compressed array
54
+ group.create_dataset(
55
+ "csv_data",
56
+ data=csv_array,
57
+ dtype=np.uint8,
58
+ chunks=True,
59
+ compressor=zarr.Blosc(
60
+ cname="zstd", clevel=3, shuffle=zarr.Blosc.SHUFFLE
61
+ ),
62
+ )
63
+
64
+ # Store metadata about the DataFrame
65
+ group.attrs["data_size"] = len(csv_bytes)
66
+ group.attrs["row_count"] = len(self.df)
67
+ group.attrs["column_count"] = len(self.df.columns)
68
+
69
+ # Store column information
70
+ column_info = []
71
+ for col in self.df.columns:
72
+ dtype_str = str(self.df[col].dtype)
73
+ # Simplify dtype names for frontend
74
+ if dtype_str.startswith("int"):
75
+ simple_dtype = "integer"
76
+ elif dtype_str.startswith("float"):
77
+ simple_dtype = "float"
78
+ elif dtype_str.startswith("bool"):
79
+ simple_dtype = "boolean"
80
+ elif dtype_str.startswith("datetime"):
81
+ simple_dtype = "datetime"
82
+ elif dtype_str == "object":
83
+ # Check if it's actually strings
84
+ if self.df[col].dtype == "object":
85
+ simple_dtype = "string"
86
+ else:
87
+ simple_dtype = "object"
88
+ else:
89
+ simple_dtype = "string"
90
+
91
+ column_info.append(
92
+ {"name": str(col), "dtype": dtype_str, "simple_dtype": simple_dtype}
93
+ )
94
+
95
+ # Store column info as JSON string
96
+ column_info_json = json.dumps(column_info)
97
+ group.attrs["column_info"] = column_info_json
98
+
99
+ except Exception as e:
100
+ # If DataFrame processing fails, store error information
101
+ group.attrs["error"] = f"Failed to process DataFrame: {str(e)}"
102
+ group.attrs["row_count"] = 0
103
+ group.attrs["column_count"] = 0
104
+ group.attrs["data_size"] = 0
105
+ group.attrs["column_info"] = "[]"
106
+ # Create empty array as placeholder
107
+ group.create_dataset(
108
+ "csv_data", data=np.array([], dtype=np.uint8), dtype=np.uint8
109
+ )
figpack/views/Markdown.py CHANGED
@@ -2,6 +2,7 @@
2
2
  Markdown view for figpack - displays markdown content
3
3
  """
4
4
 
5
+ import numpy as np
5
6
  import zarr
6
7
 
7
8
  from ..core.figpack_view import FigpackView
@@ -31,5 +32,14 @@ class Markdown(FigpackView):
31
32
  # Set the view type
32
33
  group.attrs["view_type"] = "Markdown"
33
34
 
34
- # Store the markdown content
35
- group.attrs["content"] = self.content
35
+ # Convert string content to numpy array of bytes
36
+ content_bytes = self.content.encode("utf-8")
37
+ content_array = np.frombuffer(content_bytes, dtype=np.uint8)
38
+
39
+ # Store the markdown content as a zarr array
40
+ group.create_dataset(
41
+ "content_data", data=content_array, dtype=np.uint8, chunks=True
42
+ )
43
+
44
+ # Store content size in attrs
45
+ group.attrs["data_size"] = len(content_bytes)
@@ -3,6 +3,7 @@ MatplotlibFigure view for figpack - displays matplotlib figures
3
3
  """
4
4
 
5
5
  import io
6
+ import numpy as np
6
7
  from typing import Any, Union
7
8
 
8
9
  import zarr
@@ -47,8 +48,18 @@ class MatplotlibFigure(FigpackView):
47
48
  svg_string = svg_buffer.getvalue()
48
49
  svg_buffer.close()
49
50
 
50
- # Store the SVG data
51
- group.attrs["svg_data"] = svg_string
51
+ # Convert SVG string to numpy array and store in zarr array
52
+ svg_bytes = svg_string.encode("utf-8")
53
+ svg_array = np.frombuffer(svg_bytes, dtype=np.uint8)
54
+ group.create_dataset(
55
+ "svg_data",
56
+ data=svg_array,
57
+ dtype=np.uint8,
58
+ chunks=True,
59
+ compressor=zarr.Blosc(
60
+ cname="zstd", clevel=3, shuffle=zarr.Blosc.SHUFFLE
61
+ ),
62
+ )
52
63
 
53
64
  # Store figure dimensions for reference
54
65
  fig_width, fig_height = self.fig.get_size_inches()
@@ -58,10 +69,22 @@ class MatplotlibFigure(FigpackView):
58
69
  # Store DPI for reference
59
70
  group.attrs["figure_dpi"] = float(self.fig.dpi)
60
71
 
72
+ # Store data size for reference
73
+ group.attrs["data_size"] = len(svg_bytes)
74
+
61
75
  except Exception as e:
62
76
  # If SVG export fails, store error information
63
- group.attrs["svg_data"] = ""
77
+ group.create_dataset(
78
+ "svg_data",
79
+ data=np.array([], dtype=np.uint8),
80
+ dtype=np.uint8,
81
+ chunks=True,
82
+ compressor=zarr.Blosc(
83
+ cname="zstd", clevel=3, shuffle=zarr.Blosc.SHUFFLE
84
+ ),
85
+ )
64
86
  group.attrs["error"] = f"Failed to export matplotlib figure: {str(e)}"
65
87
  group.attrs["figure_width_inches"] = 6.0
66
88
  group.attrs["figure_height_inches"] = 4.0
67
89
  group.attrs["figure_dpi"] = 100.0
90
+ group.attrs["data_size"] = 0
@@ -56,5 +56,21 @@ class PlotlyFigure(FigpackView):
56
56
  # Convert the plotly figure to a dictionary
57
57
  fig_dict = self.fig.to_dict()
58
58
 
59
- # Store the figure data as JSON string using custom encoder
60
- group.attrs["figure_data"] = json.dumps(fig_dict, cls=CustomJSONEncoder)
59
+ # Convert figure data to JSON string using custom encoder
60
+ json_string = json.dumps(fig_dict, cls=CustomJSONEncoder)
61
+
62
+ # Convert JSON string to bytes and store in numpy array
63
+ json_bytes = json_string.encode("utf-8")
64
+ json_array = np.frombuffer(json_bytes, dtype=np.uint8)
65
+
66
+ # Store the figure data as compressed array
67
+ group.create_dataset(
68
+ "figure_data",
69
+ data=json_array,
70
+ dtype=np.uint8,
71
+ chunks=True,
72
+ compressor=zarr.Blosc(cname="zstd", clevel=3, shuffle=zarr.Blosc.SHUFFLE),
73
+ )
74
+
75
+ # Store data size for reference
76
+ group.attrs["data_size"] = len(json_bytes)
figpack/views/__init__.py CHANGED
@@ -1,4 +1,5 @@
1
1
  from .Box import Box
2
+ from .DataFrame import DataFrame
2
3
  from .Gallery import Gallery
3
4
  from .GalleryItem import GalleryItem
4
5
  from .Image import Image
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: figpack
3
- Version: 0.2.5
3
+ Version: 0.2.7
4
4
  Summary: A Python package for creating shareable, interactive visualizations in the browser
5
5
  Author-email: Jeremy Magland <jmagland@flatironinstitute.org>
6
6
  License: Apache-2.0
@@ -36,6 +36,7 @@ Requires-Dist: spikeinterface; extra == "test"
36
36
  Requires-Dist: matplotlib; extra == "test"
37
37
  Requires-Dist: plotly; extra == "test"
38
38
  Requires-Dist: Pillow; extra == "test"
39
+ Requires-Dist: pandas; extra == "test"
39
40
  Provides-Extra: dev
40
41
  Requires-Dist: pytest>=7.0; extra == "dev"
41
42
  Requires-Dist: pytest-cov>=4.0; extra == "dev"
@@ -1,53 +1,54 @@
1
- figpack/__init__.py,sha256=MgpfFlGDmvR6fsmnN1k1RyoeOxl6pBtfaXgvZj1RStY,181
1
+ figpack/__init__.py,sha256=nCb6Q0Xx4-eGvV5pZeidWcrG1X2wYX3V2bhNXOXAvTo,181
2
2
  figpack/cli.py,sha256=xWF7J2BxUqOLvPu-Kje7Q6oGukTroXsLq8WN8vJgyw0,8321
3
3
  figpack/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- figpack/core/_bundle_utils.py,sha256=PIBVce4SXZyNTKpXsoEKlHbY7QUFRMBLwSECmJn0INE,1878
5
- figpack/core/_save_figure.py,sha256=9fn37xxZgSBQVOHaKuzsPRMgD2pcibuJ1jkjhTVv4ks,1002
4
+ figpack/core/_bundle_utils.py,sha256=JBZh2LJyu0oYHQBBVw5fF3uUNQJY_2bxVf6V7CN10FM,1884
5
+ figpack/core/_save_figure.py,sha256=52ny-m1ThGgxY4ZgMn7m33n8A2OCyezj8H8TMvw0Y8Q,1043
6
6
  figpack/core/_server_manager.py,sha256=BTLeZtSbaJtAmtslAfgvp9C-SV0aJnn4WCpUJzd1Mlg,10997
7
- figpack/core/_show_view.py,sha256=fwd6o6K0IHnlLDRMvo-dwQ_zrHs9bkAFqZJpID22Tso,5044
8
- figpack/core/_upload_bundle.py,sha256=hseJDKe2s7fO8siWpAGuwGDniOlOvPJ5Jksql6SVMug,14192
7
+ figpack/core/_show_view.py,sha256=-5HT1MYSeVuEoaL3RNNyoCjYsZy4Jy9XLjljUqLuvV4,5146
8
+ figpack/core/_upload_bundle.py,sha256=54hdWayJJdRZdx7N9V2aH_X33KkR6hImMjN6tkBTLi8,14894
9
9
  figpack/core/_view_figure.py,sha256=o1x1I2VKFrp2W_TStUS3fQblRW8AvGbu7Uy7MgVjofA,4186
10
10
  figpack/core/config.py,sha256=oOR7SlP192vuFhYlS-h14HnG-kd_3gaz0vshXch2RNc,173
11
- figpack/core/figpack_view.py,sha256=NMinVYTByDG_JrplxyGNvPalN-XLnQNNhnwIsT4km1Q,6099
12
- figpack/figpack-gui-dist/index.html,sha256=Iir-EDyhLfsZDZ3m0oGeB-N1AjXtIAC68lu3rOx2WKo,486
13
- figpack/figpack-gui-dist/assets/index-Cmae55E4.css,sha256=Yg0apcYehJwQvSQIUH13S7tsfqWQDevpJsAho0dDf0g,5499
14
- figpack/figpack-gui-dist/assets/index-CrYQmIda.js,sha256=3wyvEZye-j_IBlv5lBP4qCBY9-a6-sJ6inh0ZeTHDjA,1594728
15
- figpack/figpack-gui-dist/assets/neurosift-logo-CLsuwLMO.png,sha256=g5m-TwrGh5f6-9rXtWV-znH4B0nHgc__0GWclRDLUHs,9307
11
+ figpack/core/figpack_view.py,sha256=peJFkoP6HIqyNATzyucxAIq9HuCnK7SRO_-gE_rbEvg,6130
12
+ figpack/figpack-figure-dist/index.html,sha256=oIpc8fQvHp6xW9SGsqyqJg7kYImJlKrWDDGkoMPFfEk,486
13
+ figpack/figpack-figure-dist/assets/index-CTBd5_Gw.js,sha256=5cp20fBzUQGAXUpWZPBrNQsHe5VnE0oCeXnL_d5sdNM,1602680
14
+ figpack/figpack-figure-dist/assets/index-Cmae55E4.css,sha256=Yg0apcYehJwQvSQIUH13S7tsfqWQDevpJsAho0dDf0g,5499
15
+ figpack/figpack-figure-dist/assets/neurosift-logo-CLsuwLMO.png,sha256=g5m-TwrGh5f6-9rXtWV-znH4B0nHgc__0GWclRDLUHs,9307
16
16
  figpack/franklab/__init__.py,sha256=HkehqGImJE_sE2vbPDo-HbgtEYaMICb9-230xTYvRTU,56
17
17
  figpack/franklab/views/TrackAnimation.py,sha256=3Jv1Ri4FIwTyqNahinqhHsBH1Bv_iZrEGx12w6diJ2M,5636
18
18
  figpack/franklab/views/__init__.py,sha256=XXZ9QJLh9KAeeLgKbi6ogYOyfTgHP-N6o3u981NFwx8,116
19
19
  figpack/spike_sorting/__init__.py,sha256=09njqh-oFaCTdZUsc4HAOFTliUYV9DClddfZ0Q_dm0I,61
20
20
  figpack/spike_sorting/views/AutocorrelogramItem.py,sha256=qHmvIdHpbfVA_utPb5N2oP3hSP2cGnlT8VLaxOXV4UM,738
21
- figpack/spike_sorting/views/Autocorrelograms.py,sha256=43EgKHvUmXUA9QSOJQZiTeLHq_kKW43Ku3FIH7ZjfM8,3323
21
+ figpack/spike_sorting/views/Autocorrelograms.py,sha256=6MXOYJKUNEhJokiyOs8SGJVF9U9N6sHuQNYz7IEssqc,3677
22
22
  figpack/spike_sorting/views/AverageWaveforms.py,sha256=mvMkS3wf6MpI95tlGqKxBjxZlHqJr4aqG7SZvHigIsI,5193
23
23
  figpack/spike_sorting/views/CrossCorrelogramItem.py,sha256=uSd0i2hupteuILi_aKp7bYPYpL_PdC3CUDRMOEKUEM0,880
24
- figpack/spike_sorting/views/CrossCorrelograms.py,sha256=gqPXbEgg-GE3NCJQT2bahp1ITSW33F3q9ZuJRGrR68M,4061
24
+ figpack/spike_sorting/views/CrossCorrelograms.py,sha256=OGQq_5t_T1zq4eFCpuTAvUIhZQu7ef7LVexKNdByMvo,4415
25
25
  figpack/spike_sorting/views/RasterPlot.py,sha256=gFdfH9SEm-tf8Ptqw4M1Q7IHRytUOULpBZfM2TdMfZQ,2215
26
26
  figpack/spike_sorting/views/RasterPlotItem.py,sha256=iW7fuDEjSfvf5YMIwrF_6cmKvD76oCigOUMHtGgBsPI,638
27
27
  figpack/spike_sorting/views/SpikeAmplitudes.py,sha256=vQYWdJM-3qu568bcfGDC9k9LW_PgvU8j4tN9QYc08Mo,2665
28
28
  figpack/spike_sorting/views/SpikeAmplitudesItem.py,sha256=j5Na-diY-vRUAPu0t0VkyFCSKFnQ_f5HT077mB3Cy8c,1134
29
29
  figpack/spike_sorting/views/UnitSimilarityScore.py,sha256=cJA9MkETos9qHhV1tqgA7SfNEaPo-duXYCE76hSFGnA,948
30
- figpack/spike_sorting/views/UnitsTable.py,sha256=kQZvMlnPk8MAMPr3GlL4T3cAvGfSHBbB52jvMJ2-YAU,2173
30
+ figpack/spike_sorting/views/UnitsTable.py,sha256=M3y1IDJzSnvOaM1-QOyJOVcUcdTkVvxYhEMGd1kmUzs,2969
31
31
  figpack/spike_sorting/views/UnitsTableColumn.py,sha256=zBnuoeILTuiVLDvtcOxqa37E5WlbR12rlwNJUeWXxY4,847
32
32
  figpack/spike_sorting/views/UnitsTableRow.py,sha256=rEb2hMTA_pl2fTW1nOvnGir0ysfNx4uww3aekZzfWjk,720
33
33
  figpack/spike_sorting/views/__init__.py,sha256=iRq7xPmyhnQ3GffnPC0GxKGEWnlqXY_8IOxsMqYZ1IM,967
34
34
  figpack/views/Box.py,sha256=TfhPFNtVEq71LCucmWk3XX2WxQLdaeRiWGm5BM0k2l4,2236
35
+ figpack/views/DataFrame.py,sha256=VFP-EM_Wnc1G3uimVVMJe08KKWCAZe7DvmYf5e07uTk,3653
35
36
  figpack/views/Gallery.py,sha256=sHlZbaqxcktasmNsJnuxe8WmgUQ6iurG50JiChKSMbQ,3314
36
37
  figpack/views/GalleryItem.py,sha256=b_upJno5P3ANSulbG-h3t6Xj56tPGJ7iVxqyiZu3zaQ,1244
37
38
  figpack/views/Image.py,sha256=hmyAHlRwj0l6fC7aNmHYJFaj-qCqyH67soERm78V5dk,3953
38
39
  figpack/views/LayoutItem.py,sha256=wy8DggkIzZpU0F1zFIBceS7HpBb6lu-A3hpYINQzedk,1595
39
- figpack/views/Markdown.py,sha256=KEqEAz5VXErLXr8dYJrWY1I8_VdRazDIcjCNcHfUGPA,769
40
- figpack/views/MatplotlibFigure.py,sha256=LQSvPY3_iSHO-ZfWjRO6iOVUp5W-mmlt3mj8GBoK18w,1939
40
+ figpack/views/Markdown.py,sha256=Dl1UX5s0aC-mEx5m6jIJ839YKMNeeVzIDG-EANVrbys,1147
41
+ figpack/views/MatplotlibFigure.py,sha256=YoNtZTItEjatbtNJqATm2H-Oircp5Ca6FZLjHk_B0zg,2778
41
42
  figpack/views/MultiChannelTimeseries.py,sha256=sWr2nW1eoYR7V44wF7fac7IoQ6BOnus1nc4STkgIkYw,8501
42
- figpack/views/PlotlyFigure.py,sha256=B02nfWFM89GnDUZiS2v89ZtGBdSZtAwcXUD_7rV7kN4,1633
43
+ figpack/views/PlotlyFigure.py,sha256=E33PEkWSj907Ue73bYfZQlF-JFDdWA8jNrG-buFQLgs,2174
43
44
  figpack/views/Splitter.py,sha256=x9jLCTlIvDy5p9ymVd0X48KDccyD6bJANhXyFgKEmtE,2007
44
45
  figpack/views/TabLayout.py,sha256=5g3nmL95PfqgI0naqZXHMwLVo2ebDlGX01Hy9044bUw,1898
45
46
  figpack/views/TabLayoutItem.py,sha256=xmHA0JsW_6naJze4_mQuP_Fy0Nm17p2N7w_AsmVRp8k,880
46
47
  figpack/views/TimeseriesGraph.py,sha256=OAaCjO8fo86u_gO_frNfRGxng3tczxGDGKcJEvZo3rE,7469
47
- figpack/views/__init__.py,sha256=npSsSmbxN7_tZcjCK76L2l9dRVqubVXIgBnxj1uhjf4,473
48
- figpack-0.2.5.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
49
- figpack-0.2.5.dist-info/METADATA,sha256=R5iFyGtb_oUZo9Txa1670Ax4pPZyIS5OULXaKbtcfEo,3577
50
- figpack-0.2.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
51
- figpack-0.2.5.dist-info/entry_points.txt,sha256=l6d3siH2LxXa8qJGbjAqpIZtI5AkMSyDeoRDCzdrUto,45
52
- figpack-0.2.5.dist-info/top_level.txt,sha256=lMKGaC5xWmAYBx9Ac1iMokm42KFnJFjmkP2ldyvOo-c,8
53
- figpack-0.2.5.dist-info/RECORD,,
48
+ figpack/views/__init__.py,sha256=eKN4OMHnFSfrHRZcSskxhe-5s3t3Qpl533P-spTyf24,506
49
+ figpack-0.2.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
50
+ figpack-0.2.7.dist-info/METADATA,sha256=EKxpIv7ysQYV7yag9mwrhfCvPGBRroAbkUo9Cn_btNA,3616
51
+ figpack-0.2.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
52
+ figpack-0.2.7.dist-info/entry_points.txt,sha256=l6d3siH2LxXa8qJGbjAqpIZtI5AkMSyDeoRDCzdrUto,45
53
+ figpack-0.2.7.dist-info/top_level.txt,sha256=lMKGaC5xWmAYBx9Ac1iMokm42KFnJFjmkP2ldyvOo-c,8
54
+ figpack-0.2.7.dist-info/RECORD,,