limelight-app 0.0.1__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 (150) hide show
  1. limelight_app-0.0.1/.gitattributes +36 -0
  2. limelight_app-0.0.1/.github/workflows/build-installers.yml +144 -0
  3. limelight_app-0.0.1/.github/workflows/publish.yml +54 -0
  4. limelight_app-0.0.1/.gitignore +8 -0
  5. limelight_app-0.0.1/.vscode/launch.json +29 -0
  6. limelight_app-0.0.1/CHANGELOG.md +33 -0
  7. limelight_app-0.0.1/LICENSE +21 -0
  8. limelight_app-0.0.1/PKG-INFO +89 -0
  9. limelight_app-0.0.1/README.md +55 -0
  10. limelight_app-0.0.1/examples/create_example00_simple_physicalmeasurements.py +321 -0
  11. limelight_app-0.0.1/examples/create_example01_lotka_volterra.py +748 -0
  12. limelight_app-0.0.1/examples/create_example02_signal_filters.py +344 -0
  13. limelight_app-0.0.1/examples/create_example03_story_images.py +60 -0
  14. limelight_app-0.0.1/examples/create_example10_ukhprhp_timeseries.py +558 -0
  15. limelight_app-0.0.1/examples/create_example20_wiki.py +237 -0
  16. limelight_app-0.0.1/examples/create_example30_largedataset.py +106 -0
  17. limelight_app-0.0.1/examples/create_example31_style_gallery.py +323 -0
  18. limelight_app-0.0.1/examples/create_example90_performance_test.py +322 -0
  19. limelight_app-0.0.1/examples/example01_lotka_volterra/images/fox.png +0 -0
  20. limelight_app-0.0.1/examples/example01_lotka_volterra/images/rabbit.png +0 -0
  21. limelight_app-0.0.1/examples/example03_story_images/story/images/bench-rig.jpg +0 -0
  22. limelight_app-0.0.1/examples/example03_story_images/story/images/signal-path.png +0 -0
  23. limelight_app-0.0.1/examples/example03_story_images/story/index.md +68 -0
  24. limelight_app-0.0.1/examples/example10_ukhprhp_data/bank of england interest rates/Bank Rate history and data Bank of England Database.csv +260 -0
  25. limelight_app-0.0.1/examples/example10_ukhprhp_data/bank of england interest rates/data.csv +870 -0
  26. limelight_app-0.0.1/examples/example10_ukhprhp_data/gov.uk - Private rent and house prices/Figure_2__Annual_house_price_inflation_is_highest_in_the_North_East_.csv +17 -0
  27. limelight_app-0.0.1/examples/example10_ukhprhp_data/gov.uk - Private rent and house prices/Figure_5__The_North_East_was_the_English_region_with_the_highest_annual_rent_inflation_.csv +17 -0
  28. house prices, UK July 2026.pdf +0 -0
  29. house prices/datadownload (1).xlsx +0 -0
  30. house prices/datadownload (2).xlsx +0 -0
  31. house prices/datadownload (3).xlsx +0 -0
  32. house prices/datadownload (4).xlsx +0 -0
  33. house prices/datadownload.xlsx +0 -0
  34. limelight_app-0.0.1/examples/example10_ukhprhp_data/gov.uk - Private rent and house prices/fig1_hp.csv +134 -0
  35. limelight_app-0.0.1/examples/example10_ukhprhp_data/rpi/series-110826.csv +1183 -0
  36. limelight_app-0.0.1/examples/example10_ukhprhp_data/rpi/src.txt +1 -0
  37. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia.html +4513 -0
  38. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/enwiki-25.svg +1 -0
  39. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/load(1).php +23 -0
  40. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/load(2).php +1 -0
  41. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/load.php +1 -0
  42. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/mediawiki_compact.svg +30 -0
  43. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/wikimedia.svg +1 -0
  44. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/wikipedia-tagline-en-25.svg +1 -0
  45. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/wikipedia-wordmark-en-25.svg +1 -0
  46. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia.html +1088 -0
  47. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/Unemployed_men_queued_outside_a_depression_soup_kitchen_opened_in_Chicago_by_Al_Capone,_02-1931_-_NARA_-_541927.jpg +0 -0
  48. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/enwiki-25.svg +1 -0
  49. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/load(1).php +23 -0
  50. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/load(2).php +1 -0
  51. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/load.php +1 -0
  52. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/mediawiki_compact.svg +30 -0
  53. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/wikimedia.svg +1 -0
  54. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/wikipedia-tagline-en-25.svg +1 -0
  55. limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/wikipedia-wordmark-en-25.svg +1 -0
  56. limelight_app-0.0.1/examples/largeseries_demo.py +77 -0
  57. limelight_app-0.0.1/key.txt +0 -0
  58. limelight_app-0.0.1/packaging/README.md +106 -0
  59. limelight_app-0.0.1/packaging/limelight.spec +148 -0
  60. limelight_app-0.0.1/packaging/limelight_entry.py +55 -0
  61. limelight_app-0.0.1/packaging/linux/build_linux_packages.sh +152 -0
  62. limelight_app-0.0.1/packaging/linux/limelight-mime.xml +20 -0
  63. limelight_app-0.0.1/packaging/linux/limelight.desktop +12 -0
  64. limelight_app-0.0.1/packaging/linux/limelight.png +0 -0
  65. limelight_app-0.0.1/packaging/macos/build_dmg.sh +60 -0
  66. limelight_app-0.0.1/packaging/make_icons.py +124 -0
  67. limelight_app-0.0.1/packaging/windows/limelight.ico +0 -0
  68. limelight_app-0.0.1/packaging/windows/limelight.iss +64 -0
  69. limelight_app-0.0.1/pyproject.toml +77 -0
  70. limelight_app-0.0.1/setup.cfg +4 -0
  71. limelight_app-0.0.1/src/limelight/__init__.py +119 -0
  72. limelight_app-0.0.1/src/limelight/__main__.py +13 -0
  73. limelight_app-0.0.1/src/limelight/app.py +1192 -0
  74. limelight_app-0.0.1/src/limelight/assets/limelight-icon.svg +16 -0
  75. limelight_app-0.0.1/src/limelight/cli.py +237 -0
  76. limelight_app-0.0.1/src/limelight/dhall_subset.py +878 -0
  77. limelight_app-0.0.1/src/limelight/gui_cli.py +59 -0
  78. limelight_app-0.0.1/src/limelight/images.py +175 -0
  79. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-00-core.dhall +86 -0
  80. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-01-document.dhall +84 -0
  81. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-02-coredata.dhall +93 -0
  82. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-02-datasets.dhall +136 -0
  83. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-03-datasets.dhall +75 -0
  84. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-04-transform.dhall +15 -0
  85. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-00-types.dhall +39 -0
  86. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-10-figurespec.dhall +28 -0
  87. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-11-figurespec-axes.dhall +79 -0
  88. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-12-figurespec-plotartists.dhall +81 -0
  89. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-20-figureview.dhall +36 -0
  90. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-25-map.dhall +57 -0
  91. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-26-tableview.dhall +61 -0
  92. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-30-form.dhall +27 -0
  93. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure.dhall +69 -0
  94. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-06-assets.dhall +75 -0
  95. limelight_app-0.0.1/src/limelight/language-reference/limelight-v1.dhall +55 -0
  96. limelight_app-0.0.1/src/limelight/largeseries/__init__.py +37 -0
  97. limelight_app-0.0.1/src/limelight/largeseries/arraysource.py +77 -0
  98. limelight_app-0.0.1/src/limelight/largeseries/cache.py +274 -0
  99. limelight_app-0.0.1/src/limelight/largeseries/cachedir.py +29 -0
  100. limelight_app-0.0.1/src/limelight/largeseries/constants.py +21 -0
  101. limelight_app-0.0.1/src/limelight/largeseries/exceptions.py +14 -0
  102. limelight_app-0.0.1/src/limelight/largeseries/hashing.py +20 -0
  103. limelight_app-0.0.1/src/limelight/largeseries/memo.py +104 -0
  104. limelight_app-0.0.1/src/limelight/largeseries/mpl.py +126 -0
  105. limelight_app-0.0.1/src/limelight/largeseries/pyramid.py +161 -0
  106. limelight_app-0.0.1/src/limelight/largeseries/query.py +180 -0
  107. limelight_app-0.0.1/src/limelight/largeseries/timing.py +33 -0
  108. limelight_app-0.0.1/src/limelight/largeseries_bridge.py +109 -0
  109. limelight_app-0.0.1/src/limelight/ll.py +50 -0
  110. limelight_app-0.0.1/src/limelight/logging_config.py +91 -0
  111. limelight_app-0.0.1/src/limelight/pdf_export.py +681 -0
  112. limelight_app-0.0.1/src/limelight/qt_app.py +4676 -0
  113. limelight_app-0.0.1/src/limelight/reader.py +211 -0
  114. limelight_app-0.0.1/src/limelight/refs.py +149 -0
  115. limelight_app-0.0.1/src/limelight/semantic.py +647 -0
  116. limelight_app-0.0.1/src/limelight/settings.py +31 -0
  117. limelight_app-0.0.1/src/limelight/signing.py +145 -0
  118. limelight_app-0.0.1/src/limelight/story_markdown.py +518 -0
  119. limelight_app-0.0.1/src/limelight/util.py +0 -0
  120. limelight_app-0.0.1/src/limelight/writer.py +2608 -0
  121. limelight_app-0.0.1/src/limelight_app.egg-info/PKG-INFO +89 -0
  122. limelight_app-0.0.1/src/limelight_app.egg-info/SOURCES.txt +148 -0
  123. limelight_app-0.0.1/src/limelight_app.egg-info/dependency_links.txt +1 -0
  124. limelight_app-0.0.1/src/limelight_app.egg-info/entry_points.txt +6 -0
  125. limelight_app-0.0.1/src/limelight_app.egg-info/requires.txt +9 -0
  126. limelight_app-0.0.1/src/limelight_app.egg-info/scm_file_list.json +144 -0
  127. limelight_app-0.0.1/src/limelight_app.egg-info/scm_version.json +8 -0
  128. limelight_app-0.0.1/src/limelight_app.egg-info/top_level.txt +1 -0
  129. limelight_app-0.0.1/tests/largeseries/test_cache.py +167 -0
  130. limelight_app-0.0.1/tests/largeseries/test_cachedir.py +61 -0
  131. limelight_app-0.0.1/tests/largeseries/test_hashing.py +40 -0
  132. limelight_app-0.0.1/tests/largeseries/test_memo.py +76 -0
  133. limelight_app-0.0.1/tests/largeseries/test_mpl.py +97 -0
  134. limelight_app-0.0.1/tests/largeseries/test_pyramid.py +99 -0
  135. limelight_app-0.0.1/tests/largeseries/test_query.py +108 -0
  136. limelight_app-0.0.1/tests/test_archive_roundtrip.py +79 -0
  137. limelight_app-0.0.1/tests/test_dhall_subset.py +329 -0
  138. limelight_app-0.0.1/tests/test_examples_build.py +59 -0
  139. limelight_app-0.0.1/tests/test_figure_numbering.py +161 -0
  140. limelight_app-0.0.1/tests/test_images.py +104 -0
  141. limelight_app-0.0.1/tests/test_largeseries_integration.py +115 -0
  142. limelight_app-0.0.1/tests/test_ll.py +34 -0
  143. limelight_app-0.0.1/tests/test_page_geometry.py +229 -0
  144. limelight_app-0.0.1/tests/test_pdf_export.py +283 -0
  145. limelight_app-0.0.1/tests/test_rect_decorator.py +114 -0
  146. limelight_app-0.0.1/tests/test_signing.py +74 -0
  147. limelight_app-0.0.1/tests/test_story_images.py +226 -0
  148. limelight_app-0.0.1/tests/test_story_markdown.py +299 -0
  149. limelight_app-0.0.1/tests/test_writer_text.py +43 -0
  150. limelight_app-0.0.1/uv.lock +1472 -0
@@ -0,0 +1,36 @@
1
+ # Line endings.
2
+ #
3
+ # This repository was carried between a Windows machine and a Linux one without
4
+ # its history, and arrived with roughly two thirds of its text files stored as
5
+ # CRLF and the rest as LF. Nothing enforced either, so any tool that rewrote a
6
+ # file could silently convert one to the other and turn a small edit into a
7
+ # whole-file diff.
8
+ #
9
+ # `text=auto` settles it: Git stores every text file with LF, and checks it out
10
+ # with whatever the platform expects - CRLF on Windows where core.autocrlf is
11
+ # set, LF here. The two working copies can now disagree about endings on disk
12
+ # without disagreeing about the file.
13
+ * text=auto
14
+
15
+ # Formats where a byte that looks like a line ending is data, not formatting.
16
+ *.png binary
17
+ *.jpg binary
18
+ *.jpeg binary
19
+ *.ico binary
20
+ *.icns binary
21
+ *.h5 binary
22
+ *.pdf binary
23
+ *.limelight binary
24
+
25
+ # Stated explicitly rather than left to autodetection, so the intent survives a
26
+ # file that happens to start with something that looks binary.
27
+ *.py text
28
+ *.dhall text
29
+ *.md text
30
+ *.txt text
31
+ *.toml text
32
+ *.yml text
33
+ *.json text
34
+ *.csv text
35
+ *.html text
36
+ *.hs text
@@ -0,0 +1,144 @@
1
+ name: Build installers
2
+
3
+ # Installers cannot be cross-compiled: PyInstaller freezes the interpreter and
4
+ # shared libraries of the machine it runs on, so each target needs its own
5
+ # runner.
6
+
7
+ on:
8
+ push:
9
+ tags:
10
+ - "v*"
11
+ workflow_dispatch:
12
+ inputs:
13
+ version:
14
+ description: "Version string for the artifact names"
15
+ required: false
16
+ default: "0.0.1"
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ jobs:
22
+ version:
23
+ runs-on: ubuntu-latest
24
+ outputs:
25
+ value: ${{ steps.resolve.outputs.value }}
26
+ steps:
27
+ - id: resolve
28
+ shell: bash
29
+ run: |
30
+ if [ "${GITHUB_REF_TYPE}" = "tag" ]; then
31
+ echo "value=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
32
+ else
33
+ echo "value=${{ inputs.version || '0.0.1' }}" >> "$GITHUB_OUTPUT"
34
+ fi
35
+
36
+ build:
37
+ needs: version
38
+ strategy:
39
+ fail-fast: false
40
+ matrix:
41
+ include:
42
+ - os: ubuntu-22.04
43
+ target: linux
44
+ - os: windows-latest
45
+ target: windows
46
+ - os: macos-14
47
+ target: macos
48
+ runs-on: ${{ matrix.os }}
49
+ steps:
50
+ - uses: actions/checkout@v7
51
+ with:
52
+ # setuptools-scm reads the version from the tags.
53
+ fetch-depth: 0
54
+
55
+ - uses: actions/setup-python@v7
56
+ with:
57
+ python-version: "3.12"
58
+
59
+ - name: Install project and build tools
60
+ shell: bash
61
+ run: |
62
+ python -m pip install --upgrade pip
63
+ python -m pip install -e .
64
+ python -m pip install pyinstaller
65
+
66
+ # Qt's GUI library links libEGL and libGL even for offscreen rendering,
67
+ # and the runner image has neither; libfuse2 is for the AppImage.
68
+ - name: Install Linux packaging dependencies
69
+ if: matrix.target == 'linux'
70
+ run: |
71
+ sudo apt-get update
72
+ sudo apt-get install -y --no-install-recommends \
73
+ libegl1 libgl1 libxkbcommon0 libfontconfig1 libdbus-1-3 libfuse2
74
+
75
+ # Renders with Qt and Pillow, so no runner needs extra tools. Only macOS
76
+ # has iconutil, so only there does it also produce the .icns.
77
+ - name: Build icons
78
+ run: python packaging/make_icons.py
79
+
80
+ - name: Build the application bundle
81
+ env:
82
+ LIMELIGHT_VERSION: ${{ needs.version.outputs.value }}
83
+ run: pyinstaller packaging/limelight.spec --noconfirm
84
+
85
+ # --------------------------------------------------------------- Linux
86
+ - name: Build .deb and AppImage
87
+ if: matrix.target == 'linux'
88
+ run: packaging/linux/build_linux_packages.sh "${{ needs.version.outputs.value }}"
89
+
90
+ # ------------------------------------------------------------- Windows
91
+ - name: Install Inno Setup
92
+ if: matrix.target == 'windows'
93
+ run: choco install innosetup --no-progress -y
94
+
95
+ - name: Build the Windows installer
96
+ if: matrix.target == 'windows'
97
+ shell: cmd
98
+ run: iscc /DAppVersion=${{ needs.version.outputs.value }} packaging\windows\limelight.iss
99
+
100
+ # --------------------------------------------------------------- macOS
101
+ - name: Build the disk image
102
+ if: matrix.target == 'macos'
103
+ run: packaging/macos/build_dmg.sh "${{ needs.version.outputs.value }}"
104
+
105
+ - uses: actions/upload-artifact@v7
106
+ with:
107
+ name: limelight-${{ matrix.target }}
108
+ path: dist/installer/*
109
+ if-no-files-found: error
110
+
111
+ # A tag push also publishes the three installers as a GitHub Release, with
112
+ # the matching section of CHANGELOG.md as its notes. Manual runs only leave
113
+ # workflow artifacts, so a test build never creates a release.
114
+ release:
115
+ needs: [version, build]
116
+ if: github.ref_type == 'tag'
117
+ runs-on: ubuntu-latest
118
+ permissions:
119
+ contents: write
120
+ steps:
121
+ - uses: actions/checkout@v7
122
+
123
+ - uses: actions/download-artifact@v8
124
+ with:
125
+ pattern: limelight-*
126
+ path: dist/installer
127
+ merge-multiple: true
128
+
129
+ - name: Extract the release notes from the changelog
130
+ shell: bash
131
+ run: |
132
+ version="${{ needs.version.outputs.value }}"
133
+ awk -v v="$version" '/^## \[/ { p = index($0, "[" v "]") > 0 } p' CHANGELOG.md > notes.md
134
+ if [ ! -s notes.md ]; then
135
+ echo "Limelight $version" > notes.md
136
+ fi
137
+ cat notes.md
138
+
139
+ - uses: softprops/action-gh-release@v3
140
+ with:
141
+ name: Limelight ${{ needs.version.outputs.value }}
142
+ body_path: notes.md
143
+ files: dist/installer/*
144
+ fail_on_unmatched_files: true
@@ -0,0 +1,54 @@
1
+ name: Publish to PyPI
2
+
3
+ # A pushed v* tag uploads the sdist and wheel to PyPI through Trusted
4
+ # Publishing: PyPI accepts this workflow's OIDC token in place of an API
5
+ # token, so there is no secret to store. The workflow file name and the
6
+ # environment name below are what the publisher on PyPI is registered
7
+ # against; change either and the upload is refused.
8
+ #
9
+ # There is deliberately no manual trigger. A release on PyPI cannot be
10
+ # replaced, so the only way to publish is the tag that names the version.
11
+
12
+ on:
13
+ push:
14
+ tags:
15
+ - "v*"
16
+
17
+ permissions:
18
+ contents: read
19
+
20
+ jobs:
21
+ publish:
22
+ runs-on: ubuntu-latest
23
+ environment: pypi
24
+ # A job-level permissions block replaces the workflow's, so contents has
25
+ # to be repeated here or the checkout cannot read the repository.
26
+ permissions:
27
+ contents: read
28
+ id-token: write
29
+ steps:
30
+ - uses: actions/checkout@v7
31
+ with:
32
+ # setuptools-scm reads the version from the tags.
33
+ fetch-depth: 0
34
+
35
+ - uses: astral-sh/setup-uv@v10.1.0
36
+
37
+ - name: Build the sdist and wheel
38
+ run: uv build
39
+
40
+ # The version comes from the tag, so a mismatch here means the tag is
41
+ # not on a clean release commit. Better to stop than to upload a
42
+ # 0.0.2.dev0 that can never be removed.
43
+ - name: Check the built version matches the tag
44
+ run: |
45
+ expected="limelight_app-${GITHUB_REF_NAME#v}"
46
+ ls dist
47
+ for file in dist/*; do
48
+ case "$(basename "$file")" in
49
+ "$expected".tar.gz | "$expected"-py3-none-any.whl) ;;
50
+ *) echo "::error::$file does not match tag $GITHUB_REF_NAME"; exit 1 ;;
51
+ esac
52
+ done
53
+
54
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,8 @@
1
+ .venv
2
+ __pycache__
3
+ _build/examples/example01-lotka-volterra.limelight
4
+ _build
5
+ dist/
6
+ build/
7
+ .pytest_cache/
8
+ *.egg-info/
@@ -0,0 +1,29 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+
8
+ {
9
+ "name": "limelight: example20-wiki.limelight",
10
+ "type": "debugpy",
11
+ "request": "launch",
12
+ "program": "src/limelight/__main__.py",
13
+ "cwd": "${workspaceFolder}",
14
+ "console": "integratedTerminal",
15
+ "args": [
16
+ //"_build/examples/example20-wiki.limelight"
17
+ "_build/examples/example30-largedataset.limelight"
18
+ ]
19
+ },
20
+
21
+ {
22
+ "name": "Python Debugger: Current File",
23
+ "type": "debugpy",
24
+ "request": "launch",
25
+ "program": "${file}",
26
+ "console": "integratedTerminal"
27
+ },
28
+ ]
29
+ }
@@ -0,0 +1,33 @@
1
+ # Changelog
2
+
3
+ Notable changes to Limelight. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow
5
+ [Semantic Versioning](https://semver.org/) once past 1.0; before that, minor
6
+ versions may break things.
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.0.1] - 2026-09-11
11
+
12
+ First release on PyPI, as `limelight-app`.
13
+
14
+ ### Added
15
+
16
+ - The `.limelight` package format: a folder or archive holding a Dhall
17
+ manifest, CSV and HDF5 datasets, figure specs, image assets, and a Markdown
18
+ story that walks a reader through the analysis. The language reference in
19
+ `src/limelight/language-reference/` defines it.
20
+ - `limelight.writer`, the Python library that builds packages, and
21
+ `limelight.reader`, which opens them without the app.
22
+ - The desktop app (`limelight-gui`): story, figures, datasets and control
23
+ parameters, with PDF export of the story.
24
+ - `limelight-cli` with `summary`, `verify`, `json` and `pdf` subcommands, and
25
+ `LL` as a short form of both commands.
26
+ - A built-in evaluator for the subset of Dhall that manifests use, so reading
27
+ a package needs no `dhall-to-json`; the tool is only consulted for
28
+ hand-written manifests that go beyond that subset.
29
+ - Native installers for Windows, macOS and Linux under `packaging/`, with
30
+ `.limelight` file associations.
31
+
32
+ [Unreleased]: https://github.com/mikehulluk/limelight/compare/v0.0.1...HEAD
33
+ [0.0.1]: https://github.com/mikehulluk/limelight/releases/tag/v0.0.1
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mike Hull
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,89 @@
1
+ Metadata-Version: 2.4
2
+ Name: limelight-app
3
+ Version: 0.0.1
4
+ Summary: A portable package format for data-driven figures and analysis stories, and a desktop app for reading them.
5
+ Author-email: Mike Hull <mikehulluk@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/mikehulluk/limelight
8
+ Project-URL: Source, https://github.com/mikehulluk/limelight
9
+ Project-URL: Issues, https://github.com/mikehulluk/limelight/issues
10
+ Keywords: data,visualization,figures,plots,story,report,dhall,matplotlib,qt
11
+ Classifier: Development Status :: 2 - Pre-Alpha
12
+ Classifier: Environment :: X11 Applications :: Qt
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Intended Audience :: Education
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Scientific/Engineering :: Visualization
21
+ Requires-Python: >=3.10
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: cryptography>=42.0
25
+ Requires-Dist: h5py>=3.10
26
+ Requires-Dist: linkify-it-py>=2.0
27
+ Requires-Dist: markdown-it-py[linkify]>=4.0
28
+ Requires-Dist: matplotlib>=3.8
29
+ Requires-Dist: mdit-py-plugins>=0.6
30
+ Requires-Dist: numpy>=1.26
31
+ Requires-Dist: pillow>=10.0
32
+ Requires-Dist: PySide6>=6.6
33
+ Dynamic: license-file
34
+
35
+ # Limelight
36
+
37
+ Limelight is a portable package format for data-driven figures and analysis
38
+ stories, and a desktop app for reading them.
39
+
40
+ A Limelight package is a folder, or a `.limelight` archive with the same
41
+ layout, holding a `project.dhall` manifest alongside the datasets it
42
+ describes, the figure specs drawn from them, and a story that walks a reader
43
+ through the analysis. The app opens either form, validates the manifest,
44
+ resolves the data, renders the figures, and follows the story.
45
+
46
+ Packages are meant to be produced by libraries and tools rather than by hand;
47
+ `limelight.writer` is the Python library for building them, and
48
+ `limelight.reader` for opening them without the app.
49
+
50
+ ## Installing
51
+
52
+ ```bash
53
+ pip install limelight-app
54
+ ```
55
+
56
+ The distribution is `limelight-app` (PyPI would not allow plain `limelight`),
57
+ but the package imports as `limelight` and the commands are named as below.
58
+
59
+ A package's `project.dhall` manifest is read by a built-in evaluator, so
60
+ nothing beyond the Python dependencies is needed. A hand-written manifest
61
+ that uses Dhall features beyond what the writer emits (functions, `if`,
62
+ `merge`, interpolation) is handed to `dhall-to-json` instead, if one is on
63
+ `PATH` or named by `LIMELIGHT_DHALL_TO_JSON`.
64
+
65
+ Native installers for Windows, macOS and Linux are built by `packaging/`;
66
+ see `packaging/README.md`.
67
+
68
+ ## Using it
69
+
70
+ ```bash
71
+ limelight-gui example.limelight # open a package in the desktop app
72
+ limelight-cli summary example.limelight # print a summary of a package
73
+ limelight-cli verify example.limelight # validate one or more packages
74
+ limelight-cli pdf example.limelight # render a package's story to PDF
75
+ ```
76
+
77
+ `LL` is the short form of both: `LL example.limelight` opens the app, and
78
+ `LL verify example.limelight` (or `summary`, `json`, `pdf`) runs the CLI.
79
+
80
+ The scripts in `examples/` build sample packages into `_build/examples/`, and
81
+ `src/limelight/language-reference/` holds the Dhall types a manifest is
82
+ written against; the writer copies them into every package it builds.
83
+
84
+ ## Developing
85
+
86
+ ```bash
87
+ uv sync --all-groups
88
+ uv run pytest
89
+ ```
@@ -0,0 +1,55 @@
1
+ # Limelight
2
+
3
+ Limelight is a portable package format for data-driven figures and analysis
4
+ stories, and a desktop app for reading them.
5
+
6
+ A Limelight package is a folder, or a `.limelight` archive with the same
7
+ layout, holding a `project.dhall` manifest alongside the datasets it
8
+ describes, the figure specs drawn from them, and a story that walks a reader
9
+ through the analysis. The app opens either form, validates the manifest,
10
+ resolves the data, renders the figures, and follows the story.
11
+
12
+ Packages are meant to be produced by libraries and tools rather than by hand;
13
+ `limelight.writer` is the Python library for building them, and
14
+ `limelight.reader` for opening them without the app.
15
+
16
+ ## Installing
17
+
18
+ ```bash
19
+ pip install limelight-app
20
+ ```
21
+
22
+ The distribution is `limelight-app` (PyPI would not allow plain `limelight`),
23
+ but the package imports as `limelight` and the commands are named as below.
24
+
25
+ A package's `project.dhall` manifest is read by a built-in evaluator, so
26
+ nothing beyond the Python dependencies is needed. A hand-written manifest
27
+ that uses Dhall features beyond what the writer emits (functions, `if`,
28
+ `merge`, interpolation) is handed to `dhall-to-json` instead, if one is on
29
+ `PATH` or named by `LIMELIGHT_DHALL_TO_JSON`.
30
+
31
+ Native installers for Windows, macOS and Linux are built by `packaging/`;
32
+ see `packaging/README.md`.
33
+
34
+ ## Using it
35
+
36
+ ```bash
37
+ limelight-gui example.limelight # open a package in the desktop app
38
+ limelight-cli summary example.limelight # print a summary of a package
39
+ limelight-cli verify example.limelight # validate one or more packages
40
+ limelight-cli pdf example.limelight # render a package's story to PDF
41
+ ```
42
+
43
+ `LL` is the short form of both: `LL example.limelight` opens the app, and
44
+ `LL verify example.limelight` (or `summary`, `json`, `pdf`) runs the CLI.
45
+
46
+ The scripts in `examples/` build sample packages into `_build/examples/`, and
47
+ `src/limelight/language-reference/` holds the Dhall types a manifest is
48
+ written against; the writer copies them into every package it builds.
49
+
50
+ ## Developing
51
+
52
+ ```bash
53
+ uv sync --all-groups
54
+ uv run pytest
55
+ ```