{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.kIFMx5Jl/b1/pyfai_0.21.3+dfsg1-4_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.kIFMx5Jl/b2/pyfai_0.21.3+dfsg1-4_amd64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,5 +1,5 @@\n \n- a538d4af8bdbfb7c6fa94cf42aa07a4c 14640 science optional pyfai_0.21.3+dfsg1-4_all.deb\n- b2aa5ed8fcfc747a5a0fe65a5b9a86af 72885428 doc optional python-pyfai-doc_0.21.3+dfsg1-4_all.deb\n+ 125a5573ae6a5bcbc62cce3e9feaae13 14636 science optional pyfai_0.21.3+dfsg1-4_all.deb\n+ d1ba60f6e8d3b20f98ba6efac038bcff 72885564 doc optional python-pyfai-doc_0.21.3+dfsg1-4_all.deb\n a89bdfe2c8de6397f739a28908653bbb 13159296 debug optional python3-pyfai-dbgsym_0.21.3+dfsg1-4_amd64.deb\n 41b377bbef83c8d6ab4d35c365cfe910 2363764 python optional python3-pyfai_0.21.3+dfsg1-4_amd64.deb\n"}, {"source1": "pyfai_0.21.3+dfsg1-4_all.deb", "source2": "pyfai_0.21.3+dfsg1-4_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2023-02-22 12:27:09.000000 debian-binary\n -rw-r--r-- 0 0 0 1760 2023-02-22 12:27:09.000000 control.tar.xz\n--rw-r--r-- 0 0 0 12688 2023-02-22 12:27:09.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 12684 2023-02-22 12:27:09.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "./usr/share/man/man1/detector2nexus.1.gz", "source2": "./usr/share/man/man1/detector2nexus.1.gz", "unified_diff": null, "details": [{"source1": "detector2nexus.1", "source2": "detector2nexus.1", "unified_diff": "@@ -1,13 +1,13 @@\n .\\\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.\n .TH DETECTOR2NEXUS', \"1\" \"February 2023\" \"detector2nexus', '--version']\" \"User Commands\"\n .SH NAME\n detector2nexus', \\- Converts a detector description into a NeXus detector usable by other pyFAI utilities\n .SH DESCRIPTION\n-['/tmp/tmpqhjy7efe/detector2nexus', '\\-\\-help']\n+['/tmp/tmpa5a9gh05/detector2nexus', '\\-\\-help']\n usage: detector2nexus [options] [options] \\fB\\-o\\fR nxs.h5\n .PP\n Convert a complex detector definition (multiple modules, possibly in 3D) into\n a single NeXus detector definition together with the mask (and much more in\n the future)\n .SS \"options:\"\n .TP\n"}]}]}]}]}, {"source1": "python-pyfai-doc_0.21.3+dfsg1-4_all.deb", "source2": "python-pyfai-doc_0.21.3+dfsg1-4_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2023-02-22 12:27:09.000000 debian-binary\n -rw-r--r-- 0 0 0 11668 2023-02-22 12:27:09.000000 control.tar.xz\n--rw-r--r-- 0 0 0 72873568 2023-02-22 12:27:09.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 72873704 2023-02-22 12:27:09.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "./usr/share/doc/python-pyfai-doc/html/usage/tutorial/Separation/Separate.ipynb.gz", "source2": "./usr/share/doc/python-pyfai-doc/html/usage/tutorial/Separation/Separate.ipynb.gz", "unified_diff": null, "details": [{"source1": "Separate.ipynb", "source2": "Separate.ipynb", "unified_diff": null, "details": [{"source1": "Pretty-printed", "source2": "Pretty-printed", "comments": ["Similarity: 0.9879166666666667%", "Differences: {\"'cells'\": \"{0: {'id': 'e88298b4'}, 1: {'id': '9c24bb61'}, 2: {'id': 'ffefcc7c'}, 3: {'id': \"", " \"'19a73ad3'}, 4: {'id': '8a9d65c3'}, 5: {'id': '4418c52f'}, 6: {'id': '862b605f'}, 7: \"", " \"{'id': '1472d927'}, 8: {'id': '9c2ba19e'}, 9: {'id': 'a63f59cd'}, 10: {'id': \"", " \"'7b4ec7ae'}, 11: {'id': '2eb630a5'}, 12: {'id': 'c55124fe'}, 13: {'id': 'af388f53'}, \"", " \"14: {'id': '6866b672'}, 15: {'id': 'e94a8170'}, 16: {'id': 'f0eb6fb8'}, 17: {'id': \"", " \"'cbf27706'}, 1 [\u2026]"], "unified_diff": "@@ -1,32 +1,32 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"97db0048\",\n+ \"id\": \"e88298b4\",\n \"metadata\": {},\n \"source\": [\n \"# Signal separation between amorphous and crystalline phases\\n\",\n \"\\n\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n- \"id\": \"52b3f5a5\",\n+ \"id\": \"9c24bb61\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"%matplotlib nbagg\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 2,\n- \"id\": \"b91a6a60\",\n+ \"id\": \"ffefcc7c\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"Using pyFAI version 0.21.0-dev0\\n\"\n@@ -54,15 +54,15 @@\n \"print(f\\\"Using pyFAI version {pyFAI.version}\\\")\\n\",\n \"#print(fabio.open(image_file).header[\\\"_array_data.header_contents\\\"])\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 3,\n- \"id\": \"0f8ca34d\",\n+ \"id\": \"19a73ad3\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"data\": {\n \"text/plain\": [\n \"Detector Pilatus 6M\\t PixelSize= 1.720e-04, 1.720e-04 m\\n\",\n \"Wavelength= 1.033200e-10m\\n\",\n@@ -84,15 +84,15 @@\n \"ai.detector = pyFAI.detector_factory(\\\"Pilatus6M\\\")\\n\",\n \"ai\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 4,\n- \"id\": \"dee841c2\",\n+ \"id\": \"8a9d65c3\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"data\": {\n \"application/javascript\": [\n \"/* Put everything inside the global mpl namespace */\\n\",\n \"/* global mpl */\\n\",\n@@ -1069,24 +1069,24 @@\n \"fig,ax = subplots(figsize=(9,9))\\n\",\n \"jupyter.display(img, ax=ax)\\n\",\n \"pass\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"fc57ad25\",\n+ \"id\": \"4418c52f\",\n \"metadata\": {},\n \"source\": [\n \"## 0. 1D and 2D integration\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 5,\n- \"id\": \"dc1efd08\",\n+ \"id\": \"862b605f\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"data\": {\n \"application/javascript\": [\n \"/* Put everything inside the global mpl namespace */\\n\",\n \"/* global mpl */\\n\",\n@@ -2078,30 +2078,30 @@\n \"jupyter.plot2d(int2, ax=ax[1])\\n\",\n \"ax[0].set_xlim(int2.radial.min(), int2.radial.max())\\n\",\n \"pass\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"6e5511ed\",\n+ \"id\": \"1472d927\",\n \"metadata\": {},\n \"source\": [\n \"## 1. Separation based on 2D integration\\n\",\n \"\\n\",\n \"Two methods are readily available in pyFAI, they perform filtering the 2D regrouped image along a vertical axis:\\n\",\n \"* median filtering: simple median along azimuthal angle\\n\",\n \"* sigma clipping: iterative removal of all pixels above n standard deviation\\n\",\n \"\\n\",\n \"The drawback is in the 2D integration: costly in time and smears pixel together.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 6,\n- \"id\": \"1ee1c9b2\",\n+ \"id\": \"9c2ba19e\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"data\": {\n \"application/javascript\": [\n \"/* Put everything inside the global mpl namespace */\\n\",\n \"/* global mpl */\\n\",\n@@ -3108,29 +3108,29 @@\n \"ax.plot(sc2.radial, sc2.intensity, label=\\\"sigma-clip (legacy)\\\")\\n\",\n \"ax.legend()\\n\",\n \"pass\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"f6466626\",\n+ \"id\": \"a63f59cd\",\n \"metadata\": {},\n \"source\": [\n \"## 2. Separation based on 1D integration:\\n\",\n \"\\n\",\n \"1D CSR integrator contain all the information to perform the sigma-clipping. This has been implemented in OpenCL and can be performed up to thousands of times per second.\\n\",\n \"\\n\",\n \"* Available using OpenCL (no cython yet)\\n\",\n \"* Presentation of how it can be implemented is explained later in the demonstration\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 7,\n- \"id\": \"c4f5ba00\",\n+ \"id\": \"7b4ec7ae\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"data\": {\n \"application/javascript\": [\n \"/* Put everything inside the global mpl namespace */\\n\",\n \"/* global mpl */\\n\",\n@@ -4131,26 +4131,26 @@\n \"ax.plot(sc100.radial, sc100.intensity, label=\\\"sigma-clip 100pts\\\")\\n\",\n \"ax.legend()\\n\",\n \"pass\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"7d9dd267\",\n+ \"id\": \"2eb630a5\",\n \"metadata\": {},\n \"source\": [\n \"## 3. Rebuild the isotropic and anisotropic contribution\\n\",\n \"\\n\",\n \"Isotropic images are simply obtained from bilinear interpolation from 1D curves.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 8,\n- \"id\": \"e20137af\",\n+ \"id\": \"c55124fe\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"data\": {\n \"application/javascript\": [\n \"/* Put everything inside the global mpl namespace */\\n\",\n \"/* global mpl */\\n\",\n@@ -5129,15 +5129,15 @@\n \"jupyter.display(isotropic, label=\\\"Anisotropic contribution\\\")\\n\",\n \"pass\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 9,\n- \"id\": \"67264599\",\n+ \"id\": \"af388f53\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"data\": {\n \"application/javascript\": [\n \"/* Put everything inside the global mpl namespace */\\n\",\n \"/* global mpl */\\n\",\n@@ -6115,15 +6115,15 @@\n \"jupyter.display(aniso, label=\\\"Anisotropic contribution\\\")\\n\",\n \"pass\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 10,\n- \"id\": \"c9f451c3\",\n+ \"id\": \"6866b672\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"data\": {\n \"application/javascript\": [\n \"/* Put everything inside the global mpl namespace */\\n\",\n \"/* global mpl */\\n\",\n@@ -7104,26 +7104,26 @@\n \"jupyter.display(bragg, label=\\\"Bragg\\\", ax=ax[0])\\n\",\n \"jupyter.display(amorphous, label=\\\"Amorphous\\\", ax=ax[1])\\n\",\n \"pass\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"d766b25b\",\n+ \"id\": \"e94a8170\",\n \"metadata\": {},\n \"source\": [\n \"## 4. Implementation of sigma-clipping using pure 1D integrators.\\n\",\n \"\\n\",\n \"This is a workaround until it is implemented in pyFAI. The procedure mimics what is running in OpenCL.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 11,\n- \"id\": \"6c4a89f7\",\n+ \"id\": \"f0eb6fb8\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"def sigma_clip_ng(ai, img, npt, method, unit=\\\"q_nm^-1\\\", error_model=None, thres=5, max_iter=5):\\n\",\n \" img = img.astype(numpy.float32) #also explicit copy\\n\",\n \" if error_model!=\\\"poisson\\\":\\n\",\n \" raise RuntimeError(\\\"Only Poissonian detector are supported for now\\\")\\n\",\n@@ -7137,15 +7137,15 @@\n \" img[discard] = numpy.NaN\\n\",\n \" return res1d\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 12,\n- \"id\": \"cfe932c8\",\n+ \"id\": \"cbf27706\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"data\": {\n \"application/javascript\": [\n \"/* Put everything inside the global mpl namespace */\\n\",\n \"/* global mpl */\\n\",\n@@ -8147,15 +8147,15 @@\n \"ax.plot(sc100.radial, sc100.intensity, label=\\\"sigma-clip 100pts\\\")\\n\",\n \"ax.legend()\\n\",\n \"pass\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"ddfe04af\",\n+ \"id\": \"d7020206\",\n \"metadata\": {},\n \"source\": [\n \"## 5. Towards lossy compression of single crystal diffraction data\\n\",\n \"\\n\",\n \"For now only available as OpenCL code. \\n\",\n \"\\n\",\n \"Also available as command line tool, see `man sparsify-Bragg`:\\n\",\n@@ -8164,15 +8164,15 @@\n \"* 2000 pixels with signal above the background\\n\",\n \"* 100 radial bins with intensity and associated deviation\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 13,\n- \"id\": \"6bd6f94e\",\n+ \"id\": \"272c52a3\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"IntegrationMethod(1d int, no split, CSR, cython)\\n\",\n@@ -8198,15 +8198,15 @@\n \"%time sep = peak_finder(img, error_model=\\\"poisson\\\")\\n\",\n \"print(f\\\"Number of Bragg pixels found: {len(sep.index)}\\\")\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 14,\n- \"id\": \"32a2eac1\",\n+ \"id\": \"26126e3b\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"CPU times: user 349 ms, sys: 27.6 ms, total: 377 ms\\n\",\n@@ -8225,15 +8225,15 @@\n \"restored_flat[sep.index] = sep.intensity\\n\",\n \"restored = numpy.round(restored).astype(numpy.int32)\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 15,\n- \"id\": \"e573053e\",\n+ \"id\": \"391b08f8\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"data\": {\n \"application/javascript\": [\n \"/* Put everything inside the global mpl namespace */\\n\",\n \"/* global mpl */\\n\",\n@@ -9212,15 +9212,15 @@\n \"jupyter.display(restored, label=\\\"Restored\\\", ax=ax[1])\\n\",\n \"pass\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 16,\n- \"id\": \"552cf2e2\",\n+ \"id\": \"ea5ac05e\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"The compression ratio would be : 160.968x\\n\"\n@@ -9231,30 +9231,30 @@\n \"raw_size = img.nbytes\\n\",\n \"cmp_size = sep.index.nbytes + sep.intensity.nbytes + sep.background_avg.nbytes + sep.background_std.nbytes\\n\",\n \"print(f\\\"The compression ratio would be : {raw_size/cmp_size:.3f}x\\\")\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"9141008d\",\n+ \"id\": \"2dedf6d1\",\n \"metadata\": {},\n \"source\": [\n \"## 6. Conclusion\\n\",\n \"\\n\",\n \"This tutorial explains how single crystal diffraction images can be treated to separate the amorphous content from Bragg peaks.\\n\",\n \"The first method has extensively been described in `J Kieffer & J.P. Wright; Powder Diffraction (2013) 28 (S2), pp339-350`\\n\",\n \"Subsequent ones have been developed with Gavin Vaughan (ESRF ID15) and Daniele De Sanctis (ESRF ID29).\\n\",\n \"Those methods open the door to lossy compression in the world of single crystal diffraction with compression rates above 100x which makes them appealing for serial-crystallography applications where bandwidth is critical. \\n\",\n \"First experimentation shows a limited degradation of \"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 17,\n- \"id\": \"65fa7461\",\n+ \"id\": \"19769e29\",\n \"metadata\": {},\n \"outputs\": [\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"Total execution time: 9.682s \\n\"\n"}]}]}]}]}]}]}