syd 0.1.6__py3-none-any.whl → 0.1.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: syd
3
- Version: 0.1.6
3
+ Version: 0.1.7
4
4
  Summary: A Python package for making GUIs for data science easy.
5
5
  Project-URL: Homepage, https://github.com/landoskape/syd
6
6
  Author-email: Andrew Landau <andrew+tyler+landau+getridofthisanddtheplusses@gmail.com>
@@ -18,8 +18,11 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
20
  Requires-Python: >=3.9
21
+ Requires-Dist: dash
22
+ Requires-Dist: ipympl
21
23
  Requires-Dist: ipywidgets
22
24
  Requires-Dist: matplotlib
25
+ Requires-Dist: plotly
23
26
  Provides-Extra: test
24
27
  Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
25
28
  Requires-Dist: pytest>=7.0.0; extra == 'test'
@@ -38,18 +41,18 @@ A package to help you share your data!
38
41
 
39
42
  Have you ever wanted to look through all your data really quickly interactively? Of course you have. Mo data mo problems, but only if you don't know what to do with it. And that starts with looking at your data. And that's why syd stands for show your data!
40
43
 
41
- Syd is a system for creating a data viewing GUI that you can view on a web-browser. And guess what? Since it opens on a web browser, you can even open it on any other computer on your local network! For example, your PI. Gone are the days of single random examples that they make infinitely stubborn conclusions about. Now, you can look at all the examples, quickly and easily, on their computer. And that's why syd stands for share your data!
44
+ Syd is a system for creating a data viewing GUI that you can view on a web-browser (feature coming soon, right now only in jupyter notebooks). And guess what? Since it opens on a web browser, you can even open it on any other computer on your local network! For example, your PI's computer. Gone are the days of single random examples that they make infinitely stubborn conclusions about. Now, you can look at all the examples, quickly and easily, on their computer. And that's why syd stands for share your data!
42
45
 
43
- Okay, so what is it? Syd is an automated system to convert some basic python plotting code into an interactive GUI. This is great, because it means you only have to think about what you want to plot and what you want to be interactive, syd does the work to make an interface. There's some small overhead for learning how to prepare your data to work with syd, but we provide some templates to make it easy. You know what that means? That means you get to focus on _thinking_ about your data, rather than spending time writing code to look at it. And that's why syd stands for Science, Yes! Datum!
46
+ Okay, so what is it? Syd is an automated system to convert some basic python plotting code into an interactive GUI. This is great, because it means you only have to think about what you want to plot and which parameters you want to be interactive. Syd handles all the behind-the-scenes boilerplate code required to make an interface. You know what that means? It means you get to focus on _thinking_ about your data, rather than spending time writing code to look at it. And that's why syd stands for Science, Yes! Dayummmm!
44
47
 
45
48
  ## Installation
46
-
49
+ It's easy, just use pip install. The dependencies are light so it should work in most environments.
47
50
  ```bash
48
51
  pip install syd
49
52
  ```
50
53
 
51
54
  ## Quick Start
52
- Right now the only way to use it is in a jupyter notebook. More deployments coming soon!
55
+ Right now the only way to use it is in a jupyter notebook. More deployment options coming soon!
53
56
  This is an example of a sine wave viewer which is about as simple as it gets.
54
57
  ```python
55
58
  # In a notebook!
@@ -81,12 +84,6 @@ supporting methods for processing data and updating parameters that require more
81
84
 
82
85
  Full documentation is available at [shareyourdata.readthedocs.io](https://shareyourdata.readthedocs.io/).
83
86
 
84
- Key features:
85
- - Create interactive matplotlib visualizations with minimal code
86
- - Support for various parameter types (sliders, dropdowns, checkboxes, etc.)
87
- - Real-time updates as parameters change
88
- - Works in Jupyter notebooks and can be shared over local network
89
-
90
87
  ## License
91
88
 
92
89
  This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE) file for details.
@@ -103,4 +100,21 @@ Contributions are welcome! Here's how you can help:
103
100
  6. Push to the branch (`git push origin feature/amazing-feature`)
104
101
  7. Open a Pull Request online
105
102
 
106
- Please make sure to update tests as appropriate and adhere to the existing coding style.
103
+ Please make sure to update tests as appropriate and adhere to the existing coding style (black, line-length=88, other style guidelines not capture by black, generally following pep8 guidelines).
104
+
105
+
106
+ ## To-Do List
107
+ - Notebook deployment debouncer:
108
+ - Probably make this dependent on whether the user is in %matplotlib widget mode or not
109
+ - Also probably make it dependent on whether the deployer is in continuous mode or not
110
+ - Potentially make the wait_time dynamic depending on how fast the plot method is and how
111
+ - frequently the no comm messages show up... (if we can catch them)
112
+ - Consider the class method "of this class" function permissions.... (and write tests...)
113
+ - Think about whether there's alternatives to creating new figures each time...
114
+ - Consider adding a step to the integer parameter...
115
+ - Idea!
116
+ - We could make fig=?, ax=? arguments optional for the plot function and add a
117
+ "recycle_figure: bool = False" flag be part of the deploy API. This way, an
118
+ advanced user that wants snappy responsivity or complex figure management can
119
+ do so, but the default is for the user to generate a new figure object each time.
120
+ - I've updated some rules for parameters -- need to make tests for empty options on selection / multiple selections
@@ -0,0 +1,22 @@
1
+ syd/__init__.py,sha256=jAUVYiFfmoEyXcMMeSEB44U8f9s2PQDPFvnGt9P2GmE,250
2
+ syd/parameters.py,sha256=5VcqTPHP-Jj4PjQxQ1NCnkysHPwfxjdsaQbtvDf76bU,44348
3
+ syd/viewer.py,sha256=ClpPhseWIP1L0cVObkZXfoa9oD48dOUMTvDz2ovyG9c,51006
4
+ syd/flask_deployment/__init__.py,sha256=AeCaOInJYkowwK-1Eo2TW7M5Smzar4j9C0_5gxsrl_w,36
5
+ syd/flask_deployment/components.py,sha256=J8LFQzHCq0U_GeYmo3uf8WuGq09tEw9beVRO5UPELnw,20335
6
+ syd/flask_deployment/deployer.py,sha256=YMbHDf7Ge8B7wJEmCU5rKHtHNN8c7RkzEYDA4FRY4w4,10131
7
+ syd/flask_deployment/testing_principles.md,sha256=bIR6RDvAxX1uB8wauIT62FX1jMYSjNPlXWsZ4rUE1Gw,10178
8
+ syd/flask_deployment/static/css/viewer.css,sha256=b6ZhAK85bPRqTFzB77IaVOAbgDRDusDE1u6wbve8OaY,1246
9
+ syd/flask_deployment/static/js/viewer.js,sha256=AA8IyEvRjk_RLTLDduku8eT-ztZAdBw5gGaCt2saZSk,5995
10
+ syd/flask_deployment/templates/base.html,sha256=L1lHEjUBSCqG1B6KnbApUshVopr7mZLRwzA3jRcKtMQ,935
11
+ syd/flask_deployment/templates/viewer.html,sha256=xFbdO8fTQ4MgqyEGFJLM4-b1UAlijLPxIr7aLhDD7VA,1953
12
+ syd/notebook_deployment/__init__.py,sha256=0DZ-psAZBt6dx_a5Dc8wLK-rKTn8yDvTmQOcL6Le3l8,39
13
+ syd/notebook_deployment/_ipympl_deployer.py,sha256=CoumoX5U63YX4luhul5eO8JufJTgHvZgExEriAlxhW0,8972
14
+ syd/notebook_deployment/deployer.py,sha256=rPB-FKmL5tDUcG1mC2MCVlGFcDSJK_sBb8knndWVIcA,11275
15
+ syd/notebook_deployment/widgets.py,sha256=4MfFKRAT0dUhNeia-Tpzp5N1ql0QioOVJ2ySOqUBkl0,19336
16
+ syd/plotly_deployment/__init__.py,sha256=y9j4WKQOERSaxCVoaFUrpudwQ8DEGPfqrCcNqoc7e2U,37
17
+ syd/plotly_deployment/components.py,sha256=HMPyxdIdsok-VolOWVoWeFya1kzMLvIyQ6ufa-FlKbo,16861
18
+ syd/plotly_deployment/deployer.py,sha256=L2yvvkmbWYKNQt_x5mVg552L7a-TeN0ZcW8luRm2I4o,13735
19
+ syd-0.1.7.dist-info/METADATA,sha256=tvGs0W0aIe3T0ut0V8EnPygIscdpev-4l4sjaK4-GWE,6489
20
+ syd-0.1.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
21
+ syd-0.1.7.dist-info/licenses/LICENSE,sha256=YF6QR6Vjxcg5b_sYIyqkME7FZYau5TfEUGTG-0JeRK0,35129
22
+ syd-0.1.7.dist-info/RECORD,,
@@ -1,39 +0,0 @@
1
- .controls {
2
- padding: 20px;
3
- }
4
-
5
- .controls.horizontal {
6
- width: var(--controls-width);
7
- float: left;
8
- padding-right: 20px;
9
- }
10
-
11
- .plot-container {
12
- padding: 20px;
13
- }
14
-
15
- .plot-container.horizontal {
16
- width: var(--plot-width);
17
- float: left;
18
- }
19
-
20
- #plot {
21
- width: 100%;
22
- height: auto;
23
- }
24
-
25
- .slider, .range-slider {
26
- margin: 10px 0;
27
- }
28
-
29
- .value-display {
30
- display: block;
31
- text-align: center;
32
- margin-top: 5px;
33
- font-size: 0.9em;
34
- color: #666;
35
- }
36
-
37
- .form-group {
38
- margin-bottom: 1rem;
39
- }
@@ -1,51 +0,0 @@
1
- function updateParameter(name, value) {
2
- console.log(`Sending parameter update: ${name} = ${value}`); // Debug log
3
- fetch('/update_parameter', {
4
- method: 'POST',
5
- headers: {
6
- 'Content-Type': 'application/json',
7
- },
8
- body: JSON.stringify({name, value})
9
- })
10
- .then(response => response.json())
11
- .then(data => {
12
- if (data.error) {
13
- console.error(`Error updating parameter: ${data.error}`); // Debug log
14
- return;
15
- }
16
- console.log('Update successful, applying updates'); // Debug log
17
- // Update plot
18
- document.getElementById('plot').src = data.plot;
19
- // Apply any parameter updates
20
- for (const [param, js] of Object.entries(data.updates)) {
21
- console.log(`Applying update for ${param}`); // Debug log
22
- eval(js);
23
- }
24
- })
25
- .catch(error => {
26
- console.error('Error in updateParameter:', error); // Debug log
27
- });
28
- }
29
-
30
- function buttonClick(name) {
31
- fetch('/button_click', {
32
- method: 'POST',
33
- headers: {
34
- 'Content-Type': 'application/json',
35
- },
36
- body: JSON.stringify({name})
37
- })
38
- .then(response => response.json())
39
- .then(data => {
40
- if (data.error) {
41
- console.error(data.error);
42
- return;
43
- }
44
- // Update plot
45
- document.getElementById('plot').src = data.plot;
46
- // Apply any parameter updates
47
- for (const [param, js] of Object.entries(data.updates)) {
48
- eval(js);
49
- }
50
- });
51
- }
@@ -1,18 +0,0 @@
1
- syd/__init__.py,sha256=elTyYXUlIX5Vv8AFjhM5C_XeZtU83YeGq_W980duI6k,284
2
- syd/interactive_viewer.py,sha256=2vEyRwq4dxzGbJOz3UymNw_RJXRHrzv7UbJ2CV6q1bI,53950
3
- syd/parameters.py,sha256=DbjevWsbIoVqlS3bYkqRd6SXJ054iexoNFj4VBss2eA,47703
4
- syd/flask_deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- syd/flask_deployment/components.py,sha256=I5xTFX5ho6EZ8ZjxknlluzSsxP5atUBAi_k7b8p_9Os,17391
6
- syd/flask_deployment/deployer.py,sha256=EOo-oT3duBwWxVpQdpe-pXmAGGzfnqk4EY-vNcN-vAI,11288
7
- syd/flask_deployment/static/css/styles.css,sha256=0zBjzquFMcxTNYNmVP1KdS3_7c1WiMYEqYHvubUyRhU,514
8
- syd/flask_deployment/static/js/components.js,sha256=o_Ty-fvFsXTSl0eavJDDqhhxi-N3nuB-IPXkmin4vvI,1563
9
- syd/flask_deployment/static/js/viewer.js,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- syd/flask_deployment/templates/base.html,sha256=6WZ9-Pc6pAysQbBSg_rihfRXPHMwyFxVR8YYD5bL524,783
11
- syd/flask_deployment/templates/viewer.html,sha256=AoCdWQ5TIUEnpi6fjWdWUO9XJSLGFH0fHggGZd87yeg,2813
12
- syd/notebook_deployment/__init__.py,sha256=eRum4_pXLTtaoUWvVnVCxJFrLM8Nn8EQ0yLwE9puh-w,41
13
- syd/notebook_deployment/deployer.py,sha256=7iQ5kzs2VIkItmHbPpxtWdSRkGth5OABqyATc5WtbgI,8739
14
- syd/notebook_deployment/widgets.py,sha256=bBBBJtgzfYcoXdhkuF4Du7HNXwwPjj_shGDhy3VoWs8,17446
15
- syd-0.1.6.dist-info/METADATA,sha256=N7-fVmqKWzwJhhgl6t-Gft9BAlnhUpcTG9eni1Zs9Dk,5412
16
- syd-0.1.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
- syd-0.1.6.dist-info/licenses/LICENSE,sha256=YF6QR6Vjxcg5b_sYIyqkME7FZYau5TfEUGTG-0JeRK0,35129
18
- syd-0.1.6.dist-info/RECORD,,
File without changes