TimeFeatures 2.1.0__tar.gz → 2.2.0__tar.gz

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 (84) hide show
  1. {timefeatures-2.1.0/TimeFeatures.egg-info → timefeatures-2.2.0}/PKG-INFO +38 -24
  2. timefeatures-2.2.0/README.md +101 -0
  3. {timefeatures-2.1.0 → timefeatures-2.2.0/TimeFeatures.egg-info}/PKG-INFO +38 -24
  4. {timefeatures-2.1.0 → timefeatures-2.2.0}/TimeFeatures.egg-info/SOURCES.txt +10 -0
  5. {timefeatures-2.1.0 → timefeatures-2.2.0}/docs/changes.rst +12 -2
  6. {timefeatures-2.1.0 → timefeatures-2.2.0}/docs/conf.py +6 -2
  7. {timefeatures-2.1.0 → timefeatures-2.2.0}/docs/index.rst +9 -0
  8. {timefeatures-2.1.0 → timefeatures-2.2.0}/docs/widgets/load-from-db.rst +5 -0
  9. {timefeatures-2.1.0 → timefeatures-2.2.0}/docs/widgets/save-to-db.rst +5 -0
  10. {timefeatures-2.1.0 → timefeatures-2.2.0}/docs/widgets/time-feature-constructor.rst +5 -0
  11. {timefeatures-2.1.0 → timefeatures-2.2.0}/docs/widgets/variable-dependency-graph.rst +5 -0
  12. timefeatures-2.2.0/imgs/installation.png +0 -0
  13. timefeatures-2.2.0/imgs/widgets/owloadfromdb.png +0 -0
  14. timefeatures-2.2.0/imgs/widgets/owsavetodb.png +0 -0
  15. timefeatures-2.2.0/imgs/widgets/owtimefeaturesconstructor.png +0 -0
  16. timefeatures-2.2.0/imgs/widgets/owvariabledependencygraph.png +0 -0
  17. timefeatures-2.2.0/imgs/workflow.png +0 -0
  18. {timefeatures-2.1.0 → timefeatures-2.2.0}/setup.py +12 -2
  19. timefeatures-2.2.0/timefeatures/__init__.py +5 -0
  20. timefeatures-2.2.0/timefeatures/__version__.py +3 -0
  21. timefeatures-2.2.0/timefeatures/help_html/.buildinfo +4 -0
  22. timefeatures-2.2.0/timefeatures/help_html/_images/owloadfromdb.png +0 -0
  23. timefeatures-2.2.0/timefeatures/help_html/_images/owsavetodb.png +0 -0
  24. timefeatures-2.2.0/timefeatures/help_html/_images/owtimefeaturesconstructor.png +0 -0
  25. timefeatures-2.2.0/timefeatures/help_html/_images/owvariabledependencygraph.png +0 -0
  26. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_sources/changes.rst.txt +12 -2
  27. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_sources/index.rst.txt +9 -0
  28. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_sources/widgets/load-from-db.rst.txt +5 -0
  29. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_sources/widgets/save-to-db.rst.txt +5 -0
  30. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_sources/widgets/time-feature-constructor.rst.txt +5 -0
  31. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_sources/widgets/variable-dependency-graph.rst.txt +5 -0
  32. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/documentation_options.js +1 -1
  33. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/changes.html +14 -4
  34. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/genindex.html +2 -2
  35. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/index.html +8 -2
  36. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/installation.html +2 -2
  37. timefeatures-2.2.0/timefeatures/help_html/objects.inv +0 -0
  38. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/search.html +2 -2
  39. timefeatures-2.2.0/timefeatures/help_html/searchindex.js +1 -0
  40. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/widgets/load-from-db.html +8 -2
  41. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/widgets/save-to-db.html +8 -2
  42. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/widgets/time-feature-constructor.html +8 -2
  43. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/widgets/variable-dependency-graph.html +8 -2
  44. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/widgets/owloadfromdb.py +75 -8
  45. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/widgets/owsavetodb.py +21 -0
  46. timefeatures-2.1.0/README.md +0 -87
  47. timefeatures-2.1.0/imgs/installation.png +0 -0
  48. timefeatures-2.1.0/imgs/workflow.png +0 -0
  49. timefeatures-2.1.0/timefeatures/__init__.py +0 -0
  50. timefeatures-2.1.0/timefeatures/help_html/objects.inv +0 -0
  51. timefeatures-2.1.0/timefeatures/help_html/searchindex.js +0 -1
  52. {timefeatures-2.1.0 → timefeatures-2.2.0}/LICENSE +0 -0
  53. {timefeatures-2.1.0 → timefeatures-2.2.0}/MANIFEST.in +0 -0
  54. {timefeatures-2.1.0 → timefeatures-2.2.0}/TimeFeatures.egg-info/dependency_links.txt +0 -0
  55. {timefeatures-2.1.0 → timefeatures-2.2.0}/TimeFeatures.egg-info/entry_points.txt +0 -0
  56. {timefeatures-2.1.0 → timefeatures-2.2.0}/TimeFeatures.egg-info/requires.txt +0 -0
  57. {timefeatures-2.1.0 → timefeatures-2.2.0}/TimeFeatures.egg-info/top_level.txt +0 -0
  58. {timefeatures-2.1.0 → timefeatures-2.2.0}/docs/Makefile +0 -0
  59. {timefeatures-2.1.0 → timefeatures-2.2.0}/docs/installation.rst +0 -0
  60. {timefeatures-2.1.0 → timefeatures-2.2.0}/docs/requirements.txt +0 -0
  61. {timefeatures-2.1.0 → timefeatures-2.2.0}/setup.cfg +0 -0
  62. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help.py +0 -0
  63. /timefeatures-2.1.0/timefeatures/help_html/.buildinfo → /timefeatures-2.2.0/timefeatures/help_html/.buildinfo.bak +0 -0
  64. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_sources/installation.rst.txt +0 -0
  65. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/alabaster.css +0 -0
  66. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/basic.css +0 -0
  67. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/custom.css +0 -0
  68. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/doctools.js +0 -0
  69. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/file.png +0 -0
  70. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/github-banner.svg +0 -0
  71. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/language_data.js +0 -0
  72. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/minus.png +0 -0
  73. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/plus.png +0 -0
  74. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/pygments.css +0 -0
  75. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/searchtools.js +0 -0
  76. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/help_html/_static/sphinx_highlight.js +0 -0
  77. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/widgets/__init__.py +0 -0
  78. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/widgets/icons/graphgenerator.svg +0 -0
  79. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/widgets/icons/loaddatadb.svg +0 -0
  80. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/widgets/icons/savedatadb.svg +0 -0
  81. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/widgets/icons/timefeature-xs.svg +0 -0
  82. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/widgets/icons/timefeature.svg +0 -0
  83. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/widgets/owtimefeaturesconstructor.py +0 -0
  84. {timefeatures-2.1.0 → timefeatures-2.2.0}/timefeatures/widgets/owvardependencygraph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TimeFeatures
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Timefeatures add-on for Orange 3 data mining software.
5
5
  Home-page: https://github.com/alervgr/Orange-TimeFeatures
6
6
  Author: Alejandro Rivas García
@@ -42,15 +42,37 @@ Dynamic: provides-extra
42
42
  Dynamic: requires-dist
43
43
  Dynamic: summary
44
44
 
45
- Orange3 TimeFeatures
46
- ===============
45
+ # Orange3 TimeFeatures
47
46
 
48
- Timefeatures add-on for [Orange] 3 data mining software for generating synthetic data using datasets with time series, generating graphs of relationships between the generated variables and includes another widget to save the data and configuration tables in a database.
47
+ [![PyPI version](https://img.shields.io/pypi/v/TimeFeatures)](https://pypi.org/project/TimeFeatures/)
48
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
49
+ [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
50
+ [![Orange3](https://img.shields.io/badge/Orange3-add--on-orange)](https://orangedatamining.com/)
51
+
52
+ TimeFeatures is an add-on for [Orange] 3 data mining software for generating synthetic data using datasets with time series, generating graphs of relationships between the generated variables, and includes widgets to save and load data and configuration tables from a database.
49
53
 
50
54
  [Orange]: https://orangedatamining.com/
51
55
 
52
- Installation
53
- ------------
56
+ ## Features
57
+
58
+ - 🕐 **7 time-window functions** — `shift`, `sum`, `mean`, `min`, `max`, `count`, `sd` with full chunk-boundary correctness
59
+ - 🔗 **Chained descriptors** — derived variables can reference each other; topological sort resolves the evaluation order automatically
60
+ - 🛡️ **Secure evaluation** — expressions run in a restricted `eval` sandbox (`__builtins__` replaced, curated whitelist only)
61
+ - 🗄️ **PostgreSQL & MySQL** — persist and reload datasets via SQLAlchemy with dialect-agnostic SQL generation
62
+ - 📊 **Directed weighted dependency graphs** — edge weights reflect temporal window size; visualise in Network Explorer
63
+ - ⚡ **Bulk upload performance** — pandas `DataFrame.to_sql` with chunked multi-row INSERTs
64
+ - 💾 **Workflow persistence** — variable definitions survive save/reload without clicking Send first
65
+
66
+ ## Widgets
67
+
68
+ | Widget | Description |
69
+ |---|---|
70
+ | **Time Features Constructor** | Defines new variables from existing ones using Python-style expressions and time-window functions. Supports chained descriptors with automatic topological sorting. |
71
+ | **Variable Dependency Graph** | Builds a directed, weighted dependency graph from the variable definitions. Edge weights summarise how far back or forward in time each variable looks. |
72
+ | **Save to DB** | Persists the resulting dataset to a SQL database (PostgreSQL or MySQL), with full SQL-injection defences, three write modes (create / overwrite / append) and an optional completion email. |
73
+ | **Load from DB** | Lists datasets previously stored by Save to DB and pulls the chosen one back into Orange, optionally marking the class column directly so no Select Columns widget is needed. |
74
+
75
+ ## Installation
54
76
 
55
77
  ### Orange add-on installer
56
78
 
@@ -64,21 +86,10 @@ To install the add-on with pip use
64
86
 
65
87
  pip install TimeFeatures
66
88
 
67
- To install the add-on from source, run
68
-
69
- python setup.py install
70
-
71
- To register this add-on with Orange, but keep the code in the development directory (do not copy it to
72
- Python's site-packages directory), run
73
-
74
- python setup.py develop
75
-
76
- You can also run
89
+ To install the add-on from source in editable mode, run
77
90
 
78
91
  pip install -e .
79
92
 
80
- which is sometimes preferable as you can *pip uninstall* packages later.
81
-
82
93
  ### Anaconda
83
94
 
84
95
  If using Anaconda Python distribution, simply run
@@ -97,8 +108,7 @@ If using Anaconda Python distribution, simply run
97
108
  * PyMySQL>=1.0.0
98
109
  * Orange3-Network>=1.8.0
99
110
 
100
- Usage
101
- -----
111
+ ## Usage
102
112
 
103
113
  After the installation, the widgets from this add-on are registered with Orange. To run Orange from the terminal,
104
114
  use
@@ -111,21 +121,25 @@ or
111
121
 
112
122
  New widgets are in the toolbox bar under Time-Features section.
113
123
 
114
- Documentation
115
- -------------
124
+ ## Documentation
116
125
 
117
126
  The add-on includes Sphinx documentation for each widget. Orange resolves the
118
127
  local HTML pages through its internal Help panel, not through an internet URL.
119
128
  To rebuild the documentation locally, run
120
129
 
121
130
  pip install -e ".[docs]"
131
+ python -m sphinx -b html docs docs/build/html
132
+
133
+ The bundled in-app help is pre-built under `timefeatures/help_html/`. To
134
+ regenerate it (e.g. after editing the `.rst` files), run
135
+
122
136
  python -m sphinx -b html docs timefeatures/help_html
123
137
 
124
138
  Use the widget help action in Orange to open the corresponding page inside the
125
139
  Orange Help window.
126
140
 
127
- Workflow Example
128
- -----
141
+ ## Workflow Example
142
+
129
143
  This is an example of how you can use this add-on.
130
144
 
131
145
  ![Workflow](https://github.com/alervgr/Orange-TimeFeatures/blob/main/imgs/workflow.png?raw=true)
@@ -0,0 +1,101 @@
1
+ # Orange3 TimeFeatures
2
+
3
+ [![PyPI version](https://img.shields.io/pypi/v/TimeFeatures)](https://pypi.org/project/TimeFeatures/)
4
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
5
+ [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
6
+ [![Orange3](https://img.shields.io/badge/Orange3-add--on-orange)](https://orangedatamining.com/)
7
+
8
+ TimeFeatures is an add-on for [Orange] 3 data mining software for generating synthetic data using datasets with time series, generating graphs of relationships between the generated variables, and includes widgets to save and load data and configuration tables from a database.
9
+
10
+ [Orange]: https://orangedatamining.com/
11
+
12
+ ## Features
13
+
14
+ - 🕐 **7 time-window functions** — `shift`, `sum`, `mean`, `min`, `max`, `count`, `sd` with full chunk-boundary correctness
15
+ - 🔗 **Chained descriptors** — derived variables can reference each other; topological sort resolves the evaluation order automatically
16
+ - 🛡️ **Secure evaluation** — expressions run in a restricted `eval` sandbox (`__builtins__` replaced, curated whitelist only)
17
+ - 🗄️ **PostgreSQL & MySQL** — persist and reload datasets via SQLAlchemy with dialect-agnostic SQL generation
18
+ - 📊 **Directed weighted dependency graphs** — edge weights reflect temporal window size; visualise in Network Explorer
19
+ - ⚡ **Bulk upload performance** — pandas `DataFrame.to_sql` with chunked multi-row INSERTs
20
+ - 💾 **Workflow persistence** — variable definitions survive save/reload without clicking Send first
21
+
22
+ ## Widgets
23
+
24
+ | Widget | Description |
25
+ |---|---|
26
+ | **Time Features Constructor** | Defines new variables from existing ones using Python-style expressions and time-window functions. Supports chained descriptors with automatic topological sorting. |
27
+ | **Variable Dependency Graph** | Builds a directed, weighted dependency graph from the variable definitions. Edge weights summarise how far back or forward in time each variable looks. |
28
+ | **Save to DB** | Persists the resulting dataset to a SQL database (PostgreSQL or MySQL), with full SQL-injection defences, three write modes (create / overwrite / append) and an optional completion email. |
29
+ | **Load from DB** | Lists datasets previously stored by Save to DB and pulls the chosen one back into Orange, optionally marking the class column directly so no Select Columns widget is needed. |
30
+
31
+ ## Installation
32
+
33
+ ### Orange add-on installer
34
+
35
+ Install from Orange add-on installer through Options -> Add-ons.
36
+
37
+ ![Installation](https://github.com/alervgr/Orange-TimeFeatures/blob/main/imgs/installation.png?raw=true)
38
+
39
+ ### Using pip
40
+
41
+ To install the add-on with pip use
42
+
43
+ pip install TimeFeatures
44
+
45
+ To install the add-on from source in editable mode, run
46
+
47
+ pip install -e .
48
+
49
+ ### Anaconda
50
+
51
+ If using Anaconda Python distribution, simply run
52
+
53
+ pip install TimeFeatures
54
+
55
+ **Required Dependencies**:
56
+
57
+ * numpy>=1.22.4
58
+ * AnyQt>=0.2.0
59
+ * PyQt5>=5.15.6
60
+ * PyQtWebEngine>=5.15.6
61
+ * scipy>=1.7.3
62
+ * SQLAlchemy>=1.4.0
63
+ * psycopg2-binary>=2.9.9
64
+ * PyMySQL>=1.0.0
65
+ * Orange3-Network>=1.8.0
66
+
67
+ ## Usage
68
+
69
+ After the installation, the widgets from this add-on are registered with Orange. To run Orange from the terminal,
70
+ use
71
+
72
+ orange-canvas
73
+
74
+ or
75
+
76
+ python3 -m Orange.canvas
77
+
78
+ New widgets are in the toolbox bar under Time-Features section.
79
+
80
+ ## Documentation
81
+
82
+ The add-on includes Sphinx documentation for each widget. Orange resolves the
83
+ local HTML pages through its internal Help panel, not through an internet URL.
84
+ To rebuild the documentation locally, run
85
+
86
+ pip install -e ".[docs]"
87
+ python -m sphinx -b html docs docs/build/html
88
+
89
+ The bundled in-app help is pre-built under `timefeatures/help_html/`. To
90
+ regenerate it (e.g. after editing the `.rst` files), run
91
+
92
+ python -m sphinx -b html docs timefeatures/help_html
93
+
94
+ Use the widget help action in Orange to open the corresponding page inside the
95
+ Orange Help window.
96
+
97
+ ## Workflow Example
98
+
99
+ This is an example of how you can use this add-on.
100
+
101
+ ![Workflow](https://github.com/alervgr/Orange-TimeFeatures/blob/main/imgs/workflow.png?raw=true)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TimeFeatures
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Timefeatures add-on for Orange 3 data mining software.
5
5
  Home-page: https://github.com/alervgr/Orange-TimeFeatures
6
6
  Author: Alejandro Rivas García
@@ -42,15 +42,37 @@ Dynamic: provides-extra
42
42
  Dynamic: requires-dist
43
43
  Dynamic: summary
44
44
 
45
- Orange3 TimeFeatures
46
- ===============
45
+ # Orange3 TimeFeatures
47
46
 
48
- Timefeatures add-on for [Orange] 3 data mining software for generating synthetic data using datasets with time series, generating graphs of relationships between the generated variables and includes another widget to save the data and configuration tables in a database.
47
+ [![PyPI version](https://img.shields.io/pypi/v/TimeFeatures)](https://pypi.org/project/TimeFeatures/)
48
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
49
+ [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
50
+ [![Orange3](https://img.shields.io/badge/Orange3-add--on-orange)](https://orangedatamining.com/)
51
+
52
+ TimeFeatures is an add-on for [Orange] 3 data mining software for generating synthetic data using datasets with time series, generating graphs of relationships between the generated variables, and includes widgets to save and load data and configuration tables from a database.
49
53
 
50
54
  [Orange]: https://orangedatamining.com/
51
55
 
52
- Installation
53
- ------------
56
+ ## Features
57
+
58
+ - 🕐 **7 time-window functions** — `shift`, `sum`, `mean`, `min`, `max`, `count`, `sd` with full chunk-boundary correctness
59
+ - 🔗 **Chained descriptors** — derived variables can reference each other; topological sort resolves the evaluation order automatically
60
+ - 🛡️ **Secure evaluation** — expressions run in a restricted `eval` sandbox (`__builtins__` replaced, curated whitelist only)
61
+ - 🗄️ **PostgreSQL & MySQL** — persist and reload datasets via SQLAlchemy with dialect-agnostic SQL generation
62
+ - 📊 **Directed weighted dependency graphs** — edge weights reflect temporal window size; visualise in Network Explorer
63
+ - ⚡ **Bulk upload performance** — pandas `DataFrame.to_sql` with chunked multi-row INSERTs
64
+ - 💾 **Workflow persistence** — variable definitions survive save/reload without clicking Send first
65
+
66
+ ## Widgets
67
+
68
+ | Widget | Description |
69
+ |---|---|
70
+ | **Time Features Constructor** | Defines new variables from existing ones using Python-style expressions and time-window functions. Supports chained descriptors with automatic topological sorting. |
71
+ | **Variable Dependency Graph** | Builds a directed, weighted dependency graph from the variable definitions. Edge weights summarise how far back or forward in time each variable looks. |
72
+ | **Save to DB** | Persists the resulting dataset to a SQL database (PostgreSQL or MySQL), with full SQL-injection defences, three write modes (create / overwrite / append) and an optional completion email. |
73
+ | **Load from DB** | Lists datasets previously stored by Save to DB and pulls the chosen one back into Orange, optionally marking the class column directly so no Select Columns widget is needed. |
74
+
75
+ ## Installation
54
76
 
55
77
  ### Orange add-on installer
56
78
 
@@ -64,21 +86,10 @@ To install the add-on with pip use
64
86
 
65
87
  pip install TimeFeatures
66
88
 
67
- To install the add-on from source, run
68
-
69
- python setup.py install
70
-
71
- To register this add-on with Orange, but keep the code in the development directory (do not copy it to
72
- Python's site-packages directory), run
73
-
74
- python setup.py develop
75
-
76
- You can also run
89
+ To install the add-on from source in editable mode, run
77
90
 
78
91
  pip install -e .
79
92
 
80
- which is sometimes preferable as you can *pip uninstall* packages later.
81
-
82
93
  ### Anaconda
83
94
 
84
95
  If using Anaconda Python distribution, simply run
@@ -97,8 +108,7 @@ If using Anaconda Python distribution, simply run
97
108
  * PyMySQL>=1.0.0
98
109
  * Orange3-Network>=1.8.0
99
110
 
100
- Usage
101
- -----
111
+ ## Usage
102
112
 
103
113
  After the installation, the widgets from this add-on are registered with Orange. To run Orange from the terminal,
104
114
  use
@@ -111,21 +121,25 @@ or
111
121
 
112
122
  New widgets are in the toolbox bar under Time-Features section.
113
123
 
114
- Documentation
115
- -------------
124
+ ## Documentation
116
125
 
117
126
  The add-on includes Sphinx documentation for each widget. Orange resolves the
118
127
  local HTML pages through its internal Help panel, not through an internet URL.
119
128
  To rebuild the documentation locally, run
120
129
 
121
130
  pip install -e ".[docs]"
131
+ python -m sphinx -b html docs docs/build/html
132
+
133
+ The bundled in-app help is pre-built under `timefeatures/help_html/`. To
134
+ regenerate it (e.g. after editing the `.rst` files), run
135
+
122
136
  python -m sphinx -b html docs timefeatures/help_html
123
137
 
124
138
  Use the widget help action in Orange to open the corresponding page inside the
125
139
  Orange Help window.
126
140
 
127
- Workflow Example
128
- -----
141
+ ## Workflow Example
142
+
129
143
  This is an example of how you can use this add-on.
130
144
 
131
145
  ![Workflow](https://github.com/alervgr/Orange-TimeFeatures/blob/main/imgs/workflow.png?raw=true)
@@ -21,9 +21,15 @@ docs/widgets/time-feature-constructor.rst
21
21
  docs/widgets/variable-dependency-graph.rst
22
22
  imgs/installation.png
23
23
  imgs/workflow.png
24
+ imgs/widgets/owloadfromdb.png
25
+ imgs/widgets/owsavetodb.png
26
+ imgs/widgets/owtimefeaturesconstructor.png
27
+ imgs/widgets/owvariabledependencygraph.png
24
28
  timefeatures/__init__.py
29
+ timefeatures/__version__.py
25
30
  timefeatures/help.py
26
31
  timefeatures/help_html/.buildinfo
32
+ timefeatures/help_html/.buildinfo.bak
27
33
  timefeatures/help_html/changes.html
28
34
  timefeatures/help_html/genindex.html
29
35
  timefeatures/help_html/index.html
@@ -31,6 +37,10 @@ timefeatures/help_html/installation.html
31
37
  timefeatures/help_html/objects.inv
32
38
  timefeatures/help_html/search.html
33
39
  timefeatures/help_html/searchindex.js
40
+ timefeatures/help_html/_images/owloadfromdb.png
41
+ timefeatures/help_html/_images/owsavetodb.png
42
+ timefeatures/help_html/_images/owtimefeaturesconstructor.png
43
+ timefeatures/help_html/_images/owvariabledependencygraph.png
34
44
  timefeatures/help_html/_sources/changes.rst.txt
35
45
  timefeatures/help_html/_sources/index.rst.txt
36
46
  timefeatures/help_html/_sources/installation.rst.txt
@@ -1,8 +1,18 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- Unreleased
5
- ----------
4
+ 2.2.0 — 2026-06-09
5
+ -------------------
6
+
7
+ **UX & UI Improvements**
8
+
9
+ - *New (Load from DB / Save to DB):* **Cancel button**. Long-running database operations (both table downloads and uploads) can now be aborted mid-flight. For uploads, SQLAlchemy automatically issues a ``ROLLBACK``, preventing partial or corrupted data from being written.
10
+ - *New (Load from DB):* **Data Preview**. When a dataset is selected from the dropdown, the widget now instantly fetches the first 50 rows (``LIMIT 50``) and displays them in an embedded ``QTableWidget``. This provides immediate visual confirmation of the dataset contents without having to pull the entire table into memory first.
11
+ - *Improvement (Load from DB):* **Smooth progress reporting**. The background reader now streams data in chunks (``chunksize=1000``) rather than running a single monolithic ``read_sql`` query. The progress bar updates continuously as rows arrive, preventing the UI from appearing frozen during large transfers.
12
+ - *UX:* Improved button alignment and spacing in both database widgets to avoid visual overlap. In ``Save to DB``, the Cancel button is stacked logically above the Save button for improved space usage.
13
+
14
+ 2.1.1 — 2026-06-09
15
+ -------------------
6
16
 
7
17
  **Load from DB (new widget)**
8
18
 
@@ -10,7 +10,11 @@ sys.path.insert(0, str(ROOT))
10
10
  project = "TimeFeatures"
11
11
  author = "Alejandro Rivas Garcia"
12
12
  copyright = "2026, Alejandro Rivas Garcia"
13
- release = "1.0.18"
13
+
14
+ # Read version from the single source of truth.
15
+ _version_globals = {}
16
+ exec((ROOT / "timefeatures" / "__version__.py").read_text(encoding="utf-8"), _version_globals)
17
+ release = _version_globals["__version__"]
14
18
  version = ".".join(release.split(".")[:2])
15
19
 
16
20
  # -- General configuration ------------------------------------------------
@@ -47,7 +51,7 @@ html_theme_options = {
47
51
  "description": (
48
52
  "Time-series feature engineering for Orange3: build derived "
49
53
  "variables, visualise their dependencies, and persist data to "
50
- "PostgreSQL."
54
+ "PostgreSQL or MySQL."
51
55
  ),
52
56
  "github_user": "alervgr",
53
57
  "github_repo": "Orange-TimeFeatures",
@@ -81,11 +81,20 @@ Project
81
81
  Building this documentation
82
82
  ---------------------------
83
83
 
84
+ **Development build** (for previewing locally):
85
+
84
86
  .. code-block:: bash
85
87
 
86
88
  pip install -e ".[docs]"
87
89
  python -m sphinx -b html docs docs/build/html
88
90
 
91
+ **In-app help** (bundled with the wheel so Orange's Help panel works
92
+ offline):
93
+
94
+ .. code-block:: bash
95
+
96
+ python -m sphinx -b html docs timefeatures/help_html
97
+
89
98
  The HTML build is also bundled with the wheel so Orange's in-app help
90
99
  panel can resolve every widget's *Help* action without internet
91
100
  access.
@@ -7,6 +7,11 @@ connects to a SQL database, lists the datasets previously persisted by
7
7
  ``Table`` — optionally marking the class column on the fly so no
8
8
  **Select Columns** widget is needed downstream.
9
9
 
10
+ .. figure:: ../../imgs/widgets/owloadfromdb.png
11
+ :alt: Load from DB widget interface.
12
+
13
+ The Load from DB widget.
14
+
10
15
  Inputs
11
16
  ------
12
17
 
@@ -7,6 +7,11 @@ database. Two dialects are supported out of the box:
7
7
  - **PostgreSQL** — through ``psycopg2``.
8
8
  - **MySQL** — through ``pymysql``.
9
9
 
10
+ .. figure:: ../../imgs/widgets/owsavetodb.png
11
+ :alt: Save to DB widget interface.
12
+
13
+ The Save to DB widget.
14
+
10
15
  Both drivers are reached via **SQLAlchemy**, which keeps the SQL
11
16
  generation, identifier quoting and type rendering dialect-agnostic. The
12
17
  actual upload uses a `pandas <https://pandas.pydata.org/>`_ DataFrame
@@ -6,6 +6,11 @@ categorical or text variables from existing ones via Python-style
6
6
  expressions and a family of time-window functions. It is the central
7
7
  widget for time-series feature engineering inside |addon|.
8
8
 
9
+ .. figure:: ../../imgs/widgets/owtimefeaturesconstructor.png
10
+ :alt: Time Features Constructor widget interface.
11
+
12
+ The Time Features Constructor widget.
13
+
9
14
  Inputs
10
15
  ------
11
16
 
@@ -7,6 +7,11 @@ their expressions. Edge weights reflect the time-window size used by the
7
7
  expression, making it easy to spot which derived features have the
8
8
  widest temporal footprint.
9
9
 
10
+ .. figure:: ../../imgs/widgets/owvariabledependencygraph.png
11
+ :alt: Variable Dependency Graph widget interface.
12
+
13
+ The Variable Dependency Graph widget.
14
+
10
15
  Inputs
11
16
  ------
12
17
 
Binary file
Binary file
@@ -1,8 +1,18 @@
1
1
  from setuptools import setup
2
+ from pathlib import Path
2
3
 
3
- with open('README.md', 'r', encoding='utf-8') as f:
4
+ HERE = Path(__file__).resolve().parent
5
+
6
+ with open(HERE / 'README.md', 'r', encoding='utf-8') as f:
4
7
  ABOUT = f.read()
5
8
 
9
+ # Read version from the canonical location without importing the package
10
+ # (which would trigger Qt/Orange imports during install).
11
+ _version_globals = {}
12
+ exec((HERE / "timefeatures" / "__version__.py").read_text(encoding="utf-8"), _version_globals)
13
+ VERSION = _version_globals["__version__"]
14
+
15
+
6
16
  CLASSIFIERS = [
7
17
  'Development Status :: 4 - Beta',
8
18
  'Environment :: Plugins',
@@ -41,7 +51,7 @@ setup(name="TimeFeatures",
41
51
  "Sphinx>=7.0",
42
52
  ],
43
53
  },
44
- version="2.1.0",
54
+ version=VERSION,
45
55
  author="Alejandro Rivas García",
46
56
  author_email="alejandrorivasgarcia@gmail.com",
47
57
  keywords=[
@@ -0,0 +1,5 @@
1
+ """TimeFeatures — time-series feature engineering for Orange3."""
2
+
3
+ from timefeatures.__version__ import __version__
4
+
5
+ __all__ = ["__version__"]
@@ -0,0 +1,3 @@
1
+ """Single source of truth for the package version."""
2
+
3
+ __version__ = "2.2.0"
@@ -0,0 +1,4 @@
1
+ # Sphinx build info version 1
2
+ # This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
3
+ config: 5d5faae64c7555c4eff094539ffa3250
4
+ tags: 645f666f9bcd5a90fca523b33c5a78b7
@@ -1,8 +1,18 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- Unreleased
5
- ----------
4
+ 2.2.0 — 2026-06-09
5
+ -------------------
6
+
7
+ **UX & UI Improvements**
8
+
9
+ - *New (Load from DB / Save to DB):* **Cancel button**. Long-running database operations (both table downloads and uploads) can now be aborted mid-flight. For uploads, SQLAlchemy automatically issues a ``ROLLBACK``, preventing partial or corrupted data from being written.
10
+ - *New (Load from DB):* **Data Preview**. When a dataset is selected from the dropdown, the widget now instantly fetches the first 50 rows (``LIMIT 50``) and displays them in an embedded ``QTableWidget``. This provides immediate visual confirmation of the dataset contents without having to pull the entire table into memory first.
11
+ - *Improvement (Load from DB):* **Smooth progress reporting**. The background reader now streams data in chunks (``chunksize=1000``) rather than running a single monolithic ``read_sql`` query. The progress bar updates continuously as rows arrive, preventing the UI from appearing frozen during large transfers.
12
+ - *UX:* Improved button alignment and spacing in both database widgets to avoid visual overlap. In ``Save to DB``, the Cancel button is stacked logically above the Save button for improved space usage.
13
+
14
+ 2.1.1 — 2026-06-09
15
+ -------------------
6
16
 
7
17
  **Load from DB (new widget)**
8
18
 
@@ -81,11 +81,20 @@ Project
81
81
  Building this documentation
82
82
  ---------------------------
83
83
 
84
+ **Development build** (for previewing locally):
85
+
84
86
  .. code-block:: bash
85
87
 
86
88
  pip install -e ".[docs]"
87
89
  python -m sphinx -b html docs docs/build/html
88
90
 
91
+ **In-app help** (bundled with the wheel so Orange's Help panel works
92
+ offline):
93
+
94
+ .. code-block:: bash
95
+
96
+ python -m sphinx -b html docs timefeatures/help_html
97
+
89
98
  The HTML build is also bundled with the wheel so Orange's in-app help
90
99
  panel can resolve every widget's *Help* action without internet
91
100
  access.
@@ -7,6 +7,11 @@ connects to a SQL database, lists the datasets previously persisted by
7
7
  ``Table`` — optionally marking the class column on the fly so no
8
8
  **Select Columns** widget is needed downstream.
9
9
 
10
+ .. figure:: ../../imgs/widgets/owloadfromdb.png
11
+ :alt: Load from DB widget interface.
12
+
13
+ The Load from DB widget.
14
+
10
15
  Inputs
11
16
  ------
12
17
 
@@ -7,6 +7,11 @@ database. Two dialects are supported out of the box:
7
7
  - **PostgreSQL** — through ``psycopg2``.
8
8
  - **MySQL** — through ``pymysql``.
9
9
 
10
+ .. figure:: ../../imgs/widgets/owsavetodb.png
11
+ :alt: Save to DB widget interface.
12
+
13
+ The Save to DB widget.
14
+
10
15
  Both drivers are reached via **SQLAlchemy**, which keeps the SQL
11
16
  generation, identifier quoting and type rendering dialect-agnostic. The
12
17
  actual upload uses a `pandas <https://pandas.pydata.org/>`_ DataFrame
@@ -6,6 +6,11 @@ categorical or text variables from existing ones via Python-style
6
6
  expressions and a family of time-window functions. It is the central
7
7
  widget for time-series feature engineering inside |addon|.
8
8
 
9
+ .. figure:: ../../imgs/widgets/owtimefeaturesconstructor.png
10
+ :alt: Time Features Constructor widget interface.
11
+
12
+ The Time Features Constructor widget.
13
+
9
14
  Inputs
10
15
  ------
11
16
 
@@ -7,6 +7,11 @@ their expressions. Edge weights reflect the time-window size used by the
7
7
  expression, making it easy to spot which derived features have the
8
8
  widest temporal footprint.
9
9
 
10
+ .. figure:: ../../imgs/widgets/owvariabledependencygraph.png
11
+ :alt: Variable Dependency Graph widget interface.
12
+
13
+ The Variable Dependency Graph widget.
14
+
10
15
  Inputs
11
16
  ------
12
17
 
@@ -1,5 +1,5 @@
1
1
  const DOCUMENTATION_OPTIONS = {
2
- VERSION: '1.0.18',
2
+ VERSION: '2.2.0',
3
3
  LANGUAGE: 'en',
4
4
  COLLAPSE_INDEX: false,
5
5
  BUILDER: 'html',