diff --git a/BeatPrints/errors.py b/BeatPrints/errors.py index 5830687..dbce7b6 100644 --- a/BeatPrints/errors.py +++ b/BeatPrints/errors.py @@ -78,19 +78,7 @@ def __init__(self, message="Use format 'x-y' where x and y are numbers."): super().__init__(self.message) -class PathNotFoundError(Exception): - """ - Raised when the specified path cannot be found. - """ - - def __init__( - self, message="The specified path for saving the image could not be found." - ): - self.message = message - super().__init__(self.message) - - -class ThemeNotFound(Exception): +class ThemeNotFoundError(Exception): """ Raised when the specified theme is not found or is invalid. """ diff --git a/BeatPrints/poster.py b/BeatPrints/poster.py index 8ff83c1..2fb5682 100644 --- a/BeatPrints/poster.py +++ b/BeatPrints/poster.py @@ -15,7 +15,7 @@ from . import image, write from .utils import filename, organize_tracks -from .errors import ThemeNotFound +from .errors import ThemeNotFoundError from .spotify import TrackMetadata, AlbumMetadata @@ -100,7 +100,7 @@ def track( # Check if the theme mentioned is valid or not if theme not in THEMES: - raise ThemeNotFound + raise ThemeNotFoundError # Get theme colors and template for the poster color, template = image.get_theme(theme) @@ -172,7 +172,7 @@ def album( # Check if the theme mentioned is valid or not if theme not in THEMES: - raise ThemeNotFound + raise ThemeNotFoundError # Get theme colors and template for the poster color, template = image.get_theme(theme) @@ -198,11 +198,10 @@ def album( # Album's Tracks tracks = metadata.tracks - if indexing: - tracks = [f"{i + 1}. {track}" for i, track in enumerate(tracks)] - # Organize the tracklist and render it on the poster - tracklist, track_widths = organize_tracks(tracks) + tracklist, track_widths = organize_tracks(tracks, indexing) + + # Starting Position x, y = C_TRACKS # Render the tracklist, adjusting the position for each column diff --git a/BeatPrints/utils.py b/BeatPrints/utils.py index dc83452..8b4fc65 100644 --- a/BeatPrints/utils.py +++ b/BeatPrints/utils.py @@ -11,7 +11,29 @@ from . import write, consts -def organize_tracks(tracks: list) -> tuple: +def add_flat_indexes(nlist: list) -> list: + """ + Adds a flat index to each track name in a nested list. + + Args: + nlist (list): A nested list of track names. + + Returns: + list: The modified nested list with flat indexes added to track names. + """ + + index = 1 + + for idx, cols in enumerate(nlist): + for jdx, row in enumerate(cols): + + nlist[idx][jdx] = f"{index}. {row}" + index += 1 + + return nlist + + +def organize_tracks(tracks: list, indexing: bool = False) -> tuple: """ Organizes tracks into columns that fit within the maximum allowed width. @@ -23,6 +45,29 @@ def organize_tracks(tracks: list) -> tuple: - List of lists where each inner list contains a column of track names. - List of widths for each track column. """ + + def calculate_column_width(tracks_column: list, additional_width: int = 0): + """ + Helper function to calculate the width of the longest track in a column. + """ + + tracks = max(tracks_column, key=len) + + return ( + write.calculate_text_width(tracks, write.font("Light"), consts.S_TRACKS) + + additional_width + ) + + additional_width = 0 + + # Account for the space that index numbers take + if indexing: + index = len(tracks) + 1 + + additional_width = write.calculate_text_width( + f"{index}", write.font("Light"), consts.S_TRACKS + ) + while True: # Split tracks into columns with a maximum of MAX_ROWS per column columns = [ @@ -30,11 +75,9 @@ def organize_tracks(tracks: list) -> tuple: for i in range(0, len(tracks), consts.MAX_ROWS) ] - # Determine the width of the longest track in each column - max_tracks = [max(col, key=len) for col in columns] + # Determine the width of each column track_widths = [ - write.calculate_text_width(track, write.font("Light"), consts.S_TRACKS) - for track in max_tracks + calculate_column_width(col, additional_width) for col in columns ] # Sum the total width and check if it fits within the allowed MAX_WIDTH @@ -44,11 +87,15 @@ def organize_tracks(tracks: list) -> tuple: break # If it fits, exit the loop else: - # If it doesn't fit, remove the longest track from the longest column + # If it doesn't fit, remove the longest track from the column with the widest width longest_column_index = track_widths.index(max(track_widths)) longest_column = columns[longest_column_index] tracks.remove(max(longest_column, key=len)) + # Add flat indexes to tracks if indexing is enabled + if indexing: + columns = add_flat_indexes(columns) + return columns, track_widths diff --git a/README.md b/README.md index 1cc919e..465e3b9 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ ![examples](https://i.ibb.co.com/y0jKqHK/banner.png) -

πŸ“” Check out the new documentation here!

+

πŸ“” Check out the documentation here!

## πŸ“¦ Installation @@ -134,9 +134,7 @@ I wanted to make it free for everyone to print themselves, as I believe my poste ## ❀️ Special Thanks - A big thanks to [Spotify Poster Generator](https://github.com/AnveshakR/poster-generator/) by [@AnveshakR](https://github.com/AnveshakR) for inspiring BeatPrints with amazing ideas! -- Shoutout to [@Magniquick](https://github.com/Magniquick), [@Krishna-Gunjan](https://github.com/Krishna-Gunjan), and [@itsnotrin](https://github.com/itsnotrin) for their awesome contributions! -- Thanks to [@T-Dynamos](https://github.com/T-Dynamos) and [@cherriae](https://github.com/cherriae) for their great improvements and tweaks. -- A special nod to [@itsnotrin](https://github.com/itsnotrin) for helping make album poster generation possible! +- Shoutout to [@Magniquick](https://github.com/Magniquick), [@Krishna-Gunjan](https://github.com/Krishna-Gunjan), [@itsnotrin](https://github.com/itsnotrin), [@T-Dynamos](https://github.com/T-Dynamos), and [@cherriae](https://github.com/cherriae) for their awesome contributions! ## πŸ“œ License diff --git a/cli/prompt.py b/cli/prompt.py index 863dc76..dff62fb 100644 --- a/cli/prompt.py +++ b/cli/prompt.py @@ -184,10 +184,16 @@ def poster_features(): qmark="πŸ’«", ), accent=questionary.confirm( - "β€’ Add a color accent?", default=False, style=exutils.lavish, qmark="🌈" + "β€’ Add a colored accent to the bottom?", + default=False, + style=exutils.lavish, + qmark="🌈", ), image=questionary.confirm( - "β€’ Use a custom image?", default=False, style=exutils.lavish, qmark="πŸ₯" + "β€’ Use a custom image as the poster's cover art?", + default=False, + style=exutils.lavish, + qmark="πŸ₯", ), ).unsafe_ask() @@ -213,7 +219,7 @@ def create_poster(): Create a poster based on user input. """ poster_type = questionary.select( - "β€’ What type of poster would you like to create?", + "β€’ What do you want to create?", choices=["Track Poster", "Album Poster"], style=exutils.lavish, qmark="🎨", @@ -245,7 +251,8 @@ def main(): create_poster() except KeyboardInterrupt as e: - print("╰─ πŸ‘‹ Alright, no problem! See you next time.") + exutils.clear() + print("πŸ‘‹ Alright, no problem! See you next time.") exit(1) except Exception as e: diff --git a/docs/conf.py b/docs/conf.py index b0a86f2..1fdd0db 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -11,7 +11,7 @@ project = "BeatPrints" copyright = "2024, elysianmyst" author = "elysianmyst" -release = "v1.1.1" +release = "v1.1.2" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration @@ -23,6 +23,9 @@ "sphinxcontrib.video", ] +# Hides the module name in documentation +add_module_names = False + templates_path = ["_templates"] exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] diff --git a/docs/guidebook/cli.rst b/docs/guidebook/cli.rst index 5fb998e..50c094f 100644 --- a/docs/guidebook/cli.rst +++ b/docs/guidebook/cli.rst @@ -19,11 +19,11 @@ Windows [general] search_limit = 7 - output_directory = "" + output_directory = "" [credentials] - client_id = "your-client-id" - client_secret = "your-client-secret" + client_id = "" + client_secret = "" Replace ```` with the path where you'd like to save the generated posters, and fill in the ``client_id`` and ``client_secret`` with your Spotify credentials. diff --git a/docs/guidebook/generate.rst b/docs/guidebook/generate.rst index 989c9d0..f0d5a29 100644 --- a/docs/guidebook/generate.rst +++ b/docs/guidebook/generate.rst @@ -3,6 +3,10 @@ This is a quick guide on how to generate posters using **BeatPrints** through code. +.. note:: + + It is important for you to have the ``.env`` file in the same directory. + 🎷 Track Posters ^^^^^^^^^^^^^^^^^ @@ -35,6 +39,11 @@ To generate a track poster, follow the steps below. # Generate the track poster ps.track(metadata, highlighted_lyrics) +.. tip:: + + You can create a **helper function** to display lyrics with line numbers in a nice format using `rich `_. + This is just a **basic way** to generate the poster. The sky's the limit! + πŸ’ΏοΈ Album Posters ^^^^^^^^^^^^^^^^^ diff --git a/docs/misc/FAQ.rst b/docs/misc/FAQ.rst index f608522..828ca3f 100644 --- a/docs/misc/FAQ.rst +++ b/docs/misc/FAQ.rst @@ -13,6 +13,10 @@ Why isn't "x" language supported in BeatPrints? ----------------------------------------------- The lack of support for some languages is due to the large size of font files (around 90 MB) required for the tool. Adding more languages would significantly increase the project's size. Since Pillow (the library used for this project) doesn’t support multi-language text natively, the write.py module would need to be rewritten to handle this, which is a time-consuming task. This issue is actively being worked on, but a simple solution hasn't been found yet. +Why are some tracks missing from the album posters? +--------------------------------------------------- +Some tracks are missing from the album posters because the function organizes tracks into columns that fit within a set width, removing the longest track name if needed. Additionally, since it's not always possible to fit all tracks in order, a shuffle feature was added to randomly select tracks for the poster. + I've got a really interesting idea for a feature for BeatPrints. ---------------------------------------------------------------- I really appreciate that you want to contribute! Feel free to create an issue on the GitHub page. Just keep in mind that I started this project for fun, so actively maintaining it can be tough for me. I’m not always able to dedicate a lot of time, but I truly appreciate all ideas and contributions, and I’ll try my best to work on it when I can. Your suggestions are always welcome! diff --git a/docs/reference/errors.rst b/docs/reference/errors.rst index 54219d9..be54ca7 100644 --- a/docs/reference/errors.rst +++ b/docs/reference/errors.rst @@ -3,3 +3,4 @@ .. automodule:: BeatPrints.errors :members: + :member-order: bysource diff --git a/docs/reference/index.rst b/docs/reference/index.rst index 605e4de..d015533 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -5,7 +5,7 @@ Reference .. toctree:: :maxdepth: 1 - + spotify lyrics poster diff --git a/docs/reference/lyrics.rst b/docs/reference/lyrics.rst index fec2bae..8f50a26 100644 --- a/docs/reference/lyrics.rst +++ b/docs/reference/lyrics.rst @@ -3,3 +3,4 @@ .. automodule:: BeatPrints.lyrics :members: Lyrics + :member-order: bysource diff --git a/docs/reference/poster.rst b/docs/reference/poster.rst index 69bbd27..6c3b276 100644 --- a/docs/reference/poster.rst +++ b/docs/reference/poster.rst @@ -3,3 +3,4 @@ .. automodule:: BeatPrints.poster :members: Poster + :member-order: bysource diff --git a/docs/reference/spotify.rst b/docs/reference/spotify.rst index 7505026..41d161b 100644 --- a/docs/reference/spotify.rst +++ b/docs/reference/spotify.rst @@ -3,3 +3,4 @@ .. automodule:: BeatPrints.spotify :members: Spotify + :member-order: bysource diff --git a/poetry.lock b/poetry.lock index 4d1e683..d7ff91b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -523,13 +523,13 @@ type = ["mypy (>=1.11.2)"] [[package]] name = "prompt-toolkit" -version = "3.0.36" +version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, - {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, ] [package.dependencies] @@ -537,13 +537,13 @@ wcwidth = "*" [[package]] name = "pygments" -version = "2.18.0" +version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, ] [package.extras] @@ -569,17 +569,17 @@ typer = ">=0.12.5,<0.13.0" [[package]] name = "questionary" -version = "2.0.1" +version = "2.1.0" description = "Python library to build pretty command line user prompts ⭐️" optional = false python-versions = ">=3.8" files = [ - {file = "questionary-2.0.1-py3-none-any.whl", hash = "sha256:8ab9a01d0b91b68444dff7f6652c1e754105533f083cbe27597c8110ecc230a2"}, - {file = "questionary-2.0.1.tar.gz", hash = "sha256:bcce898bf3dbb446ff62830c86c5c6fb9a22a54146f0f5597d3da43b10d8fc8b"}, + {file = "questionary-2.1.0-py3-none-any.whl", hash = "sha256:44174d237b68bc828e4878c763a9ad6790ee61990e0ae72927694ead57bab8ec"}, + {file = "questionary-2.1.0.tar.gz", hash = "sha256:6302cdd645b19667d8f6e6634774e9538bfcd1aad9be287e743d96cacaf95587"}, ] [package.dependencies] -prompt_toolkit = ">=2.0,<=3.0.36" +prompt_toolkit = ">=2.0,<4.0" [[package]] name = "requests" @@ -677,53 +677,60 @@ tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc ( [[package]] name = "scipy" -version = "1.14.1" +version = "1.15.0" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.10" files = [ - {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"}, - {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"}, - {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0"}, - {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3"}, - {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d"}, - {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69"}, - {file = "scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad"}, - {file = "scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8"}, - {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37"}, - {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2"}, - {file = "scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2"}, - {file = "scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc"}, - {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310"}, - {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066"}, - {file = "scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1"}, - {file = "scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e"}, - {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d"}, - {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e"}, - {file = "scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06"}, - {file = "scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84"}, - {file = "scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417"}, + {file = "scipy-1.15.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:aeac60d3562a7bf2f35549bdfdb6b1751c50590f55ce7322b4b2fc821dc27fca"}, + {file = "scipy-1.15.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5abbdc6ede5c5fed7910cf406a948e2c0869231c0db091593a6b2fa78be77e5d"}, + {file = "scipy-1.15.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:eb1533c59f0ec6c55871206f15a5c72d1fae7ad3c0a8ca33ca88f7c309bbbf8c"}, + {file = "scipy-1.15.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:de112c2dae53107cfeaf65101419662ac0a54e9a088c17958b51c95dac5de56d"}, + {file = "scipy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2240e1fd0782e62e1aacdc7234212ee271d810f67e9cd3b8d521003a82603ef8"}, + {file = "scipy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d35aef233b098e4de88b1eac29f0df378278e7e250a915766786b773309137c4"}, + {file = "scipy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b29e4fc02e155a5fd1165f1e6a73edfdd110470736b0f48bcbe48083f0eee37"}, + {file = "scipy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:0e5b34f8894f9904cc578008d1a9467829c1817e9f9cb45e6d6eeb61d2ab7731"}, + {file = "scipy-1.15.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:46e91b5b16909ff79224b56e19cbad65ca500b3afda69225820aa3afbf9ec020"}, + {file = "scipy-1.15.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:82bff2eb01ccf7cea8b6ee5274c2dbeadfdac97919da308ee6d8e5bcbe846443"}, + {file = "scipy-1.15.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:9c8254fe21dd2c6c8f7757035ec0c31daecf3bb3cffd93bc1ca661b731d28136"}, + {file = "scipy-1.15.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:c9624eeae79b18cab1a31944b5ef87aa14b125d6ab69b71db22f0dbd962caf1e"}, + {file = "scipy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d13bbc0658c11f3d19df4138336e4bce2c4fbd78c2755be4bf7b8e235481557f"}, + {file = "scipy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdca4c7bb8dc41307e5f39e9e5d19c707d8e20a29845e7533b3bb20a9d4ccba0"}, + {file = "scipy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f376d7c767731477bac25a85d0118efdc94a572c6b60decb1ee48bf2391a73b"}, + {file = "scipy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:61513b989ee8d5218fbeb178b2d51534ecaddba050db949ae99eeb3d12f6825d"}, + {file = "scipy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5beb0a2200372b7416ec73fdae94fe81a6e85e44eb49c35a11ac356d2b8eccc6"}, + {file = "scipy-1.15.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fde0f3104dfa1dfbc1f230f65506532d0558d43188789eaf68f97e106249a913"}, + {file = "scipy-1.15.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:35c68f7044b4e7ad73a3e68e513dda946989e523df9b062bd3cf401a1a882192"}, + {file = "scipy-1.15.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:52475011be29dfcbecc3dfe3060e471ac5155d72e9233e8d5616b84e2b542054"}, + {file = "scipy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5972e3f96f7dda4fd3bb85906a17338e65eaddfe47f750e240f22b331c08858e"}, + {file = "scipy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe00169cf875bed0b3c40e4da45b57037dc21d7c7bf0c85ed75f210c281488f1"}, + {file = "scipy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:161f80a98047c219c257bf5ce1777c574bde36b9d962a46b20d0d7e531f86863"}, + {file = "scipy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:327163ad73e54541a675240708244644294cb0a65cca420c9c79baeb9648e479"}, + {file = "scipy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0fcb16eb04d84670722ce8d93b05257df471704c913cb0ff9dc5a1c31d1e9422"}, + {file = "scipy-1.15.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:767e8cf6562931f8312f4faa7ddea412cb783d8df49e62c44d00d89f41f9bbe8"}, + {file = "scipy-1.15.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:37ce9394cdcd7c5f437583fc6ef91bd290014993900643fdfc7af9b052d1613b"}, + {file = "scipy-1.15.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6d26f17c64abd6c6c2dfb39920f61518cc9e213d034b45b2380e32ba78fde4c0"}, + {file = "scipy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e2448acd79c6374583581a1ded32ac71a00c2b9c62dfa87a40e1dd2520be111"}, + {file = "scipy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36be480e512d38db67f377add5b759fb117edd987f4791cdf58e59b26962bee4"}, + {file = "scipy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ccb6248a9987193fe74363a2d73b93bc2c546e0728bd786050b7aef6e17db03c"}, + {file = "scipy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:952d2e9eaa787f0a9e95b6e85da3654791b57a156c3e6609e65cc5176ccfe6f2"}, + {file = "scipy-1.15.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b1432102254b6dc7766d081fa92df87832ac25ff0b3d3a940f37276e63eb74ff"}, + {file = "scipy-1.15.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:4e08c6a36f46abaedf765dd2dfcd3698fa4bd7e311a9abb2d80e33d9b2d72c34"}, + {file = "scipy-1.15.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ec915cd26d76f6fc7ae8522f74f5b2accf39546f341c771bb2297f3871934a52"}, + {file = "scipy-1.15.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:351899dd2a801edd3691622172bc8ea01064b1cada794f8641b89a7dc5418db6"}, + {file = "scipy-1.15.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9baff912ea4f78a543d183ed6f5b3bea9784509b948227daaf6f10727a0e2e5"}, + {file = "scipy-1.15.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cd9d9198a7fd9a77f0eb5105ea9734df26f41faeb2a88a0e62e5245506f7b6df"}, + {file = "scipy-1.15.0-cp313-cp313t-win_amd64.whl", hash = "sha256:129f899ed275c0515d553b8d31696924e2ca87d1972421e46c376b9eb87de3d2"}, + {file = "scipy-1.15.0.tar.gz", hash = "sha256:300742e2cc94e36a2880ebe464a1c8b4352a7b0f3e36ec3d2ac006cdbe0219ac"}, ] [package.dependencies] -numpy = ">=1.23.5,<2.3" +numpy = ">=1.23.5,<2.5" [package.extras] dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<=7.3.7)", "sphinx-design (>=0.4.0)"] -test = ["Cython", "array-api-strict (>=2.0)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "shellingham" diff --git a/pyproject.toml b/pyproject.toml index fe9bd20..cebfd25 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "BeatPrints" -version = "1.1.1" +version = "1.1.2" description = "Create eye-catching, pinterest-style music posters effortlessly." authors = ["elysianmyst <74355265+TrueMyst@users.noreply.github.com>"] license = "CC-BY-NC-4.0"