1{ lib
2, baycomp
3, bottleneck
4, buildPythonPackage
5, chardet
6, copyDesktopItems
7, cython
8, fetchFromGitHub
9, fetchurl
10, httpx
11, joblib
12, keyring
13, keyrings-alt
14, makeDesktopItem
15, matplotlib
16, nix-update-script
17, numpy
18, oldest-supported-numpy
19, openpyxl
20, opentsne
21, orange-canvas-core
22, orange-widget-base
23, pandas
24, pyqtgraph
25, pyqtwebengine
26, python
27, python-louvain
28, pythonOlder
29, pyyaml
30, qt5
31, qtconsole
32, recommonmark
33, requests
34, scikit-learn
35, scipy
36, serverfiles
37, setuptools
38, sphinx
39, wheel
40, xlrd
41, xlsxwriter
42}:
43
44let
45 self = buildPythonPackage rec {
46 pname = "orange3";
47 version = "3.36.2";
48
49 disabled = pythonOlder "3.7";
50
51 src = fetchFromGitHub {
52 owner = "biolab";
53 repo = "orange3";
54 rev = "refs/tags/${version}";
55 hash = "sha256-v9lk5vGhBaR2PHZ+Jq0hy1WaCsbeLe+vZlTaHBkfacU=";
56 };
57
58 postPatch = ''
59 substituteInPlace pyproject.toml \
60 --replace "setuptools>=41.0.0,<50.0" "setuptools"
61 sed -i 's;\(scikit-learn\)[^$]*;\1;g' requirements-core.txt
62 sed -i 's;pyqtgraph[^$]*;;g' requirements-gui.txt # TODO: remove after bump with a version greater than 0.13.1
63 '';
64
65 nativeBuildInputs = [
66 copyDesktopItems
67 cython
68 oldest-supported-numpy
69 qt5.wrapQtAppsHook
70 recommonmark
71 setuptools
72 sphinx
73 wheel
74 ];
75
76 enableParallelBuilding = true;
77
78 propagatedBuildInputs = [
79 numpy
80 scipy
81 chardet
82 openpyxl
83 opentsne
84 qtconsole
85 bottleneck
86 matplotlib
87 joblib
88 requests
89 keyring
90 scikit-learn
91 pandas
92 pyqtwebengine
93 serverfiles
94 orange-canvas-core
95 python-louvain
96 xlrd
97 xlsxwriter
98 httpx
99 pyqtgraph
100 orange-widget-base
101 keyrings-alt
102 pyyaml
103 baycomp
104 ];
105
106 # FIXME: ImportError: cannot import name '_variable' from partially initialized module 'Orange.data' (most likely due to a circular import) (/build/source/Orange/data/__init__.py)
107 doCheck = false;
108
109 pythonImportsCheck = [ "Orange" "Orange.data._variable" ];
110
111 desktopItems = [
112 (makeDesktopItem {
113 name = "orange";
114 exec = "orange-canvas";
115 desktopName = "Orange Data Mining";
116 genericName = "Data Mining Suite";
117 comment = "Explore, analyze, and visualize your data";
118 icon = "orange-canvas";
119 mimeTypes = [ "application/x-extension-ows" ];
120 categories = [ "Science" "Education" "ArtificialIntelligence" "DataVisualization" "NumericalAnalysis" "Qt" ];
121 keywords = [ "Machine Learning" "Scientific Visualization" "Statistical Analysis" ];
122 })
123 ];
124
125 postInstall = ''
126 wrapProgram $out/bin/orange-canvas \
127 "${"$"}{qtWrapperArgs[@]}"
128 mkdir -p $out/share/icons/hicolor/{256x256,48x48}/apps
129 cp distribute/icon-256.png $out/share/icons/hicolor/256x256/apps/orange-canvas.png
130 cp distribute/icon-48.png $out/share/icons/hicolor/48x48/apps/orange-canvas.png
131 '';
132
133 passthru = {
134 updateScript = nix-update-script { };
135 tests.unittests = self.overridePythonAttrs (old: {
136 pname = "${old.pname}-tests";
137 format = "other";
138
139 preCheck = ''
140 export HOME=$(mktemp -d)
141 export QT_PLUGIN_PATH="${qt5.qtbase.bin}/${qt5.qtbase.qtPluginPrefix}"
142 export QT_QPA_PLATFORM_PLUGIN_PATH="${qt5.qtbase.bin}/lib/qt-${qt5.qtbase.version}/plugins";
143 export QT_QPA_PLATFORM=offscreen
144
145 rm Orange -rf
146 cp -r ${self}/${python.sitePackages}/Orange .
147 chmod +w -R .
148
149 rm Orange/tests/test_url_reader.py # uses network
150 rm Orange/tests/test_ada_boost.py # broken: The 'base_estimator' parameter of AdaBoostRegressor must be an object implementing 'fit' and 'predict' or a str among {'deprecated'}. Got None instead.
151 '';
152
153 checkPhase = ''
154 runHook preCheck
155 ${python.interpreter} -m unittest -b -v ./Orange/**/test*.py
156 runHook postCheck
157 '';
158
159 postInstall = "";
160
161 doBuild = false;
162 doInstall = false;
163
164 nativeBuildInputs = [ self ] ++ old.nativeBuildInputs;
165 });
166 };
167
168 meta = with lib; {
169 description = "Data mining and visualization toolbox for novice and expert alike";
170 homepage = "https://orangedatamining.com/";
171 changelog = "https://github.com/biolab/orange3/blob/${version}/CHANGELOG.md";
172 license = with licenses; [ gpl3Plus ];
173 maintainers = with maintainers; [ lucasew ];
174 mainProgram = "orange-canvas";
175 };
176 };
177in
178self