Restructured project

This commit is contained in:
Thastertyn 2025-03-31 23:58:19 +02:00
parent 09b1baf485
commit 0bae8deb42
38 changed files with 1137 additions and 40 deletions

1
.python-version Normal file
View File

@ -0,0 +1 @@
3.12

15
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Start keyboard",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/main.py",
"console": "internalConsole"
}
]
}

6
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,6 @@
{
"files.exclude": {
"**/__pycache__": true
}
}

View File

@ -1,40 +0,0 @@
# omega
## Documentation
First I gathered a couple long text source, like the GNU GPL license, Wikipedia articles, or even a book.
Those were transformed into a large text file [see all_words.txt](data/all_words.txt) using the following command
```
grep -o "[[:alpha:]]\{1,\}" "path_to_individual_source.txt" | tr '[:upper:]' '[:lower:]'
```
Which simply finds words at least 1 character long and unifies them by transforming them all to lowercase.
For the model to have as much accuracy as possible, I calculated the average word length (5.819) and went with character history of 5 letters. This is for now the norm and can easily be omitted from the data if it becomes excessive
```
awk '{ total += length; count++ } END { if (count > 0) print total / count }' 1000_words.txt
```
## Sources
1. Generic news articles
- https://edition.cnn.com/2025/03/20/middleeast/ronen-bar-shin-bet-israel-vote-dismiss-intl-latam/index.html
- https://edition.cnn.com/2025/03/21/europe/conor-mcgregor-ireland-president-election-intl-hnk/index.html
2. Wikipedia articles
- https://simple.wikipedia.org/wiki/Dog
- https://en.wikipedia.org/wiki/Car
3. Scientific articles ([Kurzgesagt](https://www.youtube.com/@kurzgesagt/videos))
- https://www.youtube.com/watch?v=dCiMUWw1BBc&t=766s
- https://news.umich.edu/astronomers-find-surprising-ice-world-in-the-habitable-zone-with-jwst-data/
- https://www.youtube.com/watch?v=VD6xJq8NguY
- https://www.pnas.org/doi/10.1073/pnas.1711842115
4. License text
- https://www.gnu.org/licenses/gpl-3.0.en.html
- https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
5. Books
- https://ia902902.us.archive.org/19/items/diaryofawimpykidbookseriesbyjeffkinney_202004/Diary%20of%20a%20wimpy%20kid%20book02%20rodrick%20rules.pdf
- https://drive.google.com/file/d/1b1Etdxb1cNU3PvDBQnYh0bCAAfssMi8b/view

0
app/__init__.py Normal file
View File

0
app/core/__init__.py Normal file
View File

20
app/core/config.py Normal file
View File

@ -0,0 +1,20 @@
from pathlib import Path
from typing import Literal
from pydantic import FilePath
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(
env_file="./.env",
env_ignore_empty=True,
extra="ignore",
)
APP_NAME: str = "Omega"
VERBOSITY: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] = "INFO"
MODEL_PATH: FilePath = Path("./model/predictor.pth")
settings = Settings()

44
app/keyboard.py Normal file
View File

@ -0,0 +1,44 @@
import sys
import logging
from PySide6.QtWidgets import QMessageBox, QApplication
from app.utils import setup_logger
from app.ui import window
class Keyboard():
def __init__(self):
setup_logger()
self.logger = logging.getLogger(__name__)
self.logger.info("Starting")
self.qt_app = QApplication([])
self.window = window.KeyboardWindow()
def exit_with_error(self, error: str, additional_text: str = ""):
self.show_error(error, additional_text)
self.qt_app.quit()
sys.exit(1)
def run(self) -> int:
self.window.show()
status = self.qt_app.exec()
self.cleanup()
self.logger.info("Exiting")
return status
def show_error(self, text: str, detail_text: str = ""):
error_dialog = QMessageBox()
error_dialog.setIcon(QMessageBox.Icon.Critical)
error_dialog.setWindowTitle("Error")
error_dialog.setText(text)
if detail_text:
error_dialog.setInformativeText(detail_text)
error_dialog.setStandardButtons(QMessageBox.StandardButton.Ok)
error_dialog.exec()
def cleanup(self) -> None:
self.logger.info("Cleaning up")
self.qt_app.quit()

67
app/ui/key.py Normal file
View File

@ -0,0 +1,67 @@
from PySide6.QtWidgets import QWidget, QLabel, QApplication
from PySide6.QtGui import QPainter, QPen, QColor
from PySide6.QtCore import QRectF, Qt, QSize
import sys
class KeyWidget(QWidget):
def __init__(self, key_label: str, debug: bool = False, parent=None):
super().__init__(parent)
self.key_label = key_label
self.debug = debug
self.label = QLabel(key_label, self)
self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.hitbox_rect = QRectF(0, 0, 50, 50)
self.resize(60, 60)
def resizeEvent(self, event):
self.label.setGeometry(0, 0, self.width(), self.height())
def paintEvent(self, event):
painter = QPainter(self)
# Always draw the base border (true key bounds)
base_pen = QPen(QColor(100, 100, 100), 1, Qt.SolidLine)
painter.setPen(base_pen)
painter.drawRect(0, 0, self.width() - 1, self.height() - 1)
if self.debug:
# Draw hitbox as red dashed line
hitbox_pen = QPen(QColor(255, 0, 0), 2, Qt.DashLine)
painter.setPen(hitbox_pen)
painter.drawRect(self.hitbox_rect)
def set_hitbox_size(self, width: float, height: float):
x = (self.width() - width) / 2
y = (self.height() - height) / 2
self.hitbox_rect = QRectF(x, y, width, height)
self.update()
def sizeHint(self) -> QSize:
return QSize(60, 60)
def mousePressEvent(self, event):
if self.hitbox_rect.contains(event.position()):
print(f"Key '{self.key_label}' pressed inside hitbox.")
else:
print(f"Key '{self.key_label}' clicked outside hitbox.")
if __name__ == "__main__":
app = QApplication(sys.argv)
from PySide6.QtWidgets import QGridLayout, QWidget
main_window = QWidget()
layout = QGridLayout(main_window)
keys = "ASDF"
for i, char in enumerate(keys):
key = KeyWidget(char, debug=True)
key.set_hitbox_size(30 + i * 10, 30 + i * 5) # Varying hitbox sizes
layout.addWidget(key, 0, i)
main_window.show()
sys.exit(app.exec())

43
app/ui/window.py Normal file
View File

@ -0,0 +1,43 @@
from PySide6.QtWidgets import QMainWindow, QApplication, QTabWidget
class KeyboardWindow(QMainWindow):
def __init__(self):
super().__init__()
# Set up main window properties
self.setWindowTitle("OMEGA")
self.setGeometry(0, 0, 800, 600)
self.center_window()
# Central widget and layout
central_widget = QTabWidget()
self.setCentralWidget(central_widget)
def center_window(self):
# Get the screen geometry
screen = QApplication.primaryScreen()
screen_geometry = screen.geometry()
# Get the dimensions of the window
window_geometry = self.frameGeometry()
# Calculate the center point of the screen
center_point = screen_geometry.center()
# Move the window geometry to the center of the screen
window_geometry.moveCenter(center_point)
# Move the window to the calculated geometry
self.move(window_geometry.topLeft())
def refresh_book_cards(self):
self.dashboard.redraw_cards()
self.category_statistics_overview_list.redraw_cards()
def refresh_member_cards(self):
self.member_list.redraw_cards()

27
app/utils.py Normal file
View File

@ -0,0 +1,27 @@
import sys
import logging
from app.core.config import settings
def setup_logger():
logger = logging.getLogger()
verbosity = settings.VERBOSITY
level_map = {
"DEBUG": logging.DEBUG,
"INFO": logging.INFO,
"WARNING": logging.WARNING,
"ERROR": logging.ERROR,
"CRITICAL": logging.CRITICAL,
}
log_level = level_map.get(verbosity)
logger.setLevel(log_level)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(log_level)
formatter = logging.Formatter("[%(levelname)s] - %(name)s:%(lineno)d - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)

7
main.py Normal file
View File

@ -0,0 +1,7 @@
import sys
from app.keyboard import Keyboard
if __name__ == "__main__":
keyboard_app = Keyboard()
sys.exit(keyboard_app.run())

40
model/README.md Normal file
View File

@ -0,0 +1,40 @@
# omega
## Documentation
First I gathered a couple long text source, like the GNU GPL license, Wikipedia articles, or even a book.
Those were transformed into a large text file [see all_words.txt](data/all_words.txt) using the following command
```
grep -o "[[:alpha:]]\{1,\}" "path_to_individual_source.txt" | tr '[:upper:]' '[:lower:]'
```
Which simply finds words at least 1 character long and unifies them by transforming them all to lowercase.
For the model to have as much accuracy as possible, I calculated the average word length (5.819) and went with character history of 5 letters. This is for now the norm and can easily be omitted from the data if it becomes excessive
```
awk '{ total += length; count++ } END { if (count > 0) print total / count }' 1000_words.txt
```
## Sources
1. Generic news articles
- https://edition.cnn.com/2025/03/20/middleeast/ronen-bar-shin-bet-israel-vote-dismiss-intl-latam/index.html
- https://edition.cnn.com/2025/03/21/europe/conor-mcgregor-ireland-president-election-intl-hnk/index.html
2. Wikipedia articles
- https://simple.wikipedia.org/wiki/Dog
- https://en.wikipedia.org/wiki/Car
3. Scientific articles ([Kurzgesagt](https://www.youtube.com/@kurzgesagt/videos))
- https://www.youtube.com/watch?v=dCiMUWw1BBc&t=766s
- https://news.umich.edu/astronomers-find-surprising-ice-world-in-the-habitable-zone-with-jwst-data/
- https://www.youtube.com/watch?v=VD6xJq8NguY
- https://www.pnas.org/doi/10.1073/pnas.1711842115
4. License text
- https://www.gnu.org/licenses/gpl-3.0.en.html
- https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
5. Books
- https://ia902902.us.archive.org/19/items/diaryofawimpykidbookseriesbyjeffkinney_202004/Diary%20of%20a%20wimpy%20kid%20book02%20rodrick%20rules.pdf
- https://drive.google.com/file/d/1b1Etdxb1cNU3PvDBQnYh0bCAAfssMi8b/view

View File

@ -0,0 +1,299 @@
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
skibidi
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
rizz
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
gyatt
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus
sus

View File

@ -0,0 +1,17 @@
In internet culture, brain rot (or brainrot) describes internet content deemed to be of low quality or value, or the supposed negative psychological and cognitive effects caused by it.[1] The term also more broadly refers to the deleterious effects associated with excessive use of digital media in general, especially short-form entertainment[2] and doomscrolling,[3] which may affect mental health.[4][5][6] The term originated within the online cultures of Generation Z and Generation Alpha and has since become mainstream.[7]
Origin and usage
According to Oxford University Press, the first recorded use of the term traces back to the 1854 book Walden by Henry David Thoreau.[8][9] Thoreau was criticizing what he saw as a decline in intellectual standards, with complex ideas being less highly regarded, and compared this to the 1840s "potato rot" in Europe.[7]
In online settings, it was used as early as 2004. In 2007, the term "brain rot" was used by Twitter users to describe dating game shows, video games and "hanging out online".[10] Usage of the phrase increased online in the 2010s before becoming rapidly more popular in 2020 on Discord, when it became an Internet meme.[10] As of 2024, it was most frequently used in the context of Generation Alpha's digital habits, by critics expressing that the generation is "excessively immersed in online culture".[11] It is commonly associated with an individual's vocabulary consisting exclusively of internet references.[1] From 2023 to 2024, Oxford reported the term's usage increased by 230% in frequency per million words.[7][8] Linguist Brent Henderson predicted that the term will stay around, citing its memorability and relevance.[12]
The term is often linked with slang and trends popular among Generation Alpha and Generation Z social media users, such as "skibidi" (a reference to the YouTube Shorts series Skibidi Toilet), "rizz" (charm), "gyatt" (referring to the buttocks), "fanum tax" (stealing food), "sigma" (referring to a leader or alpha male), and "delulu" (truncation of delusional).[13][8][14]
Impact
The term was named Oxford Word of the Year in 2024, beating other words like demure and romantasy.[7][8] Its modern usage is defined by the Oxford University Press as "the supposed deterioration of a person's mental or intellectual state, especially viewed as the result of overconsumption of material (now particularly online content) considered to be trivial or unchallenging".[7]
In the same year, millennial Australian senator Fatima Payman made headlines by making a short speech to the Australian parliament using Generation Alpha slang. She introduced the speech as addressing "an oft-forgotten section of our society", referring to Generations Z and Alpha, and said that she would "render the remainder of my statement using language they're familiar with".[15] Using slang terms, Payman criticised the government's plans to ban under-14s from social media and closed by saying that, "Though some of you cannot yet vote, I hope that, when you do, it will be in a more goated Australia for a government with more aura. Skibidi!"[16] The speech, written by a 21-year-old staff member, was labeled by some as an example of "brainrot" outside the online world.[16]
In 2025 Jubilee of the World of Communications, the term was also used by Pope Francis, the head of the Catholic Church, as he urged for people to reduce their use of social media and avoid "putrefazione cerebrale".[17][18]

71
model/data/wiki_doom.txt Normal file
View File

@ -0,0 +1,71 @@
Doom (stylized as DOOM) is an American media franchise created by John Carmack, John Romero, Adrian Carmack, Kevin Cloud, and Tom Hall.[1] The series usually focuses on the exploits of an unnamed space marine (often referred to as Doomguy or Doom Slayer) operating under the auspices of the Union Aerospace Corporation (UAC), who fights hordes of demons and the undead to save Earth from an apocalyptic invasion.
The original Doom is considered one of the first pioneering first-person shooter games, introducing to IBM-compatible computers features such as 3D graphics, third-dimension spatiality, networked multiplayer gameplay, and support for player-created modifications with the Doom WAD format. Over ten million copies of games in the Doom series have been sold; the series has spawned numerous sequels, novels, comic books, board games, and film adaptations.
Overview
The Doom video games consist of first-person shooters in which the player controls an unnamed space marine commonly referred to as Doomguy; in the 2016 series, the protagonist is called the "Doom Slayer" or just "Slayer" in later entries. The player battles the forces of Hell, consisting of demons and the undead. The games are usually set within sprawling bases on Mars or its moons, while some parts occur in Hell. The classic series had only a minimal focus on the narrative, much of which was in the manuals rather than the games.[2] More recent titles, notably the 2016 series, would feature a heavier focus on narrative.[3]
The original game featured eight weapons, designed so that no weapon became obsolete after the acquisition of another. With the player carrying all these weapons at once, the strategy of "gun juggling"—rapidly switching between the weapons depending on circumstance—can be employed.[4] Outside of combat mechanics, Doom levels often feature mazes, colored key cards and hidden areas.[5][6] As the genre was in its infancy in the early 1990s, the player could not jump or look up and down in the classic series due to technical limitations. Some limited platforming was however present, as players could sprint at gaps and let their momentum carry them to a destination.[7] These features were added in newer titles,[8] with the 2016 series in particular featuring a strong focus on platforming.[9]
Classic series (19921997)
See also: Development of Doom
The development of the original Doom started in 1992, when John Carmack developed a new game engine, the Doom engine, while the rest of the id Software team finished the Wolfenstein 3D prequel, Spear of Destiny. The game launched in an episodic format in 1993, with the first episode available as shareware and two more episodes available by mail order. The first episode was largely designed by John Romero.[10] The title proved extremely popular, with the full version of the game selling one million copies. The term "Doom clone" became the name for new genre now known as first-person shooters for several years.[11]
Doom II: Hell on Earth was released in 1994 in a commercial format. Only minor changes were made at a technical level; the game featured new enemies, a new "Super Shotgun" weapon, and more complex levels.[12] The game was followed by an expansion in 1995, titled Master Levels for Doom II, which added 20 additional levels. A fourth episode was added to the original game by the 1995 re-release.[13]
From 1995 id Software were focused on the development of the new Quake series, which would be developed by the company throughout the late 1990s.[14] Two additional games would be released over the following years, largely created by third-party developers under id's supervision. The first of these was Final Doom, which featured 64 levels based on the Doom II engine, organised into two episodes. TNT: Evilution was developed by the modding group TeamTNT and completed in November 1995, while the second episode The Plutonia Experiment was developed by TNT's Dario and Milo Casali and completed in January 1996.[citation needed]
Midway Games developed Doom 64 under id supervision for release in 1997. The title featured a new engine, with larger sprites and higher quality textures. The technical changes allowed for greater flexibility with the level design, such as the ability to adjust the geometry of the map during play. The classic metal soundtrack was replaced for a more ambient and eerie soundtrack, creating a unique atmosphere that would inspire future entries. Id did not allow the title to be called Doom 3, as the name was being reserved for a potential return to the franchise after the development of Quake.[15][16]
Doom 3 and cancelled fourth game (20002013)
Main article: Doom 3 § Production
The troubled development of Quake had resulted in major staffing changes at id by 2000, with a number of key figures from the development of Doom having departed. This included the original designer John Romero, who was fired in 1996.[10] In the interim, the company had hired former Doom modder Tim Willits.[14] By 2000 a new non-Doom game was being designed, but id staff had a "lack of enthusiasm" for the project, and strongly desired to remake the original Doom instead. John Carmack, among others, announced internally that they were working on a Doom game- and would continue to do so unless the company fired them. While Paul Steed was indeed fired, work on the game did continue.[17]
The title was unveiled later that year as Doom 3. The design of the title would be led by Willits.[18] Using the new id Tech 4 engine, numerous technical improvements were made over the classic series, allowing greater realism and interactivity. The game used voice acting and featured a greater focus on narrative than earlier titles. A demo of the game was shown at E3 2002 and was subsequently leaked online, well ahead of the 2004 release date. At the time, it was the first Doom title in seven years, and helped renew interest in the franchise.[19] An expansion, Doom 3: Resurrection of Evil was released in 2005. Unlike the base game, the expansion was developed by Nerve Software. A 2012 BFG Edition featured both previous releases along with a new expansion entitled The Lost Mission. A version of Doom 3: BFG Edition called Doom 3: VR Edition was released on March 29, 2021 for the PlayStation 4 VR and PlayStation 5 via backwards compatibility. It includes all of the content from Doom 3: BFG Edition (the main campaign, Resurrection of Evil and The Lost Mission), except for multiplayer.
Doom 4 entered development in the mid 2000s alongside Rage, with the new Doom title initially planned as a rework of Doom II. Hints were present in 2007 at QuakeCon, and the game was formally announced in 2008. Response to preview material was negative, with fans nicknaming the project "Call of Doom", after a perceived similarity to the Call of Duty franchise. Bethesda marketing vice president Pete Hines stated in retrospect that "it wasn't Doom enough". After Rage was not as successful as hoped, publisher ZeniMax requested a reboot of Doom 4 and moved the Rage staff over to the new project. This version was built using Rage's code base and suffered from disputes among staff, particularly among managers of the two projects.[20] The game was cancelled in 2013. John Carmack, one of the few remaining veterans from the development of the classic series still present at id, left the studio that November.[21]
The period saw the release of several spinoffs for mobile platforms. These included Doom RPG (2005), Doom II RPG (2009), and Doom Resurrection (2009). Additionally, the 2010 Xbox Live Arcade re-release of Doom II featured a new expansion entitled No Rest for the Living, which was developed by Nerve Software. This was structured in a similar manner to classic Doom chapters, with eight primary levels and one secret level. This release was packaged with the BFG Edition of Doom 3 in 2012.[22][23]
Revival series (2013present)
After the 2013 scrapping of the Doom 4 project, Willits stated that the next game in the Doom series was still the team's focus.[24] Hugo Martin was hired as creative director that year and would go on to be a key figure in the revived franchise.[25] The game was announced simply as Doom in 2014. It was released to generally positive reception in 2016, with a glory kill mechanic and additional platforming manoeuvres among the main gameplay additions.[26] The game's multiplayer mode received three small downloadable content releases over the course of the first year, and all three were then released for free with the 6.66 update on July 19, 2017.[27]
The 2016 series was not originally described as a continuation or origin story of earlier games, however plot details in the sequel Doom Eternal and commentary from Martin would later describe it as a continuation of the classic series.[28][29] The 2020 re-release of Doom 64 included an expansion entitled The Lost Levels, intended "to connect 'old' Doom to 'new' Doom".[30]
A VR spinoff entitled Doom VFR was released in 2017 to generally positive reception, with reviewers discussing the movement controls in particular- which were well made albeit hidden behind menus.[clarification needed] The game features a single-player campaign, and reused enemies and other assets from the 2016 game.[31] The game would be the last Doom title under Willits' leadership, ahead of his departure in 2019.[32] 2018 marked the 25th anniversary of the franchise, and saw the Doom Slayer included as a playable character in id Software's Quake Champions. That year, John Romero announced Sigil, an unofficial "fifth episode" of the original 1993 game. The episode was released for free via Romero's website in 2019, with a paid version available that included a soundtrack by guitarist Buckethead.[33] While Sigil was developed independently, Bethesda added the episode to the console ports of Doom as a free patch in October, alongside the two chapters of Final Doom.[34][35]
The next main entry in the franchise, Doom Eternal, was directed by Hugo Martin and released in 2020.[36][37] The title sold very well, generating $450 million in revenue over the first year; double the launch revenue of the previous title. Some commentators cited the timing of the release, which coincided with a wave of interest in gaming worldwide amid restrictions on social gathering during the COVID-19 pandemic.[38][39] The game was made in id Tech 7, which afforded numerous technical improvements over the id Tech 6 engine used by its predecessor.[40] An expansion of the game, The Ancient Gods, was released in two parts, one in October 2020 and the other in March 2021.
Romero confirmed in August 2021 that a second Sigil expansion using the Doom II engine was in development.[41] In March 2022, he released a new Doom II level entitled One Humanity. The proceeds from the level were donated as humanitarian aid for Ukraine amid the Russian invasion.[42] The level was the first for Doom II designed by Romero since 1994, and raised 25,000 euros by March 7.[43] Romero released Sigil II in 2023 and was critically acclaimed.[44] Like its predecessor, Id Software made the chapter freely available through the add-ons menu of the console ports of Doom and Doom II.[45] A spin-off for mobile platforms Android and iOS, Mighty Doom, was developed by Alpha Dog Games and released in March 2023.[46] Microsoft announced that it was shutting down Alpha Dog in May 2024; this resulted in the discontinuation of Mighty Doom in August.[47]
In August 2024, id Software in collaboration with Nightdive Studios and MachineGames released Doom + Doom II, a "definitive rerelease" of all the pre-Doom 64 games alongside Sigil and a new 2 episode expansion pack called Legacy of Rust. The release features new enemies and weapons.[48]
Future
In March 2021, Hugo Martin discussed some directions future Doom titles could take, discussing time travel or a game set in the time span between Doom 64 and Doom (2016), when the Doom Slayer "first came to that place with the Sentinels, almost like a more medieval setting".[49][29] An internal ZeniMax presentation, dated to 2020 and released as part of the FTC v. Microsoft case in 2023, indicated that a game entitled Doom: Year Zero was in development at that time, with a projected release in FY2023. DLC for the title was also marked for 2023 and 2024. The document was produced prior to Microsoft's acquisition of ZeniMax in 2021, but the game remained in production and was revealed at the 2024 Xbox Games Showcase as Doom: The Dark Ages. The game is set to launch on May 15, 2025.[50][51]
Other media Novels
A set of four novels based on Doom were written by Dafydd ab Hugh and Brad Linaweaver, and were published between June 1995 and January 1996 by Pocket Books. The books, listed in order, are titled Knee Deep in the Dead, Hell on Earth, Infernal Sky and Endgame. The unnamed Marine is called "Flynn Taggart" or "Fly" in the novels. The first two books feature recognizable locations and situations from the first two games. A film novelization was released by Pocket Star Books in 2005. It was adapted by John Shirley.
In 2008, a new series of Doom novels by Matthew J. Costello, an author who had worked on the story and scripts for Doom 3 and Resurrection of Evil, were published. The series of books aim to novelize the story of Doom 3, with the first installment, Doom 3: Worlds on Fire, published on February 26, 2008.[58] The second book in the series, Doom 3: Maelstrom, was released in March 2009.[59]
Richart Cobbett of PC Gamer called the first installment of the Doom novels "the only one genuinely worth bothering with for the laughs", describing the other novels as largely unrelated sci-fi stories.[60]
Comic book
A one-shot comic book written by Steve Behling and Michael Stewart with art by Tom Grindberg was released in May 1996 by Marvel Comics as a giveaway for a video game convention[citation needed] and has gained a cult following for its over-the-top dialogue. Phrases such as "rip and tear" and "huge guts" have since been referenced by later Doom titles.
Tabletop games
In 2004, a board game designed by Kevin Wilson and published by Fantasy Flight Games titled Doom: The Boardgame was released.[61]
In 2020, Critical Role published a fifth edition Dungeons & Dragons module entitled Doom Eternal: Assault on Amaros Station. The game was written by Christopher Lockey and Matthew Mercer, and received a digital release via the Critical Role store on December 16, 2020.[62][63][64]
In 1996, Next Generation ranked the series as the 19th top game of all time, for how "despite the hundreds of copycat titles, no one has ever been able to equal id's original, pulsing classic."[122] In 1999, Next Generation listed the Doom series as number 25 on their "Top 50 Games of All Time," commenting that, "despite the graphic advances since Doom was released, the pixilated Barons of Hell and Cyber Demons still rank as some of the scariest things that can grace your screen."[123]
The series' unnamed protagonist, a marine, has had a mostly positive reception. In 2009, GameDaily included "the Marine" on its list of "ten game heroes who fail at the simple stuff" for his inability to look up and down in the original series.[124] UGO Networks ranked him fourth on its 2012 list of best silent protagonists in video games, noting his courage to continue in silence even when he faces Hell's army.[125] In 2013, Complex ranked Doomguy at number 16 on its list of the greatest soldiers in video games for being "the original video game space marine" and "one of the classic silent protagonists."[126] Both CraveOnline and VGRC ranked him the fifth most "badass" male character in the video game's history.[127][128]
Sales
The original Doom sold 3.5 million physical copies[129] and 1.15 million shareware copies[130] from its 1993 release up through 1999. Doom II sold 1.55 million copies of all types in the United States during the same period,[130] with about a quarter of that number also sold in Europe,[131] a total of some 5-6 million sales for the original duology. Doom 3 sold 3.5 million copies along with many copies of the expansion pack Resurrection of Evil from its 2004 release up through 2007, making it the most successful game in the series at that point.[132] The sales of Doom 64 were not disclosed.
The 2016 reboot sold over 2 million copies on the PC alone from its May 2016 release up to July 2017.[133]

18
pyproject.toml Normal file
View File

@ -0,0 +1,18 @@
[project]
name = "app"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"pydantic-settings>=2.8.1",
"pyside6>=6.8.3",
]
[project.optional-dependencies]
train = [
"torch>=2.6.0",
]
[tool.mypy]
plugins = "pydantic.mypy"

462
uv.lock generated Normal file
View File

@ -0,0 +1,462 @@
version = 1
revision = 1
requires-python = ">=3.12"
[[package]]
name = "annotated-types"
version = "0.7.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
]
[[package]]
name = "app"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
{ name = "pydantic-settings" },
{ name = "pyside6" },
]
[package.optional-dependencies]
train = [
{ name = "torch" },
]
[package.metadata]
requires-dist = [
{ name = "pydantic-settings", specifier = ">=2.8.1" },
{ name = "pyside6", specifier = ">=6.8.3" },
{ name = "torch", marker = "extra == 'train'", specifier = ">=2.6.0" },
]
provides-extras = ["train"]
[[package]]
name = "filelock"
version = "3.18.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 },
]
[[package]]
name = "fsspec"
version = "2025.3.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/34/f4/5721faf47b8c499e776bc34c6a8fc17efdf7fdef0b00f398128bc5dcb4ac/fsspec-2025.3.0.tar.gz", hash = "sha256:a935fd1ea872591f2b5148907d103488fc523295e6c64b835cfad8c3eca44972", size = 298491 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/56/53/eb690efa8513166adef3e0669afd31e95ffde69fb3c52ec2ac7223ed6018/fsspec-2025.3.0-py3-none-any.whl", hash = "sha256:efb87af3efa9103f94ca91a7f8cb7a4df91af9f74fc106c9c7ea0efd7277c1b3", size = 193615 },
]
[[package]]
name = "jinja2"
version = "3.1.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markupsafe" },
]
sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 },
]
[[package]]
name = "markupsafe"
version = "3.0.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 },
{ url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 },
{ url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 },
{ url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 },
{ url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 },
{ url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 },
{ url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 },
{ url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 },
{ url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 },
{ url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 },
{ url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 },
{ url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 },
{ url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 },
{ url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 },
{ url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 },
{ url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 },
{ url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 },
{ url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 },
{ url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 },
{ url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 },
{ url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 },
{ url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 },
{ url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 },
{ url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 },
{ url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 },
{ url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 },
{ url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 },
{ url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 },
{ url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 },
{ url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 },
]
[[package]]
name = "mpmath"
version = "1.3.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 },
]
[[package]]
name = "networkx"
version = "3.4.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 },
]
[[package]]
name = "nvidia-cublas-cu12"
version = "12.4.5.8"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ae/71/1c91302526c45ab494c23f61c7a84aa568b8c1f9d196efa5993957faf906/nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:2fc8da60df463fdefa81e323eef2e36489e1c94335b5358bcb38360adf75ac9b", size = 363438805 },
]
[[package]]
name = "nvidia-cuda-cupti-cu12"
version = "12.4.127"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/67/42/f4f60238e8194a3106d06a058d494b18e006c10bb2b915655bd9f6ea4cb1/nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:9dec60f5ac126f7bb551c055072b69d85392b13311fcc1bcda2202d172df30fb", size = 13813957 },
]
[[package]]
name = "nvidia-cuda-nvrtc-cu12"
version = "12.4.127"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/2c/14/91ae57cd4db3f9ef7aa99f4019cfa8d54cb4caa7e00975df6467e9725a9f/nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a178759ebb095827bd30ef56598ec182b85547f1508941a3d560eb7ea1fbf338", size = 24640306 },
]
[[package]]
name = "nvidia-cuda-runtime-cu12"
version = "12.4.127"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ea/27/1795d86fe88ef397885f2e580ac37628ed058a92ed2c39dc8eac3adf0619/nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:64403288fa2136ee8e467cdc9c9427e0434110899d07c779f25b5c068934faa5", size = 883737 },
]
[[package]]
name = "nvidia-cudnn-cu12"
version = "9.1.0.70"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nvidia-cublas-cu12" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/9f/fd/713452cd72343f682b1c7b9321e23829f00b842ceaedcda96e742ea0b0b3/nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f", size = 664752741 },
]
[[package]]
name = "nvidia-cufft-cu12"
version = "11.2.1.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nvidia-nvjitlink-cu12" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/27/94/3266821f65b92b3138631e9c8e7fe1fb513804ac934485a8d05776e1dd43/nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f083fc24912aa410be21fa16d157fed2055dab1cc4b6934a0e03cba69eb242b9", size = 211459117 },
]
[[package]]
name = "nvidia-curand-cu12"
version = "10.3.5.147"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/8a/6d/44ad094874c6f1b9c654f8ed939590bdc408349f137f9b98a3a23ccec411/nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a88f583d4e0bb643c49743469964103aa59f7f708d862c3ddb0fc07f851e3b8b", size = 56305206 },
]
[[package]]
name = "nvidia-cusolver-cu12"
version = "11.6.1.9"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nvidia-cublas-cu12" },
{ name = "nvidia-cusparse-cu12" },
{ name = "nvidia-nvjitlink-cu12" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/3a/e1/5b9089a4b2a4790dfdea8b3a006052cfecff58139d5a4e34cb1a51df8d6f/nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:19e33fa442bcfd085b3086c4ebf7e8debc07cfe01e11513cc6d332fd918ac260", size = 127936057 },
]
[[package]]
name = "nvidia-cusparse-cu12"
version = "12.3.1.170"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nvidia-nvjitlink-cu12" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/db/f7/97a9ea26ed4bbbfc2d470994b8b4f338ef663be97b8f677519ac195e113d/nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ea4f11a2904e2a8dc4b1833cc1b5181cde564edd0d5cd33e3c168eff2d1863f1", size = 207454763 },
]
[[package]]
name = "nvidia-cusparselt-cu12"
version = "0.6.2"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/78/a8/bcbb63b53a4b1234feeafb65544ee55495e1bb37ec31b999b963cbccfd1d/nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:df2c24502fd76ebafe7457dbc4716b2fec071aabaed4fb7691a201cde03704d9", size = 150057751 },
]
[[package]]
name = "nvidia-nccl-cu12"
version = "2.21.5"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/df/99/12cd266d6233f47d00daf3a72739872bdc10267d0383508b0b9c84a18bb6/nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8579076d30a8c24988834445f8d633c697d42397e92ffc3f63fa26766d25e0a0", size = 188654414 },
]
[[package]]
name = "nvidia-nvjitlink-cu12"
version = "12.4.127"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ff/ff/847841bacfbefc97a00036e0fce5a0f086b640756dc38caea5e1bb002655/nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57", size = 21066810 },
]
[[package]]
name = "nvidia-nvtx-cu12"
version = "12.4.127"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/87/20/199b8713428322a2f22b722c62b8cc278cc53dffa9705d744484b5035ee9/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a", size = 99144 },
]
[[package]]
name = "pydantic"
version = "2.11.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "annotated-types" },
{ name = "pydantic-core" },
{ name = "typing-extensions" },
{ name = "typing-inspection" },
]
sdist = { url = "https://files.pythonhosted.org/packages/93/a3/698b87a4d4d303d7c5f62ea5fbf7a79cab236ccfbd0a17847b7f77f8163e/pydantic-2.11.1.tar.gz", hash = "sha256:442557d2910e75c991c39f4b4ab18963d57b9b55122c8b2a9cd176d8c29ce968", size = 782817 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/cc/12/f9221a949f2419e2e23847303c002476c26fbcfd62dc7f3d25d0bec5ca99/pydantic-2.11.1-py3-none-any.whl", hash = "sha256:5b6c415eee9f8123a14d859be0c84363fec6b1feb6b688d6435801230b56e0b8", size = 442648 },
]
[[package]]
name = "pydantic-core"
version = "2.33.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b9/05/91ce14dfd5a3a99555fce436318cc0fd1f08c4daa32b3248ad63669ea8b4/pydantic_core-2.33.0.tar.gz", hash = "sha256:40eb8af662ba409c3cbf4a8150ad32ae73514cd7cb1f1a2113af39763dd616b3", size = 434080 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a9/c4/c9381323cbdc1bb26d352bc184422ce77c4bc2f2312b782761093a59fafc/pydantic_core-2.33.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6c32a40712e3662bebe524abe8abb757f2fa2000028d64cc5a1006016c06af43", size = 2025127 },
{ url = "https://files.pythonhosted.org/packages/6f/bd/af35278080716ecab8f57e84515c7dc535ed95d1c7f52c1c6f7b313a9dab/pydantic_core-2.33.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ec86b5baa36f0a0bfb37db86c7d52652f8e8aa076ab745ef7725784183c3fdd", size = 1851687 },
{ url = "https://files.pythonhosted.org/packages/12/e4/a01461225809c3533c23bd1916b1e8c2e21727f0fea60ab1acbffc4e2fca/pydantic_core-2.33.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4deac83a8cc1d09e40683be0bc6d1fa4cde8df0a9bf0cda5693f9b0569ac01b6", size = 1892232 },
{ url = "https://files.pythonhosted.org/packages/51/17/3d53d62a328fb0a49911c2962036b9e7a4f781b7d15e9093c26299e5f76d/pydantic_core-2.33.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:175ab598fb457a9aee63206a1993874badf3ed9a456e0654273e56f00747bbd6", size = 1977896 },
{ url = "https://files.pythonhosted.org/packages/30/98/01f9d86e02ec4a38f4b02086acf067f2c776b845d43f901bd1ee1c21bc4b/pydantic_core-2.33.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f36afd0d56a6c42cf4e8465b6441cf546ed69d3a4ec92724cc9c8c61bd6ecf4", size = 2127717 },
{ url = "https://files.pythonhosted.org/packages/3c/43/6f381575c61b7c58b0fd0b92134c5a1897deea4cdfc3d47567b3ff460a4e/pydantic_core-2.33.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a98257451164666afafc7cbf5fb00d613e33f7e7ebb322fbcd99345695a9a61", size = 2680287 },
{ url = "https://files.pythonhosted.org/packages/01/42/c0d10d1451d161a9a0da9bbef023b8005aa26e9993a8cc24dc9e3aa96c93/pydantic_core-2.33.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecc6d02d69b54a2eb83ebcc6f29df04957f734bcf309d346b4f83354d8376862", size = 2008276 },
{ url = "https://files.pythonhosted.org/packages/20/ca/e08df9dba546905c70bae44ced9f3bea25432e34448d95618d41968f40b7/pydantic_core-2.33.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a69b7596c6603afd049ce7f3835bcf57dd3892fc7279f0ddf987bebed8caa5a", size = 2115305 },
{ url = "https://files.pythonhosted.org/packages/03/1f/9b01d990730a98833113581a78e595fd40ed4c20f9693f5a658fb5f91eff/pydantic_core-2.33.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea30239c148b6ef41364c6f51d103c2988965b643d62e10b233b5efdca8c0099", size = 2068999 },
{ url = "https://files.pythonhosted.org/packages/20/18/fe752476a709191148e8b1e1139147841ea5d2b22adcde6ee6abb6c8e7cf/pydantic_core-2.33.0-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:abfa44cf2f7f7d7a199be6c6ec141c9024063205545aa09304349781b9a125e6", size = 2241488 },
{ url = "https://files.pythonhosted.org/packages/81/22/14738ad0a0bf484b928c9e52004f5e0b81dd8dabbdf23b843717b37a71d1/pydantic_core-2.33.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:20d4275f3c4659d92048c70797e5fdc396c6e4446caf517ba5cad2db60cd39d3", size = 2248430 },
{ url = "https://files.pythonhosted.org/packages/e8/27/be7571e215ac8d321712f2433c445b03dbcd645366a18f67b334df8912bc/pydantic_core-2.33.0-cp312-cp312-win32.whl", hash = "sha256:918f2013d7eadea1d88d1a35fd4a1e16aaf90343eb446f91cb091ce7f9b431a2", size = 1908353 },
{ url = "https://files.pythonhosted.org/packages/be/3a/be78f28732f93128bd0e3944bdd4b3970b389a1fbd44907c97291c8dcdec/pydantic_core-2.33.0-cp312-cp312-win_amd64.whl", hash = "sha256:aec79acc183865bad120b0190afac467c20b15289050648b876b07777e67ea48", size = 1955956 },
{ url = "https://files.pythonhosted.org/packages/21/26/b8911ac74faa994694b76ee6a22875cc7a4abea3c381fdba4edc6c6bef84/pydantic_core-2.33.0-cp312-cp312-win_arm64.whl", hash = "sha256:5461934e895968655225dfa8b3be79e7e927e95d4bd6c2d40edd2fa7052e71b6", size = 1903259 },
{ url = "https://files.pythonhosted.org/packages/79/20/de2ad03ce8f5b3accf2196ea9b44f31b0cd16ac6e8cfc6b21976ed45ec35/pydantic_core-2.33.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f00e8b59e1fc8f09d05594aa7d2b726f1b277ca6155fc84c0396db1b373c4555", size = 2032214 },
{ url = "https://files.pythonhosted.org/packages/f9/af/6817dfda9aac4958d8b516cbb94af507eb171c997ea66453d4d162ae8948/pydantic_core-2.33.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a73be93ecef45786d7d95b0c5e9b294faf35629d03d5b145b09b81258c7cd6d", size = 1852338 },
{ url = "https://files.pythonhosted.org/packages/44/f3/49193a312d9c49314f2b953fb55740b7c530710977cabe7183b8ef111b7f/pydantic_core-2.33.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff48a55be9da6930254565ff5238d71d5e9cd8c5487a191cb85df3bdb8c77365", size = 1896913 },
{ url = "https://files.pythonhosted.org/packages/06/e0/c746677825b2e29a2fa02122a8991c83cdd5b4c5f638f0664d4e35edd4b2/pydantic_core-2.33.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26a4ea04195638dcd8c53dadb545d70badba51735b1594810e9768c2c0b4a5da", size = 1986046 },
{ url = "https://files.pythonhosted.org/packages/11/ec/44914e7ff78cef16afb5e5273d480c136725acd73d894affdbe2a1bbaad5/pydantic_core-2.33.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41d698dcbe12b60661f0632b543dbb119e6ba088103b364ff65e951610cb7ce0", size = 2128097 },
{ url = "https://files.pythonhosted.org/packages/fe/f5/c6247d424d01f605ed2e3802f338691cae17137cee6484dce9f1ac0b872b/pydantic_core-2.33.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae62032ef513fe6281ef0009e30838a01057b832dc265da32c10469622613885", size = 2681062 },
{ url = "https://files.pythonhosted.org/packages/f0/85/114a2113b126fdd7cf9a9443b1b1fe1b572e5bd259d50ba9d5d3e1927fa9/pydantic_core-2.33.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f225f3a3995dbbc26affc191d0443c6c4aa71b83358fd4c2b7d63e2f6f0336f9", size = 2007487 },
{ url = "https://files.pythonhosted.org/packages/e6/40/3c05ed28d225c7a9acd2b34c5c8010c279683a870219b97e9f164a5a8af0/pydantic_core-2.33.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5bdd36b362f419c78d09630cbaebc64913f66f62bda6d42d5fbb08da8cc4f181", size = 2121382 },
{ url = "https://files.pythonhosted.org/packages/8a/22/e70c086f41eebd323e6baa92cc906c3f38ddce7486007eb2bdb3b11c8f64/pydantic_core-2.33.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2a0147c0bef783fd9abc9f016d66edb6cac466dc54a17ec5f5ada08ff65caf5d", size = 2072473 },
{ url = "https://files.pythonhosted.org/packages/3e/84/d1614dedd8fe5114f6a0e348bcd1535f97d76c038d6102f271433cd1361d/pydantic_core-2.33.0-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:c860773a0f205926172c6644c394e02c25421dc9a456deff16f64c0e299487d3", size = 2249468 },
{ url = "https://files.pythonhosted.org/packages/b0/c0/787061eef44135e00fddb4b56b387a06c303bfd3884a6df9bea5cb730230/pydantic_core-2.33.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:138d31e3f90087f42aa6286fb640f3c7a8eb7bdae829418265e7e7474bd2574b", size = 2254716 },
{ url = "https://files.pythonhosted.org/packages/ae/e2/27262eb04963201e89f9c280f1e10c493a7a37bc877e023f31aa72d2f911/pydantic_core-2.33.0-cp313-cp313-win32.whl", hash = "sha256:d20cbb9d3e95114325780f3cfe990f3ecae24de7a2d75f978783878cce2ad585", size = 1916450 },
{ url = "https://files.pythonhosted.org/packages/13/8d/25ff96f1e89b19e0b70b3cd607c9ea7ca27e1dcb810a9cd4255ed6abf869/pydantic_core-2.33.0-cp313-cp313-win_amd64.whl", hash = "sha256:ca1103d70306489e3d006b0f79db8ca5dd3c977f6f13b2c59ff745249431a606", size = 1956092 },
{ url = "https://files.pythonhosted.org/packages/1b/64/66a2efeff657b04323ffcd7b898cb0354d36dae3a561049e092134a83e9c/pydantic_core-2.33.0-cp313-cp313-win_arm64.whl", hash = "sha256:6291797cad239285275558e0a27872da735b05c75d5237bbade8736f80e4c225", size = 1908367 },
{ url = "https://files.pythonhosted.org/packages/52/54/295e38769133363d7ec4a5863a4d579f331728c71a6644ff1024ee529315/pydantic_core-2.33.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7b79af799630af263eca9ec87db519426d8c9b3be35016eddad1832bac812d87", size = 1813331 },
{ url = "https://files.pythonhosted.org/packages/4c/9c/0c8ea02db8d682aa1ef48938abae833c1d69bdfa6e5ec13b21734b01ae70/pydantic_core-2.33.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eabf946a4739b5237f4f56d77fa6668263bc466d06a8036c055587c130a46f7b", size = 1986653 },
{ url = "https://files.pythonhosted.org/packages/8e/4f/3fb47d6cbc08c7e00f92300e64ba655428c05c56b8ab6723bd290bae6458/pydantic_core-2.33.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8a1d581e8cdbb857b0e0e81df98603376c1a5c34dc5e54039dcc00f043df81e7", size = 1931234 },
]
[[package]]
name = "pydantic-settings"
version = "2.8.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic" },
{ name = "python-dotenv" },
]
sdist = { url = "https://files.pythonhosted.org/packages/88/82/c79424d7d8c29b994fb01d277da57b0a9b09cc03c3ff875f9bd8a86b2145/pydantic_settings-2.8.1.tar.gz", hash = "sha256:d5c663dfbe9db9d5e1c646b2e161da12f0d734d422ee56f567d0ea2cee4e8585", size = 83550 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/53/a64f03044927dc47aafe029c42a5b7aabc38dfb813475e0e1bf71c4a59d0/pydantic_settings-2.8.1-py3-none-any.whl", hash = "sha256:81942d5ac3d905f7f3ee1a70df5dfb62d5569c12f51a5a647defc1c3d9ee2e9c", size = 30839 },
]
[[package]]
name = "pyside6"
version = "6.8.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pyside6-addons" },
{ name = "pyside6-essentials" },
{ name = "shiboken6" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/ef/5f/dc408fb62a99d20e30f930f4de60c7d5c257d25a97baab600dc430f859bf/PySide6-6.8.3-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:31f390c961b54067ae41360e5ea3b340ce0e0e5feadea2236c28226d3b37edcc", size = 553886 },
{ url = "https://files.pythonhosted.org/packages/f0/00/67c41f7280ed9d1c53a50bdaa5a6050134875341f0be96a58d329fe71ade/PySide6-6.8.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:8e53e2357bfbdee1fa86c48312bf637460a2c26d49e7af0b3fae2e179ccc7052", size = 554788 },
{ url = "https://files.pythonhosted.org/packages/99/80/79df5af0f309f75297054caf127e82c6c4e6c3cd237a8abd428d18fe3a16/PySide6-6.8.3-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:5bf5153cab9484629315f57c56a9ad4b7d075b4dd275f828f7549abf712c590b", size = 554785 },
{ url = "https://files.pythonhosted.org/packages/ce/b0/238abab3e005fff130a455ba07e8f1323e624b14e41f70f2f62c6bdc2601/PySide6-6.8.3-cp39-abi3-win_amd64.whl", hash = "sha256:722dc0061d8ef6dbb8c0b99864f21e83a5b49ece1ecb2d0b890840d969e1e461", size = 561080 },
]
[[package]]
name = "pyside6-addons"
version = "6.8.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pyside6-essentials" },
{ name = "shiboken6" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/2f/23/fcd006128ecac40284fc218f804a46c52ebc1ad5995f3edb548d296f0d39/PySide6_Addons-6.8.3-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:ea46649e40b9e6ab11a0da2da054d3914bff5607a5882885e9c3bc2eef200036", size = 302447038 },
{ url = "https://files.pythonhosted.org/packages/49/93/e7c743e7a01e66f22cac4133c320832700b9d15a43d9a46dbd067cc1877e/PySide6_Addons-6.8.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6983d3b01fad53637bad5360930d5923509c744cc39704f9c1190eb9934e33da", size = 160547187 },
{ url = "https://files.pythonhosted.org/packages/c7/5b/51217c90f9292651ef39ec3179bcb7797db1481a8f61138378720b1b91bc/PySide6_Addons-6.8.3-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:7949a844a40ee10998eb2734e2c06c4c7182dfcd4c21cc4108a6b96655ebe59f", size = 156291508 },
{ url = "https://files.pythonhosted.org/packages/77/e8/bbe84519355814166bbb7e867dfc8c7ea0044827d64b6b11c29a7b1a7424/PySide6_Addons-6.8.3-cp39-abi3-win_amd64.whl", hash = "sha256:67548f6db11f4e1b7e4b6efd9c3fc2e8d275188a7b2feac388961128572a6955", size = 127865208 },
]
[[package]]
name = "pyside6-essentials"
version = "6.8.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "shiboken6" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/ad/74/082381f996baea3d6716d542c2184cb031e63f1cb6d4edca871fe82dd787/PySide6_Essentials-6.8.3-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:aa56c135db924ecfaf50088baf32f737d28027419ca5fee67c0c7141b29184e3", size = 134189733 },
{ url = "https://files.pythonhosted.org/packages/f0/b2/3205336262bf88d57f01503df81ede2a0b1eecbb2a7d58978a5e5625f7c1/PySide6_Essentials-6.8.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:fd57fa0c886ef99b3844173322c0023ec77cc946a0c9a0cdfbc2ac5c511053c1", size = 95088226 },
{ url = "https://files.pythonhosted.org/packages/c9/e9/c5c48563c0436465356dbef44ef0396713c1194c37c7bb4d75c83414b90c/PySide6_Essentials-6.8.3-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:b4f4823f870b5bed477d6f7b6a3041839b859f70abfd703cf53208c73c2fe4cd", size = 92966444 },
{ url = "https://files.pythonhosted.org/packages/8e/0f/5d8c6da7586e57ee032643e0c0e62335ef1a1add1a980160ddd1654f1d8d/PySide6_Essentials-6.8.3-cp39-abi3-win_amd64.whl", hash = "sha256:3c0fae5550aff69f2166f46476c36e0ef56ce73d84829eac4559770b0c034b07", size = 72191029 },
]
[[package]]
name = "python-dotenv"
version = "1.1.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/88/2c/7bb1416c5620485aa793f2de31d3df393d3686aa8a8506d11e10e13c5baf/python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", size = 39920 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/1e/18/98a99ad95133c6a6e2005fe89faedf294a748bd5dc803008059409ac9b1e/python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d", size = 20256 },
]
[[package]]
name = "setuptools"
version = "78.1.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/a9/5a/0db4da3bc908df06e5efae42b44e75c81dd52716e10192ff36d0c1c8e379/setuptools-78.1.0.tar.gz", hash = "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54", size = 1367827 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl", hash = "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8", size = 1256108 },
]
[[package]]
name = "shiboken6"
version = "6.8.3"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e5/89/162c763f2799786e16f9045aa599dcf126e0f5f6a517f1e0251ba0be17e6/shiboken6-6.8.3-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:483efc7dd53c69147b8a8ade71f7619c79ffc683efcb1dc4f4cb6c40bb23d29b", size = 402402 },
{ url = "https://files.pythonhosted.org/packages/76/a1/f1958c9d00176044ab00464cd89b6969ef3a7d2ed12d316ff1eda3dec88f/shiboken6-6.8.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:295a003466ca2cccf6660e2f2ceb5e6cef4af192a48a196a32d46b6f0c9ec5cb", size = 204730 },
{ url = "https://files.pythonhosted.org/packages/a8/8d/48ba0b33953592e54b688f2dceb06274f419f7743a3ea0f4e48faf837652/shiboken6-6.8.3-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:2b1a41348102952d2a5fbf3630bddd4d44112e18058b5e4cf505e51f2812429d", size = 201025 },
{ url = "https://files.pythonhosted.org/packages/aa/29/e77f3fba5337f2d98f977eece0fd24cda6cf7d83be2699514d2ca1d34f6c/shiboken6-6.8.3-cp39-abi3-win_amd64.whl", hash = "sha256:bca3a94513ce9242f7d4bbdca902072a1631888e0aa3a8711a52cc5dbe93588f", size = 1150998 },
]
[[package]]
name = "sympy"
version = "1.13.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "mpmath" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ca/99/5a5b6f19ff9f083671ddf7b9632028436167cd3d33e11015754e41b249a4/sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f", size = 7533040 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8", size = 6189177 },
]
[[package]]
name = "torch"
version = "2.6.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "filelock" },
{ name = "fsspec" },
{ name = "jinja2" },
{ name = "networkx" },
{ name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "setuptools" },
{ name = "sympy" },
{ name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "typing-extensions" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/e5/35/0c52d708144c2deb595cd22819a609f78fdd699b95ff6f0ebcd456e3c7c1/torch-2.6.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:2bb8987f3bb1ef2675897034402373ddfc8f5ef0e156e2d8cfc47cacafdda4a9", size = 766624563 },
{ url = "https://files.pythonhosted.org/packages/01/d6/455ab3fbb2c61c71c8842753b566012e1ed111e7a4c82e0e1c20d0c76b62/torch-2.6.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:b789069020c5588c70d5c2158ac0aa23fd24a028f34a8b4fcb8fcb4d7efcf5fb", size = 95607867 },
{ url = "https://files.pythonhosted.org/packages/18/cf/ae99bd066571656185be0d88ee70abc58467b76f2f7c8bfeb48735a71fe6/torch-2.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:7e1448426d0ba3620408218b50aa6ada88aeae34f7a239ba5431f6c8774b1239", size = 204120469 },
{ url = "https://files.pythonhosted.org/packages/81/b4/605ae4173aa37fb5aa14605d100ff31f4f5d49f617928c9f486bb3aaec08/torch-2.6.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:9a610afe216a85a8b9bc9f8365ed561535c93e804c2a317ef7fabcc5deda0989", size = 66532538 },
{ url = "https://files.pythonhosted.org/packages/24/85/ead1349fc30fe5a32cadd947c91bda4a62fbfd7f8c34ee61f6398d38fb48/torch-2.6.0-cp313-cp313-manylinux1_x86_64.whl", hash = "sha256:4874a73507a300a5d089ceaff616a569e7bb7c613c56f37f63ec3ffac65259cf", size = 766626191 },
{ url = "https://files.pythonhosted.org/packages/dd/b0/26f06f9428b250d856f6d512413e9e800b78625f63801cbba13957432036/torch-2.6.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:a0d5e1b9874c1a6c25556840ab8920569a7a4137afa8a63a32cee0bc7d89bd4b", size = 95611439 },
{ url = "https://files.pythonhosted.org/packages/c2/9c/fc5224e9770c83faed3a087112d73147cd7c7bfb7557dcf9ad87e1dda163/torch-2.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:510c73251bee9ba02ae1cb6c9d4ee0907b3ce6020e62784e2d7598e0cfa4d6cc", size = 204126475 },
{ url = "https://files.pythonhosted.org/packages/88/8b/d60c0491ab63634763be1537ad488694d316ddc4a20eaadd639cedc53971/torch-2.6.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:ff96f4038f8af9f7ec4231710ed4549da1bdebad95923953a25045dcf6fd87e2", size = 66536783 },
]
[[package]]
name = "triton"
version = "3.2.0"
source = { registry = "https://pypi.org/simple" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/06/00/59500052cb1cf8cf5316be93598946bc451f14072c6ff256904428eaf03c/triton-3.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d9b215efc1c26fa7eefb9a157915c92d52e000d2bf83e5f69704047e63f125c", size = 253159365 },
{ url = "https://files.pythonhosted.org/packages/c7/30/37a3384d1e2e9320331baca41e835e90a3767303642c7a80d4510152cbcf/triton-3.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5dfa23ba84541d7c0a531dfce76d8bcd19159d50a4a8b14ad01e91734a5c1b0", size = 253154278 },
]
[[package]]
name = "typing-extensions"
version = "4.13.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/0e/3e/b00a62db91a83fff600de219b6ea9908e6918664899a2d85db222f4fbf19/typing_extensions-4.13.0.tar.gz", hash = "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", size = 106520 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e0/86/39b65d676ec5732de17b7e3c476e45bb80ec64eb50737a8dce1a4178aba1/typing_extensions-4.13.0-py3-none-any.whl", hash = "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5", size = 45683 },
]
[[package]]
name = "typing-inspection"
version = "0.4.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", size = 14125 },
]