From 8874d3c2f97e58e03880d10f793551dc00178559 Mon Sep 17 00:00:00 2001 From: Amber Williams Date: Sun, 11 Aug 2024 18:57:01 +0100 Subject: [PATCH 1/5] feat: structured outputs in LLM request & updated data extraction modelling --- .env.example | 2 +- .gitignore | 8 +- chat_extractor.py | 265 +++----- config.py | 4 +- main.py | 60 +- poetry.lock | 1548 ++++++++++++++++++++------------------------- pyproject.toml | 18 +- utils.py | 90 +-- 8 files changed, 886 insertions(+), 1109 deletions(-) diff --git a/.env.example b/.env.example index f903dde..da275fa 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,2 @@ OPENAI_API_KEY= -OPENAI_MODEL=gpt-3.5-turbo-1106 \ No newline at end of file +OPENAI_MODEL=gpt-4o-mini \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5772d67..6cd34c0 100644 --- a/.gitignore +++ b/.gitignore @@ -164,4 +164,10 @@ cython_debug/ .DS_Store # local output files -output/** +output/**/**/batch +output/**/**/clean.csv +output/**/**/summary.csv +output/**/**/temp.csv + +# Local TODO file +TODO \ No newline at end of file diff --git a/chat_extractor.py b/chat_extractor.py index 738185c..2df2f9b 100644 --- a/chat_extractor.py +++ b/chat_extractor.py @@ -1,182 +1,101 @@ import json +from typing import Optional, List +from enum import Enum +from httpx import Timeout -import openai +from pydantic import BaseModel, ValidationError +from openai import OpenAI + + +structured_output_valid_gpt_models = [ + "gpt-4o-mini", + "gpt-4o", + "gpt-4o-2024-08-06" +] + + +system_role_prompt = """ + You are a data extraction expert that extracts job posting data based on a list of job postings you are provided. + + Important rules: + There can be many roles to one posting in these cases the comment_id is will be the same for the related roles. + Make sure if a job title has 'and' or '&' in it that you split the job title into more than one job postings. +""" + + +class RemoteEnum(str, Enum): + YES = "yes" + NO = "no" + HYBRID = "hybrid" + UNKNOWN = "unknown" + + +class CurrencyEnum(str, Enum): + USD = "USD" + EUR = "EUR" + GBP = "GBP" + CAD = "CAD" + CNY = "CNY" + AUD = "AUD" + CHF = "CHF" + MXN = "MXN" + UNKNOWN = "unknown" + + +class EmploymentType(str, Enum): + FULL_TIME = "full-time" + PART_TIME = "part-time" + CONTRACT = "contract" + INTERN = "intern" + UNKNOWN = "unknown" + + +class JobPosting(BaseModel): + comment_id: int + company_name: str + job_title: str + employment_type: EmploymentType + currency: CurrencyEnum + remote: RemoteEnum + salary: Optional[str] + remote_rules: Optional[str] + how_to_apply: Optional[str] + company_city: Optional[str] + company_country: Optional[str] + languages_and_frameworks: Optional[List[str]] + + +class JobPostings(BaseModel): + postings: List[JobPosting] class ChatExtractor: - def __init__(self, model_key=None, model=None, max_tokens=500): - if model_key: - self.model_key = model_key - else: - raise ValueError("No OpenAI API key provided") - if model: - self.model = model - else: - raise ValueError("No OpenAI API model provided") - self.max_tokens = max_tokens + def __init__(self, model_key: str, model: str): + if isinstance(model, str): + if model not in structured_output_valid_gpt_models: + raise ValueError( + f"Invalid model. Available GPT models: {', '.join(_model for _model in valid_gpt_models)}" + ) self.model = model - self.system_role = """You are a helpful assistant that extracts the key points of a job posting designed to output JSON. - - Instructions: - - Be concise and only include key points of salary, location, remote/on-onsite, company name, company location, link to apply, languages and frameworks - - Use lowercase, - - Don't use line breaks. - - If it isn't an comment for a company hiring, then `salary` should be `None`. - - Return a flat map of items - DO NOT return a list with nested children. - """ - self.example_text_1 = """ - { - "245": "Figma | https://www.figma.com/ | San Francisco, New York City, and US remote | Full TimeSelected job postings here (all compensation in annual base salary range for SF/NY hubs):- Engineering Director - Machine Learning ($280,000—$381,000 USD): https://boards.greenhouse.io/figma/jobs/4953079004- Engineering Director - Server Platform ($282,000—$410,000 USD): https://boards.greenhouse.io/figma/jobs/4868741004- ML/AI Engineer ($168,000—$350,000 USD): https://boards.greenhouse.io/figma/jobs/4756707004- Software Engineer - FigJam ($168,000—$350,000 USD): https://boards.greenhouse.io/figma/jobs/4339815004===Born on the Web, Figma helps entire product teams brainstorm, create, test, and ship better designs, together. From great products to long-lasting companies, we believe that nothing great is made alone. Come make with us!Figma recently made 200 fixes and improvements to Dev Mode: https://news.ycombinator.com/item?id=37226227Keeping Figma fast — perf-testing the WASM editor: https://news.ycombinator.com/item?id=37324121", - "246": "SmarterDx | 180 - 230K + equity + benefits | Remote first (but U.S. only due to data confidentiality) | Full time We are an early stage health tech company using AI to improve hospital revenue cycle (making healthcare costs lower and allowing doctors to focus on patient care). The team is small but high functioning (MD + data scientist combos, former ASF board member, Google and Amazon engineers, Stanford LLM researchers, etc.) and initially scaled the company to $1MM+ in contracted revenue without raising capital.We have been backed by top investors including Floodgate (Lyft, Twitch, Twitter), Bessemer, and are currently on pace to 30X in revenue over a two-year time period.Who we are looking for:- Data scientists- ML Ops- FS Eng (Senior and Staff)- Product designer- Technical PM (not listed yet on careers but we are hiring for this!)Be part of the journey as we hone our PMF and build to scale! For more, see: https://smarterdx.com/careers If interested email us at hiring at smarterdx dot com" - } - - """ - self.example_entities_1 = json.dumps([{ - 'index': '245', - 'job title': 'Engineering Director - Machine Learning', - 'salary': '$280,000—$381,000 USD', - 'company': 'Figma', - 'company location': 'San Francisco, New York City', - 'remote': 'Yes', - 'link to apply': 'https://boards.greenhouse.io/figma/jobs/4953079004', - }, - { - 'index': '245', - 'job title': 'Engineering Director - Server Platform', - 'salary': '$282,000—$410,000 USD', - 'company': 'Figma', - 'company location': 'San Francisco, New York City', - 'remote': 'Yes', - 'link to apply': 'https://boards.greenhouse.io/figma/jobs/4868741004', - }, - { - 'index': '245', - 'job title': 'ML/AI Engineer', - 'salary': '$168,000—$350,000 USD', - 'company': 'Figma', - 'company location': 'San Francisco, New York City', - 'remote': 'Yes', - 'link to apply': 'https://boards.greenhouse.io/figma/jobs/4756707004', - }, - { - 'index': '245', - 'job title': 'Software Engineer', - 'salary': '$168,000—$350,000 USD', - 'company': 'Figma', - 'company location': 'San Francisco, New York City', - 'remote': 'Yes', - 'link to apply': 'https://boards.greenhouse.io/figma/jobs/4339815004', - }, - { - 'index': '246', - 'job title': 'Data scientists', - 'salary': '180 - 230K + equity + benefits', - 'company': 'SmarterDx', - 'company location': 'Unknown', - 'remote': 'Yes (but U.S. only due to data confidentiality)', - 'link to apply': 'https://smarterdx.com/careers', - }, - { - 'index': '246', - 'job title': 'ML Ops', - 'salary': '180 - 230K + equity + benefits', - 'company': 'SmarterDx', - 'company location': 'Unknown', - 'remote': 'Yes (but U.S. only due to data confidentiality)', - 'link to apply': 'https://smarterdx.com/careers', - }, - { - 'index': '246', - 'job title': 'FS Eng (Senior and Staff)', - 'salary': '180 - 230K + equity + benefits', - 'company': 'SmarterDx', - 'company location': 'Unknown', - 'remote': 'Yes (but U.S. only due to data confidentiality)', - 'link to apply': 'https://smarterdx.com/careers', - }, - { - 'index': '246', - 'job title': 'Product designer', - 'salary': '180 - 230K + equity + benefits', - 'company': 'SmarterDx', - 'company location': 'Unknown', - 'remote': 'Yes (but U.S. only due to data confidentiality)', - 'link to apply': 'https://smarterdx.com/careers', - }, - { - 'index': '246', - 'job title': 'Technical PM', - 'salary': '180 - 230K + equity + benefits', - 'company': 'SmarterDx', - 'company location': 'Unknown', - 'remote': 'Yes (but U.S. only due to data confidentiality)', - 'link to apply': 'https://smarterdx.com/careers', - }, - ]) - self.example_text_2 = """ - { - "20": "Kanary | Backend Engineering Lead | Seattle, Remote (US or Canada) PST Preferred | Comp Estimate: $150k base + 3% EquityWe’re using large scale browser automation and LLMs to scrub your private info (home address, phone number, emails) off the public internet.We’re a team of 5, backed by top pre-seed VCs like YC and 2048 and privacy leaders like Mozilla. 2 years since our first raise, we’re funded by our customers.Titles at our stage don’t matter much. We’re looking for a strong engineer to help grow the product and the team as we respond to rapid customer growth. The most challenging work at Kanary is backend development. You’ll own projects like:- experiment with novel approaches for anonymously traversing the web (captcha solving, browser fingerprinting, residential IPs). Embrace the cat and mouse game of working against the bad guys.", - "84": "NetFoundry | $115k to 180k base comp | Full-time | REMOTE | USA | DevRel LeaderYou are responsible for building the OpenZiti developer community. This is initially an IC role; you will then build out a DevRel team.The open source OpenZiti platform enables developers to embed zero trust, full mesh networking into their solutions, as software. Example:https://github.com/openziti-test-kitchen/go-httpOpenZiti delivers billions of zero trust sessions per year for leaders around the world. NetFoundry originated OpenZiti, is the maintainer and sells CloudZiti SaaS (hosted OpenZiti). NetFoundry is a remote-first company.You are a good candidate if you love to learn about the problems, opportunities, constraints, hopes and fears of the developer, operations and security communities which you will serve.More info:https://netfoundry.io/careers/devrel-leader/" - } - """ - self.example_entities_2 = json.dumps([{ - 'index': '20', - 'job title': 'Backend Engineering Lead', - 'salary': '$150k base + 3% Equity', - 'company': 'Kanary', - 'company location': 'Seattle', - 'remote': 'Yes', - 'link to apply': None, - }, - { - 'index': '84', - 'job title': 'DevRel Leader', - 'salary': '$115k to 180k base comp ', - 'company': 'NetFoundry', - 'company location': 'USA', - 'remote': 'Yes', - 'link to apply': 'https://netfoundry.io/careers/devrel-leader/', - }, - ]) - self.example_text_3 = """ - { "30": "What an impactful project! I'm applying for your Product Engineer role, but I also wanted to share a page I made for you on my site highlighting a few reasons I think I'd be a great fit.You can see it here:https://www.theothermelissa.com/for-Emily-at-CommunityPhone" } """ - - self.example_entities_3 = "" - - def extract(self, content): - try: - content = json.dumps(content) - except Exception: - print(f"Couldn't convert to JSON") - raise - - openai.api_key = self.model_key - response = openai.ChatCompletion.create( - model=self.model, - messages=[ - {"role": "system", "content": self.system_role}, - {"role": "user", "content": self.example_text_1}, - {"role": "assistant", "content": self.example_entities_1}, - {"role": "user", "content": self.example_text_2}, - {"role": "assistant", "content": self.example_entities_2}, - {"role": "user", "content": self.example_text_3}, - {"role": "assistant", "content": self.example_entities_3}, - {"role": "user", "content": content}, - ], - temperature=0.0, - max_tokens=self.max_tokens, - presence_penalty=0.0, - frequency_penalty=0.0, - timeout=40, - response_format={"type": "json_object"}, - ) + self.client = OpenAI(api_key=model_key) + + def extract(self, content) -> List[JobPosting]: try: - response = response["choices"] - response = response[0]["message"]["content"] - return json.loads(response) - except json.decoder.JSONDecodeError: - print("Couldn't parse JSON from model response") + content_json = json.dumps(content) + completion = self.client.beta.chat.completions.parse( + model=self.model, + response_format=JobPostings, + messages=[ + {"role": "system", "content": system_role_prompt}, + {"role": "user", "content": content_json}, + ], + temperature=0.0, + timeout=Timeout(60), + ) + return completion.choices[0].message.parsed.postings + except ValidationError as e: + print(f"Validation error: {e}") + raise e except Exception as err: print(f"Unexpected {err=}, {type(err)=}") - raise - + raise err diff --git a/config.py b/config.py index bcb4d2e..e0af6d6 100644 --- a/config.py +++ b/config.py @@ -10,13 +10,15 @@ class Settings(BaseSettings): OPENAI_API_KEY: str = os.getenv('OPENAI_API_KEY') - OPENAI_MODEL: str = os.getenv('OPENAI_MODEL') or "gpt-3.5-turbo-1106" + OPENAI_MODEL: str = os.getenv('OPENAI_MODEL') MONTH: str = os.getenv('MONTH') or datetime.now().strftime('%B') YEAR: str = os.getenv('YEAR') or datetime.now().strftime('%Y') TOKEN_LIMIT: int = os.getenv('TOKEN_LIMIT') or 4096 if not OPENAI_API_KEY: raise ValueError("OPENAI_API_KEY not found in .env file") + if not OPENAI_MODEL: + raise ValueError("OPENAI_MODEL not found in .env file") if not MONTH: raise ValueError("MONTH not found in .env file") if not YEAR: diff --git a/main.py b/main.py index 77bc371..31a2692 100644 --- a/main.py +++ b/main.py @@ -3,15 +3,42 @@ import utils from config import settings -from chat_extractor import ChatExtractor +from chat_extractor import ChatExtractor, JobPosting, CurrencyEnum + + +class JobPostingFormatted(JobPosting): + def to_dict(self): + location = None + if self.company_city and self.company_country: + location = f"{self.company_city}, {self.company_country}" + elif self.company_city: + location = f"{self.company_city}, Unknown country" + elif self.company_country: + location = f"Unknown city, {self.company_country}" + + return { + "Post Link": f"[Post link](https://news.ycombinator.com/item?id={self.comment_id})", + "Company": self.company_name, + "Job Title": self.job_title, + "Employment Type": self.employment_type.value, + "Salary": f"{self.salary} ({self.currency.value})" if self.currency != CurrencyEnum.UNKNOWN else self.salary, + "Remote": self.remote.value, + "Location": location, + "Languages and Frameworks": ", ".join(self.languages_and_frameworks) if self.languages_and_frameworks else None, + "Remote Rules": self.remote_rules, + "How to Apply": self.how_to_apply, + } data_files = utils.DataFiles() -dict_ = utils.scrape_hn_hiring_to_dict() -df = pd.DataFrame(dict_) -df = utils.count_tokens(df) -data_files.write_scraped_df(df=df) +try: + df = data_files.read_scraped_df() +except FileNotFoundError: + dict_ = utils.scrape_hn_hiring_to_dict() + df = pd.DataFrame(dict_) + df = utils.count_tokens(df) + data_files.write_scraped_df(df=df) batch_size = df['token_count'].sum() / settings.TOKEN_LIMIT batched_df = np.array_split(df, batch_size) @@ -20,24 +47,20 @@ chat = ChatExtractor( model_key=settings.OPENAI_API_KEY, - model=settings.OPENAI_MODEL, - max_tokens=settings.TOKEN_LIMIT + model=settings.OPENAI_MODEL ) processed_batches = [] for index, batch_n_df in enumerate(batched_df): try: print(f"Processing... batch: {index}") - request_content = batch_n_df.to_dict()["text"] - summary_batch = chat.extract(request_content) - - if not summary_batch: - raise ValueError(f"Parsed content of batch: {index} is empty") - - summary_batch_df = pd.DataFrame.from_dict(summary_batch, orient='index') - summary_batch_df.index = summary_batch_df.index.astype(int) - batch_n_df = summary_batch_df.join(batch_n_df, how='outer') # join parsed content with original comment text - data_files.write_df(df=batch_n_df, batch=index, file_name=None) + request_content = batch_n_df.reset_index().apply( + lambda row: {"text": row['comment_text'], "comment_id": row['comment_id']}, + axis=1 + ).tolist() + jobs = chat.extract(request_content) + summary_batch_df = pd.DataFrame([JobPostingFormatted(**job.model_dump()).to_dict() for job in jobs]) + data_files.write_df(df=summary_batch_df, batch=index, file_name=None) print(f"Saved batch: {index}") processed_batches.append(index) except Exception as e: @@ -45,5 +68,4 @@ continue summary_df = data_files.write_summary_df(processed_batches=processed_batches) -data_files.write_cleaned_df(df=summary_df) -data_files.write_cleaned_md() +data_files.write_summary_md() diff --git a/poetry.lock b/poetry.lock index 11bc17c..3cb6b4f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,170 +1,66 @@ # This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. -[[package]] -name = "aiohttp" -version = "3.9.1" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, - {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, - {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, - {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, - {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, - {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, - {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, - {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, - {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, - {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, - {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, - {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, - {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, - {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, -] - -[package.dependencies] -aiosignal = ">=1.1.2" -attrs = ">=17.3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] - -[[package]] -name = "aiosignal" -version = "1.3.1" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" - [[package]] name = "annotated-types" -version = "0.6.0" +version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" files = [ - {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, - {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] [[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" +name = "anyio" +version = "4.4.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, ] +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "beautifulsoup4" -version = "4.12.2" +version = "4.12.3" description = "Screen-scraping library" optional = false python-versions = ">=3.6.0" files = [ - {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, - {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, ] [package.dependencies] soupsieve = ">1.2" [package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] @@ -278,558 +174,576 @@ files = [ ] [[package]] -name = "frozenlist" -version = "1.4.1" -description = "A list-like structure which implements collections.abc.MutableSequence" +name = "distro" +version = "1.9.0" +description = "Distro - an OS platform information API" +optional = false +python-versions = ">=3.6" +files = [ + {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, + {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, +] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, - {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, - {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, - {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, - {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, - {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, - {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, - {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, - {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, - {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, - {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, - {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, - {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, ] +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.0" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, +] + +[[package]] +name = "jiter" +version = "0.5.0" +description = "Fast iterable JSON parser." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, + {file = "jiter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e"}, + {file = "jiter-0.5.0-cp310-none-win32.whl", hash = "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf"}, + {file = "jiter-0.5.0-cp310-none-win_amd64.whl", hash = "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646"}, + {file = "jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb"}, + {file = "jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338"}, + {file = "jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4"}, + {file = "jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6"}, + {file = "jiter-0.5.0-cp38-none-win32.whl", hash = "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e"}, + {file = "jiter-0.5.0-cp38-none-win_amd64.whl", hash = "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb"}, + {file = "jiter-0.5.0-cp39-none-win32.whl", hash = "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61"}, + {file = "jiter-0.5.0-cp39-none-win_amd64.whl", hash = "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1"}, + {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, ] [[package]] name = "lxml" -version = "4.9.4" +version = "5.2.2" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +python-versions = ">=3.6" files = [ - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e214025e23db238805a600f1f37bf9f9a15413c7bf5f9d6ae194f84980c78722"}, - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec53a09aee61d45e7dbe7e91252ff0491b6b5fee3d85b2d45b173d8ab453efc1"}, - {file = "lxml-4.9.4-cp27-cp27m-win32.whl", hash = "sha256:7d1d6c9e74c70ddf524e3c09d9dc0522aba9370708c2cb58680ea40174800013"}, - {file = "lxml-4.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:cb53669442895763e61df5c995f0e8361b61662f26c1b04ee82899c2789c8f69"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:647bfe88b1997d7ae8d45dabc7c868d8cb0c8412a6e730a7651050b8c7289cf2"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4d973729ce04784906a19108054e1fd476bc85279a403ea1a72fdb051c76fa48"}, - {file = "lxml-4.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:056a17eaaf3da87a05523472ae84246f87ac2f29a53306466c22e60282e54ff8"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aaa5c173a26960fe67daa69aa93d6d6a1cd714a6eb13802d4e4bd1d24a530644"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:647459b23594f370c1c01768edaa0ba0959afc39caeeb793b43158bb9bb6a663"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bdd9abccd0927673cffe601d2c6cdad1c9321bf3437a2f507d6b037ef91ea307"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:00e91573183ad273e242db5585b52670eddf92bacad095ce25c1e682da14ed91"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a602ed9bd2c7d85bd58592c28e101bd9ff9c718fbde06545a70945ffd5d11868"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:de362ac8bc962408ad8fae28f3967ce1a262b5d63ab8cefb42662566737f1dc7"}, - {file = "lxml-4.9.4-cp310-cp310-win32.whl", hash = "sha256:33714fcf5af4ff7e70a49731a7cc8fd9ce910b9ac194f66eaa18c3cc0a4c02be"}, - {file = "lxml-4.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:d3caa09e613ece43ac292fbed513a4bce170681a447d25ffcbc1b647d45a39c5"}, - {file = "lxml-4.9.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:359a8b09d712df27849e0bcb62c6a3404e780b274b0b7e4c39a88826d1926c28"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:43498ea734ccdfb92e1886dfedaebeb81178a241d39a79d5351ba2b671bff2b2"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4855161013dfb2b762e02b3f4d4a21cc7c6aec13c69e3bffbf5022b3e708dd97"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c71b5b860c5215fdbaa56f715bc218e45a98477f816b46cfde4a84d25b13274e"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9a2b5915c333e4364367140443b59f09feae42184459b913f0f41b9fed55794a"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d82411dbf4d3127b6cde7da0f9373e37ad3a43e89ef374965465928f01c2b979"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:273473d34462ae6e97c0f4e517bd1bf9588aa67a1d47d93f760a1282640e24ac"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:389d2b2e543b27962990ab529ac6720c3dded588cc6d0f6557eec153305a3622"}, - {file = "lxml-4.9.4-cp311-cp311-win32.whl", hash = "sha256:8aecb5a7f6f7f8fe9cac0bcadd39efaca8bbf8d1bf242e9f175cbe4c925116c3"}, - {file = "lxml-4.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:c7721a3ef41591341388bb2265395ce522aba52f969d33dacd822da8f018aff8"}, - {file = "lxml-4.9.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:dbcb2dc07308453db428a95a4d03259bd8caea97d7f0776842299f2d00c72fc8"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:01bf1df1db327e748dcb152d17389cf6d0a8c5d533ef9bab781e9d5037619229"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, - {file = "lxml-4.9.4-cp312-cp312-win32.whl", hash = "sha256:266f655d1baff9c47b52f529b5f6bec33f66042f65f7c56adde3fcf2ed62ae8b"}, - {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, - {file = "lxml-4.9.4-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:5557461f83bb7cc718bc9ee1f7156d50e31747e5b38d79cf40f79ab1447afd2d"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fdb325b7fba1e2c40b9b1db407f85642e32404131c08480dd652110fc908561b"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d74d4a3c4b8f7a1f676cedf8e84bcc57705a6d7925e6daef7a1e54ae543a197"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ac7674d1638df129d9cb4503d20ffc3922bd463c865ef3cb412f2c926108e9a4"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:ddd92e18b783aeb86ad2132d84a4b795fc5ec612e3545c1b687e7747e66e2b53"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bd9ac6e44f2db368ef8986f3989a4cad3de4cd55dbdda536e253000c801bcc7"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bc354b1393dce46026ab13075f77b30e40b61b1a53e852e99d3cc5dd1af4bc85"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f836f39678cb47c9541f04d8ed4545719dc31ad850bf1832d6b4171e30d65d23"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9c131447768ed7bc05a02553d939e7f0e807e533441901dd504e217b76307745"}, - {file = "lxml-4.9.4-cp36-cp36m-win32.whl", hash = "sha256:bafa65e3acae612a7799ada439bd202403414ebe23f52e5b17f6ffc2eb98c2be"}, - {file = "lxml-4.9.4-cp36-cp36m-win_amd64.whl", hash = "sha256:6197c3f3c0b960ad033b9b7d611db11285bb461fc6b802c1dd50d04ad715c225"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:7b378847a09d6bd46047f5f3599cdc64fcb4cc5a5a2dd0a2af610361fbe77b16"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1343df4e2e6e51182aad12162b23b0a4b3fd77f17527a78c53f0f23573663545"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6dbdacf5752fbd78ccdb434698230c4f0f95df7dd956d5f205b5ed6911a1367c"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:506becdf2ecaebaf7f7995f776394fcc8bd8a78022772de66677c84fb02dd33d"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca8e44b5ba3edb682ea4e6185b49661fc22b230cf811b9c13963c9f982d1d964"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9d9d5726474cbbef279fd709008f91a49c4f758bec9c062dfbba88eab00e3ff9"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bbdd69e20fe2943b51e2841fc1e6a3c1de460d630f65bde12452d8c97209464d"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8671622256a0859f5089cbe0ce4693c2af407bc053dcc99aadff7f5310b4aa02"}, - {file = "lxml-4.9.4-cp37-cp37m-win32.whl", hash = "sha256:dd4fda67f5faaef4f9ee5383435048ee3e11ad996901225ad7615bc92245bc8e"}, - {file = "lxml-4.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6bee9c2e501d835f91460b2c904bc359f8433e96799f5c2ff20feebd9bb1e590"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:1f10f250430a4caf84115b1e0f23f3615566ca2369d1962f82bef40dd99cd81a"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b505f2bbff50d261176e67be24e8909e54b5d9d08b12d4946344066d66b3e43"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1449f9451cd53e0fd0a7ec2ff5ede4686add13ac7a7bfa6988ff6d75cff3ebe2"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4ece9cca4cd1c8ba889bfa67eae7f21d0d1a2e715b4d5045395113361e8c533d"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59bb5979f9941c61e907ee571732219fa4774d5a18f3fa5ff2df963f5dfaa6bc"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b1980dbcaad634fe78e710c8587383e6e3f61dbe146bcbfd13a9c8ab2d7b1192"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9ae6c3363261021144121427b1552b29e7b59de9d6a75bf51e03bc072efb3c37"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bcee502c649fa6351b44bb014b98c09cb00982a475a1912a9881ca28ab4f9cd9"}, - {file = "lxml-4.9.4-cp38-cp38-win32.whl", hash = "sha256:a8edae5253efa75c2fc79a90068fe540b197d1c7ab5803b800fccfe240eed33c"}, - {file = "lxml-4.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:701847a7aaefef121c5c0d855b2affa5f9bd45196ef00266724a80e439220e46"}, - {file = "lxml-4.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:f610d980e3fccf4394ab3806de6065682982f3d27c12d4ce3ee46a8183d64a6a"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aa9b5abd07f71b081a33115d9758ef6077924082055005808f68feccb27616bd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:365005e8b0718ea6d64b374423e870648ab47c3a905356ab6e5a5ff03962b9a9"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:16b9ec51cc2feab009e800f2c6327338d6ee4e752c76e95a35c4465e80390ccd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a905affe76f1802edcac554e3ccf68188bea16546071d7583fb1b693f9cf756b"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fd814847901df6e8de13ce69b84c31fc9b3fb591224d6762d0b256d510cbf382"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91bbf398ac8bb7d65a5a52127407c05f75a18d7015a270fdd94bbcb04e65d573"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f99768232f036b4776ce419d3244a04fe83784bce871b16d2c2e984c7fcea847"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bb5bd6212eb0edfd1e8f254585290ea1dadc3687dd8fd5e2fd9a87c31915cdab"}, - {file = "lxml-4.9.4-cp39-cp39-win32.whl", hash = "sha256:88f7c383071981c74ec1998ba9b437659e4fd02a3c4a4d3efc16774eb108d0ec"}, - {file = "lxml-4.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:936e8880cc00f839aa4173f94466a8406a96ddce814651075f95837316369899"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:f6c35b2f87c004270fa2e703b872fcc984d714d430b305145c39d53074e1ffe0"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:606d445feeb0856c2b424405236a01c71af7c97e5fe42fbc778634faef2b47e4"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1bdcbebd4e13446a14de4dd1825f1e778e099f17f79718b4aeaf2403624b0f7"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0a08c89b23117049ba171bf51d2f9c5f3abf507d65d016d6e0fa2f37e18c0fc5"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:232fd30903d3123be4c435fb5159938c6225ee8607b635a4d3fca847003134ba"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:231142459d32779b209aa4b4d460b175cadd604fed856f25c1571a9d78114771"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:520486f27f1d4ce9654154b4494cf9307b495527f3a2908ad4cb48e4f7ed7ef7"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:562778586949be7e0d7435fcb24aca4810913771f845d99145a6cee64d5b67ca"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a9e7c6d89c77bb2770c9491d988f26a4b161d05c8ca58f63fb1f1b6b9a74be45"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:786d6b57026e7e04d184313c1359ac3d68002c33e4b1042ca58c362f1d09ff58"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95ae6c5a196e2f239150aa4a479967351df7f44800c93e5a975ec726fef005e2"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:9b556596c49fa1232b0fff4b0e69b9d4083a502e60e404b44341e2f8fb7187f5"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:cc02c06e9e320869d7d1bd323df6dd4281e78ac2e7f8526835d3d48c69060683"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:857d6565f9aa3464764c2cb6a2e3c2e75e1970e877c188f4aeae45954a314e0c"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c42ae7e010d7d6bc51875d768110c10e8a59494855c3d4c348b068f5fb81fdcd"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f10250bb190fb0742e3e1958dd5c100524c2cc5096c67c8da51233f7448dc137"}, - {file = "lxml-4.9.4.tar.gz", hash = "sha256:b1541e50b78e15fa06a2670157a1962ef06591d4c998b998047fff5e3236880e"}, + {file = "lxml-5.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:364d03207f3e603922d0d3932ef363d55bbf48e3647395765f9bfcbdf6d23632"}, + {file = "lxml-5.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50127c186f191b8917ea2fb8b206fbebe87fd414a6084d15568c27d0a21d60db"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74e4f025ef3db1c6da4460dd27c118d8cd136d0391da4e387a15e48e5c975147"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981a06a3076997adf7c743dcd0d7a0415582661e2517c7d961493572e909aa1d"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aef5474d913d3b05e613906ba4090433c515e13ea49c837aca18bde190853dff"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e275ea572389e41e8b039ac076a46cb87ee6b8542df3fff26f5baab43713bca"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5b65529bb2f21ac7861a0e94fdbf5dc0daab41497d18223b46ee8515e5ad297"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bcc98f911f10278d1daf14b87d65325851a1d29153caaf146877ec37031d5f36"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:b47633251727c8fe279f34025844b3b3a3e40cd1b198356d003aa146258d13a2"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:fbc9d316552f9ef7bba39f4edfad4a734d3d6f93341232a9dddadec4f15d425f"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:13e69be35391ce72712184f69000cda04fc89689429179bc4c0ae5f0b7a8c21b"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b6a30a9ab040b3f545b697cb3adbf3696c05a3a68aad172e3fd7ca73ab3c835"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a233bb68625a85126ac9f1fc66d24337d6e8a0f9207b688eec2e7c880f012ec0"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:dfa7c241073d8f2b8e8dbc7803c434f57dbb83ae2a3d7892dd068d99e96efe2c"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1a7aca7964ac4bb07680d5c9d63b9d7028cace3e2d43175cb50bba8c5ad33316"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ae4073a60ab98529ab8a72ebf429f2a8cc612619a8c04e08bed27450d52103c0"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ffb2be176fed4457e445fe540617f0252a72a8bc56208fd65a690fdb1f57660b"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e290d79a4107d7d794634ce3e985b9ae4f920380a813717adf61804904dc4393"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:96e85aa09274955bb6bd483eaf5b12abadade01010478154b0ec70284c1b1526"}, + {file = "lxml-5.2.2-cp310-cp310-win32.whl", hash = "sha256:f956196ef61369f1685d14dad80611488d8dc1ef00be57c0c5a03064005b0f30"}, + {file = "lxml-5.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:875a3f90d7eb5c5d77e529080d95140eacb3c6d13ad5b616ee8095447b1d22e7"}, + {file = "lxml-5.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:45f9494613160d0405682f9eee781c7e6d1bf45f819654eb249f8f46a2c22545"}, + {file = "lxml-5.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0b3f2df149efb242cee2ffdeb6674b7f30d23c9a7af26595099afaf46ef4e88"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d28cb356f119a437cc58a13f8135ab8a4c8ece18159eb9194b0d269ec4e28083"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:657a972f46bbefdbba2d4f14413c0d079f9ae243bd68193cb5061b9732fa54c1"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b9ea10063efb77a965a8d5f4182806fbf59ed068b3c3fd6f30d2ac7bee734"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07542787f86112d46d07d4f3c4e7c760282011b354d012dc4141cc12a68cef5f"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:303f540ad2dddd35b92415b74b900c749ec2010e703ab3bfd6660979d01fd4ed"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2eb2227ce1ff998faf0cd7fe85bbf086aa41dfc5af3b1d80867ecfe75fb68df3"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:1d8a701774dfc42a2f0b8ccdfe7dbc140500d1049e0632a611985d943fcf12df"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:56793b7a1a091a7c286b5f4aa1fe4ae5d1446fe742d00cdf2ffb1077865db10d"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eb00b549b13bd6d884c863554566095bf6fa9c3cecb2e7b399c4bc7904cb33b5"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a2569a1f15ae6c8c64108a2cd2b4a858fc1e13d25846be0666fc144715e32ab"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:8cf85a6e40ff1f37fe0f25719aadf443686b1ac7652593dc53c7ef9b8492b115"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:d237ba6664b8e60fd90b8549a149a74fcc675272e0e95539a00522e4ca688b04"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0b3f5016e00ae7630a4b83d0868fca1e3d494c78a75b1c7252606a3a1c5fc2ad"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23441e2b5339bc54dc949e9e675fa35efe858108404ef9aa92f0456929ef6fe8"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2fb0ba3e8566548d6c8e7dd82a8229ff47bd8fb8c2da237607ac8e5a1b8312e5"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:79d1fb9252e7e2cfe4de6e9a6610c7cbb99b9708e2c3e29057f487de5a9eaefa"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6dcc3d17eac1df7859ae01202e9bb11ffa8c98949dcbeb1069c8b9a75917e01b"}, + {file = "lxml-5.2.2-cp311-cp311-win32.whl", hash = "sha256:4c30a2f83677876465f44c018830f608fa3c6a8a466eb223535035fbc16f3438"}, + {file = "lxml-5.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:49095a38eb333aaf44c06052fd2ec3b8f23e19747ca7ec6f6c954ffea6dbf7be"}, + {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7429e7faa1a60cad26ae4227f4dd0459efde239e494c7312624ce228e04f6391"}, + {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:50ccb5d355961c0f12f6cf24b7187dbabd5433f29e15147a67995474f27d1776"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc911208b18842a3a57266d8e51fc3cfaccee90a5351b92079beed912a7914c2"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33ce9e786753743159799fdf8e92a5da351158c4bfb6f2db0bf31e7892a1feb5"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec87c44f619380878bd49ca109669c9f221d9ae6883a5bcb3616785fa8f94c97"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08ea0f606808354eb8f2dfaac095963cb25d9d28e27edcc375d7b30ab01abbf6"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75a9632f1d4f698b2e6e2e1ada40e71f369b15d69baddb8968dcc8e683839b18"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74da9f97daec6928567b48c90ea2c82a106b2d500f397eeb8941e47d30b1ca85"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:0969e92af09c5687d769731e3f39ed62427cc72176cebb54b7a9d52cc4fa3b73"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:9164361769b6ca7769079f4d426a41df6164879f7f3568be9086e15baca61466"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d26a618ae1766279f2660aca0081b2220aca6bd1aa06b2cf73f07383faf48927"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab67ed772c584b7ef2379797bf14b82df9aa5f7438c5b9a09624dd834c1c1aaf"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3d1e35572a56941b32c239774d7e9ad724074d37f90c7a7d499ab98761bd80cf"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:8268cbcd48c5375f46e000adb1390572c98879eb4f77910c6053d25cc3ac2c67"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e282aedd63c639c07c3857097fc0e236f984ceb4089a8b284da1c526491e3f3d"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfdc2bfe69e9adf0df4915949c22a25b39d175d599bf98e7ddf620a13678585"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4aefd911793b5d2d7a921233a54c90329bf3d4a6817dc465f12ffdfe4fc7b8fe"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8b8df03a9e995b6211dafa63b32f9d405881518ff1ddd775db4e7b98fb545e1c"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f11ae142f3a322d44513de1018b50f474f8f736bc3cd91d969f464b5bfef8836"}, + {file = "lxml-5.2.2-cp312-cp312-win32.whl", hash = "sha256:16a8326e51fcdffc886294c1e70b11ddccec836516a343f9ed0f82aac043c24a"}, + {file = "lxml-5.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:bbc4b80af581e18568ff07f6395c02114d05f4865c2812a1f02f2eaecf0bfd48"}, + {file = "lxml-5.2.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e3d9d13603410b72787579769469af730c38f2f25505573a5888a94b62b920f8"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38b67afb0a06b8575948641c1d6d68e41b83a3abeae2ca9eed2ac59892b36706"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c689d0d5381f56de7bd6966a4541bff6e08bf8d3871bbd89a0c6ab18aa699573"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:cf2a978c795b54c539f47964ec05e35c05bd045db5ca1e8366988c7f2fe6b3ce"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:739e36ef7412b2bd940f75b278749106e6d025e40027c0b94a17ef7968d55d56"}, + {file = "lxml-5.2.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d8bbcd21769594dbba9c37d3c819e2d5847656ca99c747ddb31ac1701d0c0ed9"}, + {file = "lxml-5.2.2-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:2304d3c93f2258ccf2cf7a6ba8c761d76ef84948d87bf9664e14d203da2cd264"}, + {file = "lxml-5.2.2-cp36-cp36m-win32.whl", hash = "sha256:02437fb7308386867c8b7b0e5bc4cd4b04548b1c5d089ffb8e7b31009b961dc3"}, + {file = "lxml-5.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:edcfa83e03370032a489430215c1e7783128808fd3e2e0a3225deee278585196"}, + {file = "lxml-5.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:28bf95177400066596cdbcfc933312493799382879da504633d16cf60bba735b"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a745cc98d504d5bd2c19b10c79c61c7c3df9222629f1b6210c0368177589fb8"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b590b39ef90c6b22ec0be925b211298e810b4856909c8ca60d27ffbca6c12e6"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b336b0416828022bfd5a2e3083e7f5ba54b96242159f83c7e3eebaec752f1716"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:c2faf60c583af0d135e853c86ac2735ce178f0e338a3c7f9ae8f622fd2eb788c"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:4bc6cb140a7a0ad1f7bc37e018d0ed690b7b6520ade518285dc3171f7a117905"}, + {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7ff762670cada8e05b32bf1e4dc50b140790909caa8303cfddc4d702b71ea184"}, + {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:57f0a0bbc9868e10ebe874e9f129d2917750adf008fe7b9c1598c0fbbfdde6a6"}, + {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:a6d2092797b388342c1bc932077ad232f914351932353e2e8706851c870bca1f"}, + {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:60499fe961b21264e17a471ec296dcbf4365fbea611bf9e303ab69db7159ce61"}, + {file = "lxml-5.2.2-cp37-cp37m-win32.whl", hash = "sha256:d9b342c76003c6b9336a80efcc766748a333573abf9350f4094ee46b006ec18f"}, + {file = "lxml-5.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b16db2770517b8799c79aa80f4053cd6f8b716f21f8aca962725a9565ce3ee40"}, + {file = "lxml-5.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7ed07b3062b055d7a7f9d6557a251cc655eed0b3152b76de619516621c56f5d3"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60fdd125d85bf9c279ffb8e94c78c51b3b6a37711464e1f5f31078b45002421"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7e24cb69ee5f32e003f50e016d5fde438010c1022c96738b04fc2423e61706"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23cfafd56887eaed93d07bc4547abd5e09d837a002b791e9767765492a75883f"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:19b4e485cd07b7d83e3fe3b72132e7df70bfac22b14fe4bf7a23822c3a35bff5"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7ce7ad8abebe737ad6143d9d3bf94b88b93365ea30a5b81f6877ec9c0dee0a48"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e49b052b768bb74f58c7dda4e0bdf7b79d43a9204ca584ffe1fb48a6f3c84c66"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d14a0d029a4e176795cef99c056d58067c06195e0c7e2dbb293bf95c08f772a3"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:be49ad33819d7dcc28a309b86d4ed98e1a65f3075c6acd3cd4fe32103235222b"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a6d17e0370d2516d5bb9062c7b4cb731cff921fc875644c3d751ad857ba9c5b1"}, + {file = "lxml-5.2.2-cp38-cp38-win32.whl", hash = "sha256:5b8c041b6265e08eac8a724b74b655404070b636a8dd6d7a13c3adc07882ef30"}, + {file = "lxml-5.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:f61efaf4bed1cc0860e567d2ecb2363974d414f7f1f124b1df368bbf183453a6"}, + {file = "lxml-5.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fb91819461b1b56d06fa4bcf86617fac795f6a99d12239fb0c68dbeba41a0a30"}, + {file = "lxml-5.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d4ed0c7cbecde7194cd3228c044e86bf73e30a23505af852857c09c24e77ec5d"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54401c77a63cc7d6dc4b4e173bb484f28a5607f3df71484709fe037c92d4f0ed"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:625e3ef310e7fa3a761d48ca7ea1f9d8718a32b1542e727d584d82f4453d5eeb"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:519895c99c815a1a24a926d5b60627ce5ea48e9f639a5cd328bda0515ea0f10c"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7079d5eb1c1315a858bbf180000757db8ad904a89476653232db835c3114001"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:343ab62e9ca78094f2306aefed67dcfad61c4683f87eee48ff2fd74902447726"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:cd9e78285da6c9ba2d5c769628f43ef66d96ac3085e59b10ad4f3707980710d3"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:546cf886f6242dff9ec206331209db9c8e1643ae642dea5fdbecae2453cb50fd"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:02f6a8eb6512fdc2fd4ca10a49c341c4e109aa6e9448cc4859af5b949622715a"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:339ee4a4704bc724757cd5dd9dc8cf4d00980f5d3e6e06d5847c1b594ace68ab"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0a028b61a2e357ace98b1615fc03f76eb517cc028993964fe08ad514b1e8892d"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f90e552ecbad426eab352e7b2933091f2be77115bb16f09f78404861c8322981"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d83e2d94b69bf31ead2fa45f0acdef0757fa0458a129734f59f67f3d2eb7ef32"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a02d3c48f9bb1e10c7788d92c0c7db6f2002d024ab6e74d6f45ae33e3d0288a3"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6d68ce8e7b2075390e8ac1e1d3a99e8b6372c694bbe612632606d1d546794207"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:453d037e09a5176d92ec0fd282e934ed26d806331a8b70ab431a81e2fbabf56d"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:3b019d4ee84b683342af793b56bb35034bd749e4cbdd3d33f7d1107790f8c472"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb3942960f0beb9f46e2a71a3aca220d1ca32feb5a398656be934320804c0df9"}, + {file = "lxml-5.2.2-cp39-cp39-win32.whl", hash = "sha256:ac6540c9fff6e3813d29d0403ee7a81897f1d8ecc09a8ff84d2eea70ede1cdbf"}, + {file = "lxml-5.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:610b5c77428a50269f38a534057444c249976433f40f53e3b47e68349cca1425"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b537bd04d7ccd7c6350cdaaaad911f6312cbd61e6e6045542f781c7f8b2e99d2"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4820c02195d6dfb7b8508ff276752f6b2ff8b64ae5d13ebe02e7667e035000b9"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a09f6184f17a80897172863a655467da2b11151ec98ba8d7af89f17bf63dae"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:76acba4c66c47d27c8365e7c10b3d8016a7da83d3191d053a58382311a8bf4e1"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b128092c927eaf485928cec0c28f6b8bead277e28acf56800e972aa2c2abd7a2"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ae791f6bd43305aade8c0e22f816b34f3b72b6c820477aab4d18473a37e8090b"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a2f6a1bc2460e643785a2cde17293bd7a8f990884b822f7bca47bee0a82fc66b"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e8d351ff44c1638cb6e980623d517abd9f580d2e53bfcd18d8941c052a5a009"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bec4bd9133420c5c52d562469c754f27c5c9e36ee06abc169612c959bd7dbb07"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:55ce6b6d803890bd3cc89975fca9de1dff39729b43b73cb15ddd933b8bc20484"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ab6a358d1286498d80fe67bd3d69fcbc7d1359b45b41e74c4a26964ca99c3f8"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:06668e39e1f3c065349c51ac27ae430719d7806c026fec462e5693b08b95696b"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9cd5323344d8ebb9fb5e96da5de5ad4ebab993bbf51674259dbe9d7a18049525"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89feb82ca055af0fe797a2323ec9043b26bc371365847dbe83c7fd2e2f181c34"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e481bba1e11ba585fb06db666bfc23dbe181dbafc7b25776156120bf12e0d5a6"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9d6c6ea6a11ca0ff9cd0390b885984ed31157c168565702959c25e2191674a14"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3d98de734abee23e61f6b8c2e08a88453ada7d6486dc7cdc82922a03968928db"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:69ab77a1373f1e7563e0fb5a29a8440367dec051da6c7405333699d07444f511"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:34e17913c431f5ae01d8658dbf792fdc457073dcdfbb31dc0cc6ab256e664a8d"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f8757b03208c3f50097761be2dea0aba02e94f0dc7023ed73a7bb14ff11eb0"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a520b4f9974b0a0a6ed73c2154de57cdfd0c8800f4f15ab2b73238ffed0b36e"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5e097646944b66207023bc3c634827de858aebc226d5d4d6d16f0b77566ea182"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b5e4ef22ff25bfd4ede5f8fb30f7b24446345f3e79d9b7455aef2836437bc38a"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff69a9a0b4b17d78170c73abe2ab12084bdf1691550c5629ad1fe7849433f324"}, + {file = "lxml-5.2.2.tar.gz", hash = "sha256:bb2dc4898180bea79863d5487e5f9c7c34297414bad54bcd0f0852aee9cfdb87"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (==0.29.37)"] - -[[package]] -name = "multidict" -version = "6.0.4" -description = "multidict implementation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, -] +source = ["Cython (>=3.0.10)"] [[package]] name = "numpy" -version = "1.26.2" +version = "2.0.1" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, - {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, - {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, - {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, - {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, - {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, - {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, - {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, - {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, - {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"}, - {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fbb536eac80e27a2793ffd787895242b7f18ef792563d742c2d673bfcb75134"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:69ff563d43c69b1baba77af455dd0a839df8d25e8590e79c90fcbe1499ebde42"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:1b902ce0e0a5bb7704556a217c4f63a7974f8f43e090aff03fcf262e0b135e02"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:f1659887361a7151f89e79b276ed8dff3d75877df906328f14d8bb40bb4f5101"}, + {file = "numpy-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4658c398d65d1b25e1760de3157011a80375da861709abd7cef3bad65d6543f9"}, + {file = "numpy-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4127d4303b9ac9f94ca0441138acead39928938660ca58329fe156f84b9f3015"}, + {file = "numpy-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e5eeca8067ad04bc8a2a8731183d51d7cbaac66d86085d5f4766ee6bf19c7f87"}, + {file = "numpy-2.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9adbd9bb520c866e1bfd7e10e1880a1f7749f1f6e5017686a5fbb9b72cf69f82"}, + {file = "numpy-2.0.1-cp310-cp310-win32.whl", hash = "sha256:7b9853803278db3bdcc6cd5beca37815b133e9e77ff3d4733c247414e78eb8d1"}, + {file = "numpy-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:81b0893a39bc5b865b8bf89e9ad7807e16717f19868e9d234bdaf9b1f1393868"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75b4e316c5902d8163ef9d423b1c3f2f6252226d1aa5cd8a0a03a7d01ffc6268"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6e4eeb6eb2fced786e32e6d8df9e755ce5be920d17f7ce00bc38fcde8ccdbf9e"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a1e01dcaab205fbece13c1410253a9eea1b1c9b61d237b6fa59bcc46e8e89343"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a8fc2de81ad835d999113ddf87d1ea2b0f4704cbd947c948d2f5513deafe5a7b"}, + {file = "numpy-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a3d94942c331dd4e0e1147f7a8699a4aa47dffc11bf8a1523c12af8b2e91bbe"}, + {file = "numpy-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15eb4eca47d36ec3f78cde0a3a2ee24cf05ca7396ef808dda2c0ddad7c2bde67"}, + {file = "numpy-2.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b83e16a5511d1b1f8a88cbabb1a6f6a499f82c062a4251892d9ad5d609863fb7"}, + {file = "numpy-2.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f87fec1f9bc1efd23f4227becff04bd0e979e23ca50cc92ec88b38489db3b55"}, + {file = "numpy-2.0.1-cp311-cp311-win32.whl", hash = "sha256:36d3a9405fd7c511804dc56fc32974fa5533bdeb3cd1604d6b8ff1d292b819c4"}, + {file = "numpy-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:08458fbf403bff5e2b45f08eda195d4b0c9b35682311da5a5a0a0925b11b9bd8"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bf4e6f4a2a2e26655717a1983ef6324f2664d7011f6ef7482e8c0b3d51e82ac"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6fddc5fe258d3328cd8e3d7d3e02234c5d70e01ebe377a6ab92adb14039cb4"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5daab361be6ddeb299a918a7c0864fa8618af66019138263247af405018b04e1"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:ea2326a4dca88e4a274ba3a4405eb6c6467d3ffbd8c7d38632502eaae3820587"}, + {file = "numpy-2.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529af13c5f4b7a932fb0e1911d3a75da204eff023ee5e0e79c1751564221a5c8"}, + {file = "numpy-2.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6790654cb13eab303d8402354fabd47472b24635700f631f041bd0b65e37298a"}, + {file = "numpy-2.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbab9fc9c391700e3e1287666dfd82d8666d10e69a6c4a09ab97574c0b7ee0a7"}, + {file = "numpy-2.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99d0d92a5e3613c33a5f01db206a33f8fdf3d71f2912b0de1739894668b7a93b"}, + {file = "numpy-2.0.1-cp312-cp312-win32.whl", hash = "sha256:173a00b9995f73b79eb0191129f2455f1e34c203f559dd118636858cc452a1bf"}, + {file = "numpy-2.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:bb2124fdc6e62baae159ebcfa368708867eb56806804d005860b6007388df171"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc085b28d62ff4009364e7ca34b80a9a080cbd97c2c0630bb5f7f770dae9414"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8fae4ebbf95a179c1156fab0b142b74e4ba4204c87bde8d3d8b6f9c34c5825ef"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:72dc22e9ec8f6eaa206deb1b1355eb2e253899d7347f5e2fae5f0af613741d06"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:ec87f5f8aca726117a1c9b7083e7656a9d0d606eec7299cc067bb83d26f16e0c"}, + {file = "numpy-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f682ea61a88479d9498bf2091fdcd722b090724b08b31d63e022adc063bad59"}, + {file = "numpy-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8efc84f01c1cd7e34b3fb310183e72fcdf55293ee736d679b6d35b35d80bba26"}, + {file = "numpy-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3fdabe3e2a52bc4eff8dc7a5044342f8bd9f11ef0934fcd3289a788c0eb10018"}, + {file = "numpy-2.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:24a0e1befbfa14615b49ba9659d3d8818a0f4d8a1c5822af8696706fbda7310c"}, + {file = "numpy-2.0.1-cp39-cp39-win32.whl", hash = "sha256:f9cf5ea551aec449206954b075db819f52adc1638d46a6738253a712d553c7b4"}, + {file = "numpy-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:e9e81fa9017eaa416c056e5d9e71be93d05e2c3c2ab308d23307a8bc4443c368"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61728fba1e464f789b11deb78a57805c70b2ed02343560456190d0501ba37b0f"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:12f5d865d60fb9734e60a60f1d5afa6d962d8d4467c120a1c0cda6eb2964437d"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eacf3291e263d5a67d8c1a581a8ebbcfd6447204ef58828caf69a5e3e8c75990"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2c3a346ae20cfd80b6cfd3e60dc179963ef2ea58da5ec074fd3d9e7a1e7ba97f"}, + {file = "numpy-2.0.1.tar.gz", hash = "sha256:485b87235796410c3519a699cfe1faab097e509e90ebb05dcd098db2ae87e7b3"}, ] [[package]] name = "openai" -version = "0.28.1" -description = "Python client library for the OpenAI API" +version = "1.40.3" +description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-0.28.1-py3-none-any.whl", hash = "sha256:d18690f9e3d31eedb66b57b88c2165d760b24ea0a01f150dd3f068155088ce68"}, - {file = "openai-0.28.1.tar.gz", hash = "sha256:4be1dad329a65b4ce1a660fe6d5431b438f429b5855c883435f0f7fcb6d2dcc8"}, + {file = "openai-1.40.3-py3-none-any.whl", hash = "sha256:09396cb6e2e15c921a5d872bf92841a60a9425da10dcd962b45fe7c4f48f8395"}, + {file = "openai-1.40.3.tar.gz", hash = "sha256:f2ffe907618240938c59d7ccc67dd01dc8c50be203c0077240db6758d2f02480"}, ] [package.dependencies] -aiohttp = "*" -requests = ">=2.20" -tqdm = "*" +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +tqdm = ">4" +typing-extensions = ">=4.11,<5" [package.extras] -datalib = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] -dev = ["black (>=21.6b0,<22.0)", "pytest (==6.*)", "pytest-asyncio", "pytest-mock"] -embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "plotly", "scikit-learn (>=1.0.2)", "scipy", "tenacity (>=8.0.1)"] -wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"] +datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "pandas" -version = "2.1.4" +version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bdec823dc6ec53f7a6339a0e34c68b144a7a1fd28d80c260534c39c62c5bf8c9"}, - {file = "pandas-2.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:294d96cfaf28d688f30c918a765ea2ae2e0e71d3536754f4b6de0ea4a496d034"}, - {file = "pandas-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b728fb8deba8905b319f96447a27033969f3ea1fea09d07d296c9030ab2ed1d"}, - {file = "pandas-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00028e6737c594feac3c2df15636d73ace46b8314d236100b57ed7e4b9ebe8d9"}, - {file = "pandas-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:426dc0f1b187523c4db06f96fb5c8d1a845e259c99bda74f7de97bd8a3bb3139"}, - {file = "pandas-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:f237e6ca6421265643608813ce9793610ad09b40154a3344a088159590469e46"}, - {file = "pandas-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b7d852d16c270e4331f6f59b3e9aa23f935f5c4b0ed2d0bc77637a8890a5d092"}, - {file = "pandas-2.1.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7d5f2f54f78164b3d7a40f33bf79a74cdee72c31affec86bfcabe7e0789821"}, - {file = "pandas-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0aa6e92e639da0d6e2017d9ccff563222f4eb31e4b2c3cf32a2a392fc3103c0d"}, - {file = "pandas-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d797591b6846b9db79e65dc2d0d48e61f7db8d10b2a9480b4e3faaddc421a171"}, - {file = "pandas-2.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2d3e7b00f703aea3945995ee63375c61b2e6aa5aa7871c5d622870e5e137623"}, - {file = "pandas-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:dc9bf7ade01143cddc0074aa6995edd05323974e6e40d9dbde081021ded8510e"}, - {file = "pandas-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:482d5076e1791777e1571f2e2d789e940dedd927325cc3cb6d0800c6304082f6"}, - {file = "pandas-2.1.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8a706cfe7955c4ca59af8c7a0517370eafbd98593155b48f10f9811da440248b"}, - {file = "pandas-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0513a132a15977b4a5b89aabd304647919bc2169eac4c8536afb29c07c23540"}, - {file = "pandas-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9f17f2b6fc076b2a0078862547595d66244db0f41bf79fc5f64a5c4d635bead"}, - {file = "pandas-2.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:45d63d2a9b1b37fa6c84a68ba2422dc9ed018bdaa668c7f47566a01188ceeec1"}, - {file = "pandas-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:f69b0c9bb174a2342818d3e2778584e18c740d56857fc5cdb944ec8bbe4082cf"}, - {file = "pandas-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3f06bda01a143020bad20f7a85dd5f4a1600112145f126bc9e3e42077c24ef34"}, - {file = "pandas-2.1.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab5796839eb1fd62a39eec2916d3e979ec3130509930fea17fe6f81e18108f6a"}, - {file = "pandas-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edbaf9e8d3a63a9276d707b4d25930a262341bca9874fcb22eff5e3da5394732"}, - {file = "pandas-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ebfd771110b50055712b3b711b51bee5d50135429364d0498e1213a7adc2be8"}, - {file = "pandas-2.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8ea107e0be2aba1da619cc6ba3f999b2bfc9669a83554b1904ce3dd9507f0860"}, - {file = "pandas-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:d65148b14788b3758daf57bf42725caa536575da2b64df9964c563b015230984"}, - {file = "pandas-2.1.4.tar.gz", hash = "sha256:fcb68203c833cc735321512e13861358079a96c174a61f5116a1de89c58c0ef7"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, ] [package.dependencies] numpy = [ - {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" -tzdata = ">=2022.1" +tzdata = ">=2022.7" [package.extras] -all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] -aws = ["s3fs (>=2022.05.0)"] -clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] -compression = ["zstandard (>=0.17.0)"] -computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] consortium-standard = ["dataframe-api-compat (>=0.1.7)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2022.05.0)"] -gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] -hdf5 = ["tables (>=3.7.0)"] -html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] -mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] -spss = ["pyreadstat (>=1.1.5)"] -sql-other = ["SQLAlchemy (>=1.4.36)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.8.0)"] +xml = ["lxml (>=4.9.2)"] [[package]] name = "pydantic" -version = "2.5.3" +version = "2.8.2" description = "Data validation using Python type hints" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pydantic-2.5.3-py3-none-any.whl", hash = "sha256:d0caf5954bee831b6bfe7e338c32b9e30c85dfe080c843680783ac2b631673b4"}, - {file = "pydantic-2.5.3.tar.gz", hash = "sha256:b3ef57c62535b0941697cce638c08900d87fcb67e29cfa99e8a68f747f393f7a"}, + {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, + {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.14.6" -typing-extensions = ">=4.6.1" +pydantic-core = "2.20.1" +typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""} [package.extras] email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.14.6" -description = "" +version = "2.20.1" +description = "Core functionality for Pydantic validation and serialization" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.14.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:72f9a942d739f09cd42fffe5dc759928217649f070056f03c70df14f5770acf9"}, - {file = "pydantic_core-2.14.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6a31d98c0d69776c2576dda4b77b8e0c69ad08e8b539c25c7d0ca0dc19a50d6c"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aa90562bc079c6c290f0512b21768967f9968e4cfea84ea4ff5af5d917016e4"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:370ffecb5316ed23b667d99ce4debe53ea664b99cc37bfa2af47bc769056d534"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f85f3843bdb1fe80e8c206fe6eed7a1caeae897e496542cee499c374a85c6e08"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9862bf828112e19685b76ca499b379338fd4c5c269d897e218b2ae8fcb80139d"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:036137b5ad0cb0004c75b579445a1efccd072387a36c7f217bb8efd1afbe5245"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92879bce89f91f4b2416eba4429c7b5ca22c45ef4a499c39f0c5c69257522c7c"}, - {file = "pydantic_core-2.14.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0c08de15d50fa190d577e8591f0329a643eeaed696d7771760295998aca6bc66"}, - {file = "pydantic_core-2.14.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:36099c69f6b14fc2c49d7996cbf4f87ec4f0e66d1c74aa05228583225a07b590"}, - {file = "pydantic_core-2.14.6-cp310-none-win32.whl", hash = "sha256:7be719e4d2ae6c314f72844ba9d69e38dff342bc360379f7c8537c48e23034b7"}, - {file = "pydantic_core-2.14.6-cp310-none-win_amd64.whl", hash = "sha256:36fa402dcdc8ea7f1b0ddcf0df4254cc6b2e08f8cd80e7010d4c4ae6e86b2a87"}, - {file = "pydantic_core-2.14.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:dea7fcd62915fb150cdc373212141a30037e11b761fbced340e9db3379b892d4"}, - {file = "pydantic_core-2.14.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ffff855100bc066ff2cd3aa4a60bc9534661816b110f0243e59503ec2df38421"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b027c86c66b8627eb90e57aee1f526df77dc6d8b354ec498be9a757d513b92b"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00b1087dabcee0b0ffd104f9f53d7d3eaddfaa314cdd6726143af6bc713aa27e"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75ec284328b60a4e91010c1acade0c30584f28a1f345bc8f72fe8b9e46ec6a96"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e1f4744eea1501404b20b0ac059ff7e3f96a97d3e3f48ce27a139e053bb370b"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2602177668f89b38b9f84b7b3435d0a72511ddef45dc14446811759b82235a1"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c8edaea3089bf908dd27da8f5d9e395c5b4dc092dbcce9b65e7156099b4b937"}, - {file = "pydantic_core-2.14.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:478e9e7b360dfec451daafe286998d4a1eeaecf6d69c427b834ae771cad4b622"}, - {file = "pydantic_core-2.14.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b6ca36c12a5120bad343eef193cc0122928c5c7466121da7c20f41160ba00ba2"}, - {file = "pydantic_core-2.14.6-cp311-none-win32.whl", hash = "sha256:2b8719037e570639e6b665a4050add43134d80b687288ba3ade18b22bbb29dd2"}, - {file = "pydantic_core-2.14.6-cp311-none-win_amd64.whl", hash = "sha256:78ee52ecc088c61cce32b2d30a826f929e1708f7b9247dc3b921aec367dc1b23"}, - {file = "pydantic_core-2.14.6-cp311-none-win_arm64.whl", hash = "sha256:a19b794f8fe6569472ff77602437ec4430f9b2b9ec7a1105cfd2232f9ba355e6"}, - {file = "pydantic_core-2.14.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:667aa2eac9cd0700af1ddb38b7b1ef246d8cf94c85637cbb03d7757ca4c3fdec"}, - {file = "pydantic_core-2.14.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cdee837710ef6b56ebd20245b83799fce40b265b3b406e51e8ccc5b85b9099b7"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c5bcf3414367e29f83fd66f7de64509a8fd2368b1edf4351e862910727d3e51"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26a92ae76f75d1915806b77cf459811e772d8f71fd1e4339c99750f0e7f6324f"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a983cca5ed1dd9a35e9e42ebf9f278d344603bfcb174ff99a5815f953925140a"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cb92f9061657287eded380d7dc455bbf115430b3aa4741bdc662d02977e7d0af"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ace1e220b078c8e48e82c081e35002038657e4b37d403ce940fa679e57113b"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef633add81832f4b56d3b4c9408b43d530dfca29e68fb1b797dcb861a2c734cd"}, - {file = "pydantic_core-2.14.6-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7e90d6cc4aad2cc1f5e16ed56e46cebf4877c62403a311af20459c15da76fd91"}, - {file = "pydantic_core-2.14.6-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e8a5ac97ea521d7bde7621d86c30e86b798cdecd985723c4ed737a2aa9e77d0c"}, - {file = "pydantic_core-2.14.6-cp312-none-win32.whl", hash = "sha256:f27207e8ca3e5e021e2402ba942e5b4c629718e665c81b8b306f3c8b1ddbb786"}, - {file = "pydantic_core-2.14.6-cp312-none-win_amd64.whl", hash = "sha256:b3e5fe4538001bb82e2295b8d2a39356a84694c97cb73a566dc36328b9f83b40"}, - {file = "pydantic_core-2.14.6-cp312-none-win_arm64.whl", hash = "sha256:64634ccf9d671c6be242a664a33c4acf12882670b09b3f163cd00a24cffbd74e"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:24368e31be2c88bd69340fbfe741b405302993242ccb476c5c3ff48aeee1afe0"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:e33b0834f1cf779aa839975f9d8755a7c2420510c0fa1e9fa0497de77cd35d2c"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6af4b3f52cc65f8a0bc8b1cd9676f8c21ef3e9132f21fed250f6958bd7223bed"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15687d7d7f40333bd8266f3814c591c2e2cd263fa2116e314f60d82086e353a"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:095b707bb287bfd534044166ab767bec70a9bba3175dcdc3371782175c14e43c"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94fc0e6621e07d1e91c44e016cc0b189b48db053061cc22d6298a611de8071bb"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ce830e480f6774608dedfd4a90c42aac4a7af0a711f1b52f807130c2e434c06"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a306cdd2ad3a7d795d8e617a58c3a2ed0f76c8496fb7621b6cd514eb1532cae8"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2f5fa187bde8524b1e37ba894db13aadd64faa884657473b03a019f625cee9a8"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:438027a975cc213a47c5d70672e0d29776082155cfae540c4e225716586be75e"}, - {file = "pydantic_core-2.14.6-cp37-none-win32.whl", hash = "sha256:f96ae96a060a8072ceff4cfde89d261837b4294a4f28b84a28765470d502ccc6"}, - {file = "pydantic_core-2.14.6-cp37-none-win_amd64.whl", hash = "sha256:e646c0e282e960345314f42f2cea5e0b5f56938c093541ea6dbf11aec2862391"}, - {file = "pydantic_core-2.14.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:db453f2da3f59a348f514cfbfeb042393b68720787bbef2b4c6068ea362c8149"}, - {file = "pydantic_core-2.14.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3860c62057acd95cc84044e758e47b18dcd8871a328ebc8ccdefd18b0d26a21b"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36026d8f99c58d7044413e1b819a67ca0e0b8ebe0f25e775e6c3d1fabb3c38fb"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ed1af8692bd8d2a29d702f1a2e6065416d76897d726e45a1775b1444f5928a7"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:314ccc4264ce7d854941231cf71b592e30d8d368a71e50197c905874feacc8a8"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:982487f8931067a32e72d40ab6b47b1628a9c5d344be7f1a4e668fb462d2da42"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dbe357bc4ddda078f79d2a36fc1dd0494a7f2fad83a0a684465b6f24b46fe80"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2f6ffc6701a0eb28648c845f4945a194dc7ab3c651f535b81793251e1185ac3d"}, - {file = "pydantic_core-2.14.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f5025db12fc6de7bc1104d826d5aee1d172f9ba6ca936bf6474c2148ac336c1"}, - {file = "pydantic_core-2.14.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dab03ed811ed1c71d700ed08bde8431cf429bbe59e423394f0f4055f1ca0ea60"}, - {file = "pydantic_core-2.14.6-cp38-none-win32.whl", hash = "sha256:dfcbebdb3c4b6f739a91769aea5ed615023f3c88cb70df812849aef634c25fbe"}, - {file = "pydantic_core-2.14.6-cp38-none-win_amd64.whl", hash = "sha256:99b14dbea2fdb563d8b5a57c9badfcd72083f6006caf8e126b491519c7d64ca8"}, - {file = "pydantic_core-2.14.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:4ce8299b481bcb68e5c82002b96e411796b844d72b3e92a3fbedfe8e19813eab"}, - {file = "pydantic_core-2.14.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b9a9d92f10772d2a181b5ca339dee066ab7d1c9a34ae2421b2a52556e719756f"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd9e98b408384989ea4ab60206b8e100d8687da18b5c813c11e92fd8212a98e0"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f86f1f318e56f5cbb282fe61eb84767aee743ebe32c7c0834690ebea50c0a6b"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86ce5fcfc3accf3a07a729779d0b86c5d0309a4764c897d86c11089be61da160"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dcf1978be02153c6a31692d4fbcc2a3f1db9da36039ead23173bc256ee3b91b"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eedf97be7bc3dbc8addcef4142f4b4164066df0c6f36397ae4aaed3eb187d8ab"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5f916acf8afbcab6bacbb376ba7dc61f845367901ecd5e328fc4d4aef2fcab0"}, - {file = "pydantic_core-2.14.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8a14c192c1d724c3acbfb3f10a958c55a2638391319ce8078cb36c02283959b9"}, - {file = "pydantic_core-2.14.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0348b1dc6b76041516e8a854ff95b21c55f5a411c3297d2ca52f5528e49d8411"}, - {file = "pydantic_core-2.14.6-cp39-none-win32.whl", hash = "sha256:de2a0645a923ba57c5527497daf8ec5df69c6eadf869e9cd46e86349146e5975"}, - {file = "pydantic_core-2.14.6-cp39-none-win_amd64.whl", hash = "sha256:aca48506a9c20f68ee61c87f2008f81f8ee99f8d7f0104bff3c47e2d148f89d9"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d5c28525c19f5bb1e09511669bb57353d22b94cf8b65f3a8d141c389a55dec95"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:78d0768ee59baa3de0f4adac9e3748b4b1fffc52143caebddfd5ea2961595277"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b93785eadaef932e4fe9c6e12ba67beb1b3f1e5495631419c784ab87e975670"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a874f21f87c485310944b2b2734cd6d318765bcbb7515eead33af9641816506e"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89f4477d915ea43b4ceea6756f63f0288941b6443a2b28c69004fe07fde0d0d"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:172de779e2a153d36ee690dbc49c6db568d7b33b18dc56b69a7514aecbcf380d"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dfcebb950aa7e667ec226a442722134539e77c575f6cfaa423f24371bb8d2e94"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:55a23dcd98c858c0db44fc5c04fc7ed81c4b4d33c653a7c45ddaebf6563a2f66"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4241204e4b36ab5ae466ecec5c4c16527a054c69f99bba20f6f75232a6a534e2"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e574de99d735b3fc8364cba9912c2bec2da78775eba95cbb225ef7dda6acea24"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1302a54f87b5cd8528e4d6d1bf2133b6aa7c6122ff8e9dc5220fbc1e07bffebd"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8e81e4b55930e5ffab4a68db1af431629cf2e4066dbdbfef65348b8ab804ea8"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c99462ffc538717b3e60151dfaf91125f637e801f5ab008f81c402f1dff0cd0f"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e4cf2d5829f6963a5483ec01578ee76d329eb5caf330ecd05b3edd697e7d768a"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:cf10b7d58ae4a1f07fccbf4a0a956d705356fea05fb4c70608bb6fa81d103cda"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:399ac0891c284fa8eb998bcfa323f2234858f5d2efca3950ae58c8f88830f145"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c6a5c79b28003543db3ba67d1df336f253a87d3112dac3a51b94f7d48e4c0e1"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:599c87d79cab2a6a2a9df4aefe0455e61e7d2aeede2f8577c1b7c0aec643ee8e"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e166ad47ba900f2542a80d83f9fc65fe99eb63ceec4debec160ae729824052"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3a0b5db001b98e1c649dd55afa928e75aa4087e587b9524a4992316fa23c9fba"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:747265448cb57a9f37572a488a57d873fd96bf51e5bb7edb52cfb37124516da4"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7ebe3416785f65c28f4f9441e916bfc8a54179c8dea73c23023f7086fa601c5d"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:86c963186ca5e50d5c8287b1d1c9d3f8f024cbe343d048c5bd282aec2d8641f2"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e0641b506486f0b4cd1500a2a65740243e8670a2549bb02bc4556a83af84ae03"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71d72ca5eaaa8d38c8df16b7deb1a2da4f650c41b58bb142f3fb75d5ad4a611f"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27e524624eace5c59af499cd97dc18bb201dc6a7a2da24bfc66ef151c69a5f2a"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3dde6cac75e0b0902778978d3b1646ca9f438654395a362cb21d9ad34b24acf"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:00646784f6cd993b1e1c0e7b0fdcbccc375d539db95555477771c27555e3c556"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:23598acb8ccaa3d1d875ef3b35cb6376535095e9405d91a3d57a8c7db5d29341"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7f41533d7e3cf9520065f610b41ac1c76bc2161415955fbcead4981b22c7611e"}, - {file = "pydantic_core-2.14.6.tar.gz", hash = "sha256:1fd0c1d395372843fba13a51c28e3bb9d59bd7aebfeb17358ffaaa1e4dbbe948"}, + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, + {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, + {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, + {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, + {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, + {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, + {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, + {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, + {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, + {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, + {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, + {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, + {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, + {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, ] [package.dependencies] @@ -837,28 +751,33 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.1.0" +version = "2.4.0" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.1.0-py3-none-any.whl", hash = "sha256:7621c0cb5d90d1140d2f0ef557bdf03573aac7035948109adf2574770b77605a"}, - {file = "pydantic_settings-2.1.0.tar.gz", hash = "sha256:26b1492e0a24755626ac5e6d715e9077ab7ad4fb5f19a8b7ed7011d52f36141c"}, + {file = "pydantic_settings-2.4.0-py3-none-any.whl", hash = "sha256:bb6849dc067f1687574c12a639e231f3a6feeed0a12d710c1382045c5db1c315"}, + {file = "pydantic_settings-2.4.0.tar.gz", hash = "sha256:ed81c3a0f46392b4d7c0a565c05884e6e54b3456e6f0fe4d8814981172dc9a88"}, ] [package.dependencies] -pydantic = ">=2.3.0" +pydantic = ">=2.7.0" python-dotenv = ">=0.21.0" +[package.extras] +azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"] +toml = ["tomli (>=2.0.1)"] +yaml = ["pyyaml (>=6.0.1)"] + [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -866,13 +785,13 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.0.0" +version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" files = [ - {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, - {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, ] [package.extras] @@ -880,126 +799,112 @@ cli = ["click (>=5.0)"] [[package]] name = "pytz" -version = "2023.3.post1" +version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] name = "regex" -version = "2023.12.25" +version = "2024.7.24" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, - {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, - {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"}, - {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"}, - {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"}, - {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"}, - {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"}, - {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"}, - {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"}, - {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"}, - {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"}, - {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"}, - {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"}, - {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"}, - {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"}, - {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"}, - {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa"}, + {file = "regex-2024.7.24-cp310-cp310-win32.whl", hash = "sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66"}, + {file = "regex-2024.7.24-cp310-cp310-win_amd64.whl", hash = "sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e"}, + {file = "regex-2024.7.24-cp311-cp311-win32.whl", hash = "sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c"}, + {file = "regex-2024.7.24-cp311-cp311-win_amd64.whl", hash = "sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38"}, + {file = "regex-2024.7.24-cp312-cp312-win32.whl", hash = "sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc"}, + {file = "regex-2024.7.24-cp312-cp312-win_amd64.whl", hash = "sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8"}, + {file = "regex-2024.7.24-cp38-cp38-win32.whl", hash = "sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96"}, + {file = "regex-2024.7.24-cp38-cp38-win_amd64.whl", hash = "sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9"}, + {file = "regex-2024.7.24-cp39-cp39-win32.whl", hash = "sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1"}, + {file = "regex-2024.7.24-cp39-cp39-win_amd64.whl", hash = "sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9"}, + {file = "regex-2024.7.24.tar.gz", hash = "sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506"}, ] [[package]] name = "requests" -version = "2.31.0" +version = "2.32.3" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] @@ -1023,6 +928,17 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + [[package]] name = "soupsieve" version = "2.5" @@ -1036,47 +952,47 @@ files = [ [[package]] name = "tiktoken" -version = "0.5.2" +version = "0.7.0" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false python-versions = ">=3.8" files = [ - {file = "tiktoken-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c4e654282ef05ec1bd06ead22141a9a1687991cef2c6a81bdd1284301abc71d"}, - {file = "tiktoken-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7b3134aa24319f42c27718c6967f3c1916a38a715a0fa73d33717ba121231307"}, - {file = "tiktoken-0.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6092e6e77730929c8c6a51bb0d7cfdf1b72b63c4d033d6258d1f2ee81052e9e5"}, - {file = "tiktoken-0.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ad8ae2a747622efae75837abba59be6c15a8f31b4ac3c6156bc56ec7a8e631"}, - {file = "tiktoken-0.5.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51cba7c8711afa0b885445f0637f0fcc366740798c40b981f08c5f984e02c9d1"}, - {file = "tiktoken-0.5.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3d8c7d2c9313f8e92e987d585ee2ba0f7c40a0de84f4805b093b634f792124f5"}, - {file = "tiktoken-0.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:692eca18c5fd8d1e0dde767f895c17686faaa102f37640e884eecb6854e7cca7"}, - {file = "tiktoken-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:138d173abbf1ec75863ad68ca289d4da30caa3245f3c8d4bfb274c4d629a2f77"}, - {file = "tiktoken-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7388fdd684690973fdc450b47dfd24d7f0cbe658f58a576169baef5ae4658607"}, - {file = "tiktoken-0.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a114391790113bcff670c70c24e166a841f7ea8f47ee2fe0e71e08b49d0bf2d4"}, - {file = "tiktoken-0.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca96f001e69f6859dd52926d950cfcc610480e920e576183497ab954e645e6ac"}, - {file = "tiktoken-0.5.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:15fed1dd88e30dfadcdd8e53a8927f04e1f6f81ad08a5ca824858a593ab476c7"}, - {file = "tiktoken-0.5.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:93f8e692db5756f7ea8cb0cfca34638316dcf0841fb8469de8ed7f6a015ba0b0"}, - {file = "tiktoken-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:bcae1c4c92df2ffc4fe9f475bf8148dbb0ee2404743168bbeb9dcc4b79dc1fdd"}, - {file = "tiktoken-0.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b76a1e17d4eb4357d00f0622d9a48ffbb23401dcf36f9716d9bd9c8e79d421aa"}, - {file = "tiktoken-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01d8b171bb5df4035580bc26d4f5339a6fd58d06f069091899d4a798ea279d3e"}, - {file = "tiktoken-0.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42adf7d4fb1ed8de6e0ff2e794a6a15005f056a0d83d22d1d6755a39bffd9e7f"}, - {file = "tiktoken-0.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3f894dbe0adb44609f3d532b8ea10820d61fdcb288b325a458dfc60fefb7db"}, - {file = "tiktoken-0.5.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:58ccfddb4e62f0df974e8f7e34a667981d9bb553a811256e617731bf1d007d19"}, - {file = "tiktoken-0.5.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58902a8bad2de4268c2a701f1c844d22bfa3cbcc485b10e8e3e28a050179330b"}, - {file = "tiktoken-0.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:5e39257826d0647fcac403d8fa0a474b30d02ec8ffc012cfaf13083e9b5e82c5"}, - {file = "tiktoken-0.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bde3b0fbf09a23072d39c1ede0e0821f759b4fa254a5f00078909158e90ae1f"}, - {file = "tiktoken-0.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2ddee082dcf1231ccf3a591d234935e6acf3e82ee28521fe99af9630bc8d2a60"}, - {file = "tiktoken-0.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35c057a6a4e777b5966a7540481a75a31429fc1cb4c9da87b71c8b75b5143037"}, - {file = "tiktoken-0.5.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c4a049b87e28f1dc60509f8eb7790bc8d11f9a70d99b9dd18dfdd81a084ffe6"}, - {file = "tiktoken-0.5.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5bf5ce759089f4f6521ea6ed89d8f988f7b396e9f4afb503b945f5c949c6bec2"}, - {file = "tiktoken-0.5.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0c964f554af1a96884e01188f480dad3fc224c4bbcf7af75d4b74c4b74ae0125"}, - {file = "tiktoken-0.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:368dd5726d2e8788e47ea04f32e20f72a2012a8a67af5b0b003d1e059f1d30a3"}, - {file = "tiktoken-0.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a2deef9115b8cd55536c0a02c0203512f8deb2447f41585e6d929a0b878a0dd2"}, - {file = "tiktoken-0.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2ed7d380195affbf886e2f8b92b14edfe13f4768ff5fc8de315adba5b773815e"}, - {file = "tiktoken-0.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76fce01309c8140ffe15eb34ded2bb94789614b7d1d09e206838fc173776a18"}, - {file = "tiktoken-0.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60a5654d6a2e2d152637dd9a880b4482267dfc8a86ccf3ab1cec31a8c76bfae8"}, - {file = "tiktoken-0.5.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:41d4d3228e051b779245a8ddd21d4336f8975563e92375662f42d05a19bdff41"}, - {file = "tiktoken-0.5.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c1cdec2c92fcde8c17a50814b525ae6a88e8e5b02030dc120b76e11db93f13"}, - {file = "tiktoken-0.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:84ddb36faedb448a50b246e13d1b6ee3437f60b7169b723a4b2abad75e914f3e"}, - {file = "tiktoken-0.5.2.tar.gz", hash = "sha256:f54c581f134a8ea96ce2023ab221d4d4d81ab614efa0b2fbce926387deb56c80"}, + {file = "tiktoken-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485f3cc6aba7c6b6ce388ba634fbba656d9ee27f766216f45146beb4ac18b25f"}, + {file = "tiktoken-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e54be9a2cd2f6d6ffa3517b064983fb695c9a9d8aa7d574d1ef3c3f931a99225"}, + {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79383a6e2c654c6040e5f8506f3750db9ddd71b550c724e673203b4f6b4b4590"}, + {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d4511c52caacf3c4981d1ae2df85908bd31853f33d30b345c8b6830763f769c"}, + {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13c94efacdd3de9aff824a788353aa5749c0faee1fbe3816df365ea450b82311"}, + {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8e58c7eb29d2ab35a7a8929cbeea60216a4ccdf42efa8974d8e176d50c9a3df5"}, + {file = "tiktoken-0.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:21a20c3bd1dd3e55b91c1331bf25f4af522c525e771691adbc9a69336fa7f702"}, + {file = "tiktoken-0.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10c7674f81e6e350fcbed7c09a65bca9356eaab27fb2dac65a1e440f2bcfe30f"}, + {file = "tiktoken-0.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:084cec29713bc9d4189a937f8a35dbdfa785bd1235a34c1124fe2323821ee93f"}, + {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811229fde1652fedcca7c6dfe76724d0908775b353556d8a71ed74d866f73f7b"}, + {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b6e7dc2e7ad1b3757e8a24597415bafcfb454cebf9a33a01f2e6ba2e663992"}, + {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1063c5748be36344c7e18c7913c53e2cca116764c2080177e57d62c7ad4576d1"}, + {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20295d21419bfcca092644f7e2f2138ff947a6eb8cfc732c09cc7d76988d4a89"}, + {file = "tiktoken-0.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:959d993749b083acc57a317cbc643fb85c014d055b2119b739487288f4e5d1cb"}, + {file = "tiktoken-0.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:71c55d066388c55a9c00f61d2c456a6086673ab7dec22dd739c23f77195b1908"}, + {file = "tiktoken-0.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09ed925bccaa8043e34c519fbb2f99110bd07c6fd67714793c21ac298e449410"}, + {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03c6c40ff1db0f48a7b4d2dafeae73a5607aacb472fa11f125e7baf9dce73704"}, + {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d20b5c6af30e621b4aca094ee61777a44118f52d886dbe4f02b70dfe05c15350"}, + {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d427614c3e074004efa2f2411e16c826f9df427d3c70a54725cae860f09e4bf4"}, + {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8c46d7af7b8c6987fac9b9f61041b452afe92eb087d29c9ce54951280f899a97"}, + {file = "tiktoken-0.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0bc603c30b9e371e7c4c7935aba02af5994a909fc3c0fe66e7004070858d3f8f"}, + {file = "tiktoken-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2398fecd38c921bcd68418675a6d155fad5f5e14c2e92fcf5fe566fa5485a858"}, + {file = "tiktoken-0.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f5f6afb52fb8a7ea1c811e435e4188f2bef81b5e0f7a8635cc79b0eef0193d6"}, + {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:861f9ee616766d736be4147abac500732b505bf7013cfaf019b85892637f235e"}, + {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54031f95c6939f6b78122c0aa03a93273a96365103793a22e1793ee86da31685"}, + {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fffdcb319b614cf14f04d02a52e26b1d1ae14a570f90e9b55461a72672f7b13d"}, + {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c72baaeaefa03ff9ba9688624143c858d1f6b755bb85d456d59e529e17234769"}, + {file = "tiktoken-0.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:131b8aeb043a8f112aad9f46011dced25d62629091e51d9dc1adbf4a1cc6aa98"}, + {file = "tiktoken-0.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cabc6dc77460df44ec5b879e68692c63551ae4fae7460dd4ff17181df75f1db7"}, + {file = "tiktoken-0.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8d57f29171255f74c0aeacd0651e29aa47dff6f070cb9f35ebc14c82278f3b25"}, + {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ee92776fdbb3efa02a83f968c19d4997a55c8e9ce7be821ceee04a1d1ee149c"}, + {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e215292e99cb41fbc96988ef62ea63bb0ce1e15f2c147a61acc319f8b4cbe5bf"}, + {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a81bac94769cab437dd3ab0b8a4bc4e0f9cf6835bcaa88de71f39af1791727a"}, + {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d6d73ea93e91d5ca771256dfc9d1d29f5a554b83821a1dc0891987636e0ae226"}, + {file = "tiktoken-0.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:2bcb28ddf79ffa424f171dfeef9a4daff61a94c631ca6813f43967cb263b83b9"}, + {file = "tiktoken-0.7.0.tar.gz", hash = "sha256:1077266e949c24e0291f6c350433c6f0971365ece2b173a23bc3b9f9defef6b6"}, ] [package.dependencies] @@ -1088,13 +1004,13 @@ blobfile = ["blobfile (>=2)"] [[package]] name = "tqdm" -version = "4.66.1" +version = "4.66.5" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, - {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, + {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, + {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, ] [package.dependencies] @@ -1108,146 +1024,44 @@ telegram = ["requests"] [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] name = "tzdata" -version = "2023.3" +version = "2024.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] [[package]] name = "urllib3" -version = "2.1.0" +version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] -[[package]] -name = "yarl" -version = "1.9.4" -description = "Yet another URL library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" - [metadata] lock-version = "2.0" python-versions = ">=3.11,<3.13" -content-hash = "fe8d868a7383ca446b692288ef87533e1c7e9de3aeeab5255050bfcf1daa8fd7" +content-hash = "7eccdc9b45b8f4ae1b63fe3473df19c369b0a006be04e31635ace66b61409a58" diff --git a/pyproject.toml b/pyproject.toml index 1bddadf..dc7a9ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "hackernews-whos-hiring" -version = "0.1.0" +version = "1.1.0" description = "Parses the hackernew's who's hiring thread into a quick filterable and sortable CSV" authors = ["amber williams "] license = "MIT" @@ -8,14 +8,14 @@ readme = "README.md" [tool.poetry.dependencies] python = ">=3.11,<3.13" -beautifulsoup4 = "^4.12.2" -pandas = "^2.0.3" -openai = "^0.28.1" -lxml = "^4.9.3" -numpy = "^1.26.0" -pydantic = "^2.4.2" -pydantic-settings = "^2.0.3" -tiktoken = "^0.5.2" +beautifulsoup4 = "4.12.3" +pandas = "2.2.2" +openai = "1.40.3" +lxml = "5.2.2" +numpy = "2.0.1" +pydantic = "2.8.2" +pydantic-settings = "2.4.0" +tiktoken = "0.7.0" [build-system] requires = ["poetry-core"] diff --git a/utils.py b/utils.py index c793b82..162ce19 100644 --- a/utils.py +++ b/utils.py @@ -2,6 +2,7 @@ from bs4 import BeautifulSoup import requests import os +import re from typing import Optional, List import pandas as pd @@ -17,7 +18,6 @@ OUT_DIR_YEAR = f'./output/{settings.YEAR}' OUT_DIR = f'{OUT_DIR_YEAR}/{settings.MONTH}' TABLE_DIR = f'table/{settings.YEAR}' -CLEAN_FILE = "clean.csv" SUMMARY_FILE = "summary.csv" SCRAPED_FILE = "scraped.csv" @@ -25,19 +25,17 @@ if not os.path.exists(OUT_DIR_YEAR): os.mkdir(OUT_DIR_YEAR) - class DataFiles: dir = f"{OUT_DIR}" dir_batch = f"{OUT_DIR}/batch" - def read_df(self, batch: Optional[int], file_name: Optional[str], index_col: Optional[int] = None): + def read_df(self, batch: Optional[int] = None, file_name: Optional[str] = None, index_col: Optional[int] = None): + file_path = f"{self.dir}/{file_name}" if batch is not None: file_path = f"{self.dir_batch}/{batch}.csv" - if os.path.exists(file_path): - return pd.read_csv(file_path, index_col=index_col) - raise FileNotFoundError(f"File not found: {file_path}") - - return pd.read_csv(f"{self.dir}/{file_name}", index_col=index_col) + if os.path.exists(file_path): + return pd.read_csv(file_path, index_col=index_col) + raise FileNotFoundError(f"File not found: {file_path}") def write_df(self, df: pd.DataFrame, batch: Optional[int], file_name: Optional[str]): if not os.path.exists(self.dir): @@ -50,8 +48,13 @@ def write_df(self, df: pd.DataFrame, batch: Optional[int], file_name: Optional[s elif file_name is not None: df.to_csv(f"{self.dir}/{file_name}") + def read_scraped_df(self): + return self.read_df(batch=None, file_name=SCRAPED_FILE, index_col=0) + + def read_summary_df(self): + return self.read_df(batch=None, file_name=SUMMARY_FILE, index_col=0) + def write_scraped_df(self, df: pd.DataFrame): - # saves scraped data to csv self.write_df(df=df, batch=None, file_name=SCRAPED_FILE) return df @@ -66,37 +69,39 @@ def write_summary_df(self, processed_batches: List[int]): self.write_df(df=df, batch=None, file_name=SUMMARY_FILE) return df - def write_cleaned_df(self, df: pd.DataFrame): - df = df[['salary', 'job title', 'company', 'company location', 'link to apply', 'remote', 'text']] - # Filter out rows where 'salary' does not contain at least one number - df = df[df['salary'].str.contains(r'\d', na=False)] - df = df.reset_index(drop=True) - - # clean csv save - self.write_df(df=df, batch=None, file_name=CLEAN_FILE) - - def write_cleaned_md(self): - df = pd.read_csv(os.path.join(OUT_DIR, CLEAN_FILE), index_col=0) - df.pop('text') - self.write_df(df=df, batch=None, file_name="temp.csv") - clean_file = os.path.join(OUT_DIR, "temp.csv") - md = Csv2Markdown(filepath=clean_file) + def write_summary_md(self): if not os.path.exists(TABLE_DIR): os.mkdir(TABLE_DIR) - md.save_table(f"{TABLE_DIR}/{settings.MONTH}.md") + + csv_file = f"{self.dir}/{SUMMARY_FILE}" + output_file = f"{TABLE_DIR}/{settings.MONTH}.md" + md = Csv2Markdown(filepath=csv_file) + md.save_table(output_file) -def get_hn_next_page(soup, dict): +def get_hn_next_page(soup, job_posting_comments: List[dict]): if soup.find(class_='morelink'): next_url = soup.find(class_='morelink') next_url = next_url['href'] - response = requests.get("https://news.ycombinator.com/"+ next_url, headers=headers) + response = requests.get(f"https://news.ycombinator.com/{next_url}", + headers=headers, + timeout=30 + ) soup = BeautifulSoup(response.text, 'lxml') - comments = soup.find_all(class_="commtext") - for comment in comments: + comments = soup.find_all(class_="comtr") + for comment_el in comments: + comment = comment_el.find(class_="commtext") + # Skip if comment was deleted + if comment is None: + continue + # We only care about comments with a pipe character + # because it is in the format outlined by HN's whoishiring if "|" in comment.text: - dict["text"] += [comment.text] - return get_hn_next_page(soup, dict) + job_posting_comments.append({ + "comment_text": comment.text, + "comment_id": comment_el['id'] + }) + return get_hn_next_page(soup, job_posting_comments) else: return dict @@ -115,20 +120,29 @@ def scrape_hn_hiring_to_dict(): url = url['href'] response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'lxml') - hn_dict = {'text': []} - comments = soup.find_all(class_="commtext") - for comment in comments: + job_posting_comments = [] + comments = soup.find_all(class_="comtr") + for comment_el in comments: + comment = comment_el.find(class_="commtext") + # Skip if comment was deleted + if comment is None: + continue + # We only care about comments with a pipe character + # because it is in the format outlined by HN's whoishiring if "|" in comment.text: - hn_dict["text"] += [comment.text] + job_posting_comments.append({ + "comment_text": comment.text, + "comment_id": comment_el['id'] + }) # Continue to scrape the HN thread - pages - get_hn_next_page(soup, hn_dict) - return hn_dict + get_hn_next_page(soup, job_posting_comments) + return job_posting_comments def count_tokens(df): encoding = tiktoken.encoding_for_model(settings.OPENAI_MODEL) - df['token_count'] = df.apply(lambda x: len(encoding.encode(x['text'])), axis=1) + df['token_count'] = df.apply(lambda x: len(encoding.encode(x['comment_text'])), axis=1) return df From b127bbf86868a25e56555ca1bcce2bc9044cc60e Mon Sep 17 00:00:00 2001 From: Amber Williams Date: Sun, 11 Aug 2024 18:58:11 +0100 Subject: [PATCH 2/5] chore: ignore vscode debug file --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6cd34c0..d23acf6 100644 --- a/.gitignore +++ b/.gitignore @@ -170,4 +170,7 @@ output/**/**/summary.csv output/**/**/temp.csv # Local TODO file -TODO \ No newline at end of file +TODO + +# Local debug files +.vscode/ \ No newline at end of file From f367d1d19b0dc1d34fed96e49882536e733c1dd8 Mon Sep 17 00:00:00 2001 From: Amber Williams Date: Sun, 11 Aug 2024 21:31:10 +0100 Subject: [PATCH 3/5] refactor: put logic into classes --- .gitignore | 1 - chat_extractor.py | 101 ------------- csv_to_markdown.py => lib/csv_to_markdown.py | 0 lib/data_extractor_model.py | 58 +++++++ lib/data_file.py | 45 ++++++ lib/news_scrapper.py | 62 ++++++++ main.py | 111 +++++++------- models/__init__.py | 74 +++++++++ utils.py | 150 ------------------- 9 files changed, 292 insertions(+), 310 deletions(-) delete mode 100644 chat_extractor.py rename csv_to_markdown.py => lib/csv_to_markdown.py (100%) create mode 100644 lib/data_extractor_model.py create mode 100644 lib/data_file.py create mode 100644 lib/news_scrapper.py create mode 100644 models/__init__.py delete mode 100644 utils.py diff --git a/.gitignore b/.gitignore index d23acf6..45f8fe3 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,6 @@ dist/ downloads/ eggs/ .eggs/ -lib/ lib64/ parts/ sdist/ diff --git a/chat_extractor.py b/chat_extractor.py deleted file mode 100644 index 2df2f9b..0000000 --- a/chat_extractor.py +++ /dev/null @@ -1,101 +0,0 @@ -import json -from typing import Optional, List -from enum import Enum -from httpx import Timeout - -from pydantic import BaseModel, ValidationError -from openai import OpenAI - - -structured_output_valid_gpt_models = [ - "gpt-4o-mini", - "gpt-4o", - "gpt-4o-2024-08-06" -] - - -system_role_prompt = """ - You are a data extraction expert that extracts job posting data based on a list of job postings you are provided. - - Important rules: - There can be many roles to one posting in these cases the comment_id is will be the same for the related roles. - Make sure if a job title has 'and' or '&' in it that you split the job title into more than one job postings. -""" - - -class RemoteEnum(str, Enum): - YES = "yes" - NO = "no" - HYBRID = "hybrid" - UNKNOWN = "unknown" - - -class CurrencyEnum(str, Enum): - USD = "USD" - EUR = "EUR" - GBP = "GBP" - CAD = "CAD" - CNY = "CNY" - AUD = "AUD" - CHF = "CHF" - MXN = "MXN" - UNKNOWN = "unknown" - - -class EmploymentType(str, Enum): - FULL_TIME = "full-time" - PART_TIME = "part-time" - CONTRACT = "contract" - INTERN = "intern" - UNKNOWN = "unknown" - - -class JobPosting(BaseModel): - comment_id: int - company_name: str - job_title: str - employment_type: EmploymentType - currency: CurrencyEnum - remote: RemoteEnum - salary: Optional[str] - remote_rules: Optional[str] - how_to_apply: Optional[str] - company_city: Optional[str] - company_country: Optional[str] - languages_and_frameworks: Optional[List[str]] - - -class JobPostings(BaseModel): - postings: List[JobPosting] - - -class ChatExtractor: - def __init__(self, model_key: str, model: str): - if isinstance(model, str): - if model not in structured_output_valid_gpt_models: - raise ValueError( - f"Invalid model. Available GPT models: {', '.join(_model for _model in valid_gpt_models)}" - ) - self.model = model - self.client = OpenAI(api_key=model_key) - - def extract(self, content) -> List[JobPosting]: - try: - content_json = json.dumps(content) - completion = self.client.beta.chat.completions.parse( - model=self.model, - response_format=JobPostings, - messages=[ - {"role": "system", "content": system_role_prompt}, - {"role": "user", "content": content_json}, - ], - temperature=0.0, - timeout=Timeout(60), - ) - return completion.choices[0].message.parsed.postings - except ValidationError as e: - print(f"Validation error: {e}") - raise e - except Exception as err: - print(f"Unexpected {err=}, {type(err)=}") - raise err diff --git a/csv_to_markdown.py b/lib/csv_to_markdown.py similarity index 100% rename from csv_to_markdown.py rename to lib/csv_to_markdown.py diff --git a/lib/data_extractor_model.py b/lib/data_extractor_model.py new file mode 100644 index 0000000..2f37ae3 --- /dev/null +++ b/lib/data_extractor_model.py @@ -0,0 +1,58 @@ +import json +from typing import List +from httpx import Timeout + +from pydantic import ValidationError +from openai import OpenAI +import tiktoken + +from models import JobPosting, JobPostings + + +class DataExtractorModel: + def __init__(self, model_key: str, model: str): + self.valid_gpt_models = [ + # Models must support structured data extraction + "gpt-4o-mini", + "gpt-4o", + "gpt-4o-2024-08-06" + ] + + if isinstance(model, str): + if model not in self.valid_gpt_models: + raise ValueError( + f"Invalid model. Available GPT models: {', '.join(_model for _model in self.valid_gpt_models)}" + ) + self.model = model + self.client = OpenAI(api_key=model_key) + self.token_encoding = tiktoken.encoding_for_model(self.model) + + self.system_role_prompt = """ + You are a data extraction expert that extracts job posting data based on a list of job postings you are provided. + Important rules: + - There can be many roles to one posting in these cases the comment_id is will be the same for the related roles. + - Make sure if a job title has 'and' or '&' in it that you split the job title into more than one job postings.""" + + def get_token_estimate(self, content: str) -> int: + return self.token_encoding.encode(content) + + def extract(self, content) -> List[JobPosting]: + try: + content_json = json.dumps(content) + completion = self.client.beta.chat.completions.parse( + model=self.model, + response_format=JobPostings, + messages=[ + {"role": "system", "content": self.system_role_prompt}, + {"role": "user", "content": content_json}, + ], + temperature=0.0, + timeout=Timeout(60), + ) + return completion.choices[0].message.parsed.postings + except ValidationError as e: + print(f"Validation error: {e}") + raise e + except Exception as err: + print(f"Unexpected {err=}, {type(err)=}") + raise err diff --git a/lib/data_file.py b/lib/data_file.py new file mode 100644 index 0000000..280ea97 --- /dev/null +++ b/lib/data_file.py @@ -0,0 +1,45 @@ +import os +from typing import List + +import pandas as pd + +from lib.csv_to_markdown import Csv2Markdown + + +class DataFile: + def __init__(self, write_dir: str, read_dir: str): + self.write_dir = write_dir + self.read_dir = read_dir + + if not os.path.exists(self.write_dir): + os.makedirs(self.write_dir, exist_ok=True) + + def read_df(self, file_name: str): + file_path = f"{self.read_dir}/{file_name}" + if os.path.exists(file_path): + return pd.read_csv(file_path, index_col=0) + raise FileNotFoundError(f"File not found: {file_path}") + + def write_df(self, df: pd.DataFrame, file_name: str, partial: bool = False): + if partial: + if not os.path.exists(f"{self.write_dir}/batch"): + os.makedirs(f"{self.write_dir}/batch", exist_ok=True) + df.to_csv(f"{self.write_dir}/batch/{file_name}") + else: + df.to_csv(f"{self.write_dir}/{file_name}") + + def write_md_from_csv(self, csv_file_name: str, md_file_name: str): + csv_file = f"{self.read_dir}/{csv_file_name.replace('.csv', '')}.csv" + md_file = f"{self.write_dir}/{md_file_name.replace('.md', '')}.md" + md = Csv2Markdown(filepath=csv_file) + md.save_table(md_file) + + def join_partial_df(self, indices: List[int], file_name: str): + batch_csvs = [] + for index in indices: + batch_df = self.read_df(file_name=f"batch/{index}.csv") + batch_csvs.append(batch_df) + df = pd.concat(batch_csvs) + df = df.reset_index(drop=True) + self.write_df(df=df, file_name=file_name) + return df diff --git a/lib/news_scrapper.py b/lib/news_scrapper.py new file mode 100644 index 0000000..db19c92 --- /dev/null +++ b/lib/news_scrapper.py @@ -0,0 +1,62 @@ +import urllib +import requests +from typing import List + +from bs4 import BeautifulSoup + +class NewsScrapper: + def __init__(self, year: int, month: str): + self.headers = { + 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/117.0' + } + self.year = year + self.month = month + + def _get_page_comments(self, soup, comment_list: List[dict]): + comments = soup.find_all(class_="comtr") + for comment_el in comments: + comment = comment_el.find(class_="commtext") + # Skip if comment was deleted + if comment is None: + continue + # We only care about comments with a pipe character + # because it is in the format outlined by HN's whoishiring + if "|" in comment.text: + comment_list.append({ + "comment_text": comment.text, + "comment_id": comment_el['id'] + }) + return comment_list + + def _get_next_page(self, soup, comment_list: List[dict]): + if soup.find(class_='morelink'): + next_url = soup.find(class_='morelink') + next_url = next_url['href'] + response = requests.get(f"https://news.ycombinator.com/{next_url}", + headers=self.headers, + timeout=30 + ) + soup = BeautifulSoup(response.text, 'lxml') + _comment_list = self._get_page_comments(soup, comment_list) + return self._get_next_page(soup, _comment_list) + else: + return comment_list + + def get_hn_hiring_posts(self): + # Get the first link from Google search results + text = f":news.ycombinator.com who's hiring {self.month} {self.year}" + text = urllib.parse.quote_plus(text) + url = 'https://google.com/search?q=' + text + response = requests.get(url, headers=self.headers) + soup = BeautifulSoup(response.text, 'lxml') + + # Scrape the HN thread + url = soup.find_all(class_='g')[0] + url = url.find('a') + url = url['href'] + response = requests.get(url, headers=self.headers) + soup = BeautifulSoup(response.text, 'lxml') + comment_list = [] + comment_list = self._get_page_comments(soup, comment_list) + # Continue to scrape the HN thread - pages + return comment_list diff --git a/main.py b/main.py index 31a2692..321dbc3 100644 --- a/main.py +++ b/main.py @@ -1,71 +1,66 @@ import pandas as pd import numpy as np -import utils +from lib.data_file import DataFile +from lib.data_extractor_model import DataExtractorModel +from models import JobPostingFormatted from config import settings -from chat_extractor import ChatExtractor, JobPosting, CurrencyEnum +from lib.news_scrapper import NewsScrapper -class JobPostingFormatted(JobPosting): - def to_dict(self): - location = None - if self.company_city and self.company_country: - location = f"{self.company_city}, {self.company_country}" - elif self.company_city: - location = f"{self.company_city}, Unknown country" - elif self.company_country: - location = f"Unknown city, {self.company_country}" - - return { - "Post Link": f"[Post link](https://news.ycombinator.com/item?id={self.comment_id})", - "Company": self.company_name, - "Job Title": self.job_title, - "Employment Type": self.employment_type.value, - "Salary": f"{self.salary} ({self.currency.value})" if self.currency != CurrencyEnum.UNKNOWN else self.salary, - "Remote": self.remote.value, - "Location": location, - "Languages and Frameworks": ", ".join(self.languages_and_frameworks) if self.languages_and_frameworks else None, - "Remote Rules": self.remote_rules, - "How to Apply": self.how_to_apply, - } +def get_post_df(extactor_model: DataExtractorModel, year: str, month: str): + news_scrapper = NewsScrapper(year=year, month=month) + data_file = DataFile(read_dir=f"./output/{year}/{month}", write_dir=f"./output/{year}/{month}") + try: + df = data_file.read_df(file_name="scraped.csv") + return df + except FileNotFoundError: + posts = news_scrapper.get_hn_hiring_posts() + df = pd.DataFrame(posts) + df['token_count'] = df.apply(lambda x: len(extactor_model.get_token_estimate(x['comment_text'])), axis=1) + data_file.write_df(df=df, file_name="scraped.csv") + return df -data_files = utils.DataFiles() +def extract_data_from_posts(df: pd.DataFrame, extactor_model: DataExtractorModel, year: str, month: str): + data_file = DataFile(read_dir=f"./output/{year}/{month}", write_dir=f"./output/{year}/{month}") + batch_size = df['token_count'].sum() / settings.TOKEN_LIMIT + batched_df = np.array_split(df, batch_size) + if len(batched_df) > 30: + raise ValueError(f"Batch size is too large: {len(batched_df)}") -try: - df = data_files.read_scraped_df() -except FileNotFoundError: - dict_ = utils.scrape_hn_hiring_to_dict() - df = pd.DataFrame(dict_) - df = utils.count_tokens(df) - data_files.write_scraped_df(df=df) + success_indices = [] + for index, batch_n_df in enumerate(batched_df): + try: + print(f"Processing... batch: {index}") + request_content = batch_n_df.reset_index().apply( + lambda row: {"text": row['comment_text'], "comment_id": row['comment_id']}, + axis=1 + ).tolist() + jobs = extactor_model.extract(request_content) + summary_batch_df = pd.DataFrame([JobPostingFormatted(**job.model_dump()).to_dict() for job in jobs]) + data_file.write_df(file_name=f"{index}.csv", df=summary_batch_df, partial=True) + print(f"Saved batch: {index}") + success_indices.append(index) + except Exception as e: + print(f"Unable to parse batch: {index} {e=}...continuing...") + continue + data_file.join_partial_df(indices=success_indices, file_name="summary.csv") -batch_size = df['token_count'].sum() / settings.TOKEN_LIMIT -batched_df = np.array_split(df, batch_size) -if len(batched_df) > 30: - raise ValueError(f"Batch size is too large: {len(batched_df)}") -chat = ChatExtractor( - model_key=settings.OPENAI_API_KEY, - model=settings.OPENAI_MODEL - ) +def create_report_from_post_data(year: str, month: str): + data_file = DataFile(read_dir=f"./output/{year}/{month}", + write_dir=f"./table/{year}") + data_file.write_md_from_csv(csv_file_name="summary.csv", md_file_name=f"{month}.md") -processed_batches = [] -for index, batch_n_df in enumerate(batched_df): - try: - print(f"Processing... batch: {index}") - request_content = batch_n_df.reset_index().apply( - lambda row: {"text": row['comment_text'], "comment_id": row['comment_id']}, - axis=1 - ).tolist() - jobs = chat.extract(request_content) - summary_batch_df = pd.DataFrame([JobPostingFormatted(**job.model_dump()).to_dict() for job in jobs]) - data_files.write_df(df=summary_batch_df, batch=index, file_name=None) - print(f"Saved batch: {index}") - processed_batches.append(index) - except Exception as e: - print(f"Unable to parse batch: {index} {e=}...continuing...") - continue -summary_df = data_files.write_summary_df(processed_batches=processed_batches) -data_files.write_summary_md() +if __name__ == "__main__": + year = settings.YEAR + month = settings.MONTH + extactor_model = DataExtractorModel( + model_key=settings.OPENAI_API_KEY, + model=settings.OPENAI_MODEL + ) + post_df = get_post_df(extactor_model=extactor_model, year=year, month=month) + extract_data_from_posts(df=post_df, extactor_model=extactor_model, year=year, month=month) + create_report_from_post_data(year=year, month=month) diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..2998162 --- /dev/null +++ b/models/__init__.py @@ -0,0 +1,74 @@ +from typing import Optional, List +from enum import Enum + +from pydantic import BaseModel + + +class RemoteEnum(str, Enum): + YES = "yes" + NO = "no" + HYBRID = "hybrid" + UNKNOWN = "unknown" + + +class CurrencyEnum(str, Enum): + USD = "USD" + EUR = "EUR" + GBP = "GBP" + CAD = "CAD" + CNY = "CNY" + AUD = "AUD" + CHF = "CHF" + MXN = "MXN" + UNKNOWN = "unknown" + + +class EmploymentType(str, Enum): + FULL_TIME = "full-time" + PART_TIME = "part-time" + CONTRACT = "contract" + INTERN = "intern" + UNKNOWN = "unknown" + + +class JobPosting(BaseModel): + comment_id: int + company_name: str + job_title: str + employment_type: EmploymentType + currency: CurrencyEnum + remote: RemoteEnum + salary: Optional[str] + remote_rules: Optional[str] + how_to_apply: Optional[str] + company_city: Optional[str] + company_country: Optional[str] + languages_and_frameworks: Optional[List[str]] + + +class JobPostings(BaseModel): + postings: List[JobPosting] + + +class JobPostingFormatted(JobPosting): + def to_dict(self): + location = None + if self.company_city and self.company_country: + location = f"{self.company_city}, {self.company_country}" + elif self.company_city: + location = f"{self.company_city}, Unknown country" + elif self.company_country: + location = f"Unknown city, {self.company_country}" + + return { + "Post Link": f"[Post link](https://news.ycombinator.com/item?id={self.comment_id})", + "Company": self.company_name, + "Job Title": self.job_title, + "Employment Type": self.employment_type.value, + "Salary": f"{self.salary} ({self.currency.value})" if self.currency != CurrencyEnum.UNKNOWN else self.salary, + "Remote": self.remote.value, + "Location": location, + "Languages and Frameworks": ", ".join(self.languages_and_frameworks) if self.languages_and_frameworks else None, + "Remote Rules": self.remote_rules, + "How to Apply": self.how_to_apply, + } diff --git a/utils.py b/utils.py deleted file mode 100644 index 162ce19..0000000 --- a/utils.py +++ /dev/null @@ -1,150 +0,0 @@ -import urllib -from bs4 import BeautifulSoup -import requests -import os -import re -from typing import Optional, List - -import pandas as pd -import tiktoken - -from csv_to_markdown import Csv2Markdown -from config import settings - - -headers = { - 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/117.0' -} -OUT_DIR_YEAR = f'./output/{settings.YEAR}' -OUT_DIR = f'{OUT_DIR_YEAR}/{settings.MONTH}' -TABLE_DIR = f'table/{settings.YEAR}' -SUMMARY_FILE = "summary.csv" -SCRAPED_FILE = "scraped.csv" - - -if not os.path.exists(OUT_DIR_YEAR): - os.mkdir(OUT_DIR_YEAR) - -class DataFiles: - dir = f"{OUT_DIR}" - dir_batch = f"{OUT_DIR}/batch" - - def read_df(self, batch: Optional[int] = None, file_name: Optional[str] = None, index_col: Optional[int] = None): - file_path = f"{self.dir}/{file_name}" - if batch is not None: - file_path = f"{self.dir_batch}/{batch}.csv" - if os.path.exists(file_path): - return pd.read_csv(file_path, index_col=index_col) - raise FileNotFoundError(f"File not found: {file_path}") - - def write_df(self, df: pd.DataFrame, batch: Optional[int], file_name: Optional[str]): - if not os.path.exists(self.dir): - os.mkdir(self.dir) - - if batch is not None: - if not os.path.exists(self.dir_batch): - os.mkdir(self.dir_batch) - df.to_csv(f"{self.dir_batch}/{batch}.csv") - elif file_name is not None: - df.to_csv(f"{self.dir}/{file_name}") - - def read_scraped_df(self): - return self.read_df(batch=None, file_name=SCRAPED_FILE, index_col=0) - - def read_summary_df(self): - return self.read_df(batch=None, file_name=SUMMARY_FILE, index_col=0) - - def write_scraped_df(self, df: pd.DataFrame): - self.write_df(df=df, batch=None, file_name=SCRAPED_FILE) - return df - - def write_summary_df(self, processed_batches: List[int]): - # Join batch CSVs into one CSV - batch_csvs = [] - for batch in processed_batches: - batch_df = self.read_df(batch=batch, file_name=None, index_col=0) - batch_csvs.append(batch_df) - df = pd.concat(batch_csvs) - df = df.reset_index(drop=True) - self.write_df(df=df, batch=None, file_name=SUMMARY_FILE) - return df - - def write_summary_md(self): - if not os.path.exists(TABLE_DIR): - os.mkdir(TABLE_DIR) - - csv_file = f"{self.dir}/{SUMMARY_FILE}" - output_file = f"{TABLE_DIR}/{settings.MONTH}.md" - md = Csv2Markdown(filepath=csv_file) - md.save_table(output_file) - - -def get_hn_next_page(soup, job_posting_comments: List[dict]): - if soup.find(class_='morelink'): - next_url = soup.find(class_='morelink') - next_url = next_url['href'] - response = requests.get(f"https://news.ycombinator.com/{next_url}", - headers=headers, - timeout=30 - ) - soup = BeautifulSoup(response.text, 'lxml') - comments = soup.find_all(class_="comtr") - for comment_el in comments: - comment = comment_el.find(class_="commtext") - # Skip if comment was deleted - if comment is None: - continue - # We only care about comments with a pipe character - # because it is in the format outlined by HN's whoishiring - if "|" in comment.text: - job_posting_comments.append({ - "comment_text": comment.text, - "comment_id": comment_el['id'] - }) - return get_hn_next_page(soup, job_posting_comments) - else: - return dict - - -def scrape_hn_hiring_to_dict(): - # Get the first link from Google search results - text = f":news.ycombinator.com who's hiring {settings.MONTH} {settings.YEAR}" - text = urllib.parse.quote_plus(text) - url = 'https://google.com/search?q=' + text - response = requests.get(url, headers=headers) - soup = BeautifulSoup(response.text, 'lxml') - - # Scrape the HN thread - page 1 - url = soup.find_all(class_='g')[0] - url = url.find('a') - url = url['href'] - response = requests.get(url, headers=headers) - soup = BeautifulSoup(response.text, 'lxml') - job_posting_comments = [] - comments = soup.find_all(class_="comtr") - for comment_el in comments: - comment = comment_el.find(class_="commtext") - # Skip if comment was deleted - if comment is None: - continue - # We only care about comments with a pipe character - # because it is in the format outlined by HN's whoishiring - if "|" in comment.text: - job_posting_comments.append({ - "comment_text": comment.text, - "comment_id": comment_el['id'] - }) - - # Continue to scrape the HN thread - pages - get_hn_next_page(soup, job_posting_comments) - return job_posting_comments - - -def count_tokens(df): - encoding = tiktoken.encoding_for_model(settings.OPENAI_MODEL) - df['token_count'] = df.apply(lambda x: len(encoding.encode(x['comment_text'])), axis=1) - return df - - -def str_has_num(string: str): - return any(char.isdigit() for char in string) From fbecfed61394932efe2154eb98c86fbbb324f5d8 Mon Sep 17 00:00:00 2001 From: Amber Williams Date: Sun, 11 Aug 2024 21:33:10 +0100 Subject: [PATCH 4/5] chore: remove output from git because we link comment ids instead in table markdown --- .gitignore | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 45f8fe3..93666d0 100644 --- a/.gitignore +++ b/.gitignore @@ -163,10 +163,7 @@ cython_debug/ .DS_Store # local output files -output/**/**/batch -output/**/**/clean.csv -output/**/**/summary.csv -output/**/**/temp.csv +output/** # Local TODO file TODO From 497be1aa61e7c0df02c30e7a566b50a09f53937f Mon Sep 17 00:00:00 2001 From: Amber Williams Date: Sun, 11 Aug 2024 21:33:24 +0100 Subject: [PATCH 5/5] (Updated) August 2024 report --- table/2024/August.md | 585 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 551 insertions(+), 34 deletions(-) diff --git a/table/2024/August.md b/table/2024/August.md index 8747e1c..d06e4b1 100644 --- a/table/2024/August.md +++ b/table/2024/August.md @@ -1,34 +1,551 @@ -| | salary | job title | company | company location | link to apply | remote | -| -- | -------------------------------- | ----------------------------------------------------- | ---------------------- | ----------------------------------------- | --------------------------------------------------------------- | -------------------------- | -| 0 | $120k-$180k | Senior Java Software Engineer, Solutions Engineer | FusionAuth | Denver, CO, USA | https://fusionauth.io/jobs/ | Yes | -| 1 | $75-150k base & 200k+ equity | Engineering & Growth | Puma.tech | Remote-first with PST overlap | https://puma.tech | Yes | -| 2 | $189-302k | Staff TLM, Cloud Platform | Aurora | Hybrid in SEA, Bay Area, PIT | https://aurora.tech/jobs/staff-tech-lead-cloud-infrastructur... | No | -| 3 | $150-180k | Backend or Fullstack Software Engineer | Rainbow Insurance | Onsite NYC or Remote | Email hn@userainbow.com | Yes | -| 4 | $180 - 220k | Senior / Staff Software Engineer | Patch | San Francisco | https://jobs.ashbyhq.com/patch.io/934b8dfe-d144-4be2-8fa9-b0... | No | -| 5 | $180k-$220k | Senior Mobile Software Engineer, iOS/Android Engineer | Felt Clinic | San Francisco, CA, USA | email sid@feltclinic.com | Yes | -| 6 | $150k+ salary & equity | Senior Software Engineer | Grid Status | Remote or Hybrid Chicago | email jobs@gridstatus.io | Yes | -| 7 | $80k-$120k | Senior Software Engineer | Spacelift | Remote | https://spacelift.teamtailor.com/jobs/3006934-software-engin... | Yes | -| 8 | -£80k + 0.5% equity | Software Engineer | Dirac | London, Acton | Email ethan@dirac.software if interested | No | -| 9 | $115k—$165k | | Cumulus | | https://www.linkedin.com/jobs/view/3987534709 | No | -| 10 | $130k - $180k + equity | | Enter | | https://jobs.lever.co/enter-rcm-llc/faa8d556-e3c1-42bf-a67c-... | Yes | -| 11 | $170-220k + equity and benefits | | Goody | | https://jobs.ongoody.com/swe | Yes | -| 12 | $150k - $200k | | Scholarly | | https://scholarly.breezy.hr/p/a8959b02b8bd-software-engineer | No | -| 13 | $160-$180k | | 3Play Media | | https://www.3playmedia.com/company/jobs-post/?gh_jid=6076237 | No | -| 14 | $110-$210k+ | multiple roles | Automattic | Remote | https://join.a8c.com/enghn, https://join.a8c.com/srsyshn | Yes | -| 15 | $130,000 - $215,000 | Senior Mobile Engineer | Peregrine Technologies | San Francisco or DC | https://boards.greenhouse.io/peregrinetechnologies/jobs/4437... | No | -| 16 | $55,000-$115,000 | Full-stack Frontend:React/Svelte Backend:C# | Axiom Innovations | Denver, CO | https://www.dropbox.com/scl/fi/zag9wrbgh07snyo5rq73q/Axiom-I... | Yes | -| 17 | $150k & Equity Options | Founding Engineer | Membrane | Remote (US Timezones) | https://membrane.io | Yes | -| 18 | $130k - $160k | Senior Data Scientist | Unite Us | Remote (US) | https://uniteus.com/our-careers/job-openings/job/?gh_jid=757 | Yes | -| 19 | -£65-80k | Fullstack Engineer | Spill | London, UK (HQ) | Email calvin@spill.chat | No | -| 20 | 150-230k+ + equity + benefits | Multiple roles | SmarterDx | Remote (US only) | https://smarterdx.com/careers | Yes | -| 21 | $140-175k | | BioIntelliSense | | | Yes | -| 22 | £70-100k + equity | Multiple roles | Tracebit | London, UK | https://tracebit.com/careers | No | -| 23 | 15-20LPA INR | ML Engineer | Doctor Droid | Bangalore, INDIA | email siddarth [at] drdroid [dot] io | No | -| 24 | $149k - $350k (+ strong equity) | Senior/Staff Security Engineer | Figma | Remote (US / Canada), or in-office SF/NYC | https://boards.greenhouse.io/figma/jobs/4214880004 | Yes | -| 25 | $176k-242k USD + equity | Multiple Roles | DuckDuckGo | Remote | https://duckduckgo.com/hiring | Yes | -| 26 | $110k - $165k, 0.15%-0.3% equity | AI Engineer | Raylu | Onsite - NYC | https://forms.gle/e4aPgyX6QYiKDhc9A | No | -| 27 | $160,000 to $190,000 | Multiple engineering roles | Fullstory | Atlanta or Remote (USA) | https://www.fullstory.com/careers/?utm_source=092xpqyAkV | Yes | -| 28 | $150,000 - $240,000 | Full Stack Engineer, Customer Engineer | Danswer AI | On-site | https://www.workatastartup.com/companies/danswer | No | -| 29 | $70-90K starting + benefits | Data Wrangler | CAPP | Greater Philadelphia / Remote | careers@cappusa.com | Yes (or Hybrid if desired) | +| | Post Link | Company | Job Title | Employment Type | Salary | Remote | Location | Languages and Frameworks | Remote Rules | How to Apply | +| --- | ---------------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------ | --------------- | --------------------------------------------------- | ------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0 | [Post link](https://news.ycombinator.com/item?id=41130582) | Riza, Inc. | Software Engineer | full-time | | unknown | San Francisco, USA | WASM, Postgres, Go, React, TypeScript | | Send an email to me at andrew at riza dot io or pop in our Discord (https://discord.gg/4P6PUeJFW5) and say hi. | +| 1 | [Post link](https://news.ycombinator.com/item?id=41130582) | Riza, Inc. | DevRel Engineer | full-time | | unknown | San Francisco, USA | WASM, Postgres, Go, React, TypeScript | | Send an email to me at andrew at riza dot io or pop in our Discord (https://discord.gg/4P6PUeJFW5) and say hi. | +| 2 | [Post link](https://news.ycombinator.com/item?id=41214162) | OneText | Lead TypeScript/Node Full Stack Engineer | full-time | | hybrid | Bay Area, USA | TypeScript, Node | | Would love to hear from you and chat if you're interested in either (or both)! | +| 3 | [Post link](https://news.ycombinator.com/item?id=41214162) | OneText | Devops/DBA Engineer | full-time | | hybrid | Bay Area, USA | | | Would love to hear from you and chat if you're interested in either (or both)! | +| 4 | [Post link](https://news.ycombinator.com/item?id=41133198) | FusionAuth | Senior Java Software Engineer | full-time | $120k-$180k (USD) | hybrid | Denver, USA | Java, MySQL, PostgreSQL, Docker, Kubernetes, OAuth, SAML, OIDC | ONSITE or REMOTE in USA (location reqs listed on the job desc) | Learn more, including about benefits and salaries, and apply here: https://fusionauth.io/jobs/ | +| 5 | [Post link](https://news.ycombinator.com/item?id=41133198) | FusionAuth | Solutions Engineer | full-time | $120k-$180k (USD) | hybrid | Denver, USA | Java, MySQL, PostgreSQL, Docker, Kubernetes, OAuth, SAML, OIDC | ONSITE or REMOTE in USA (location reqs listed on the job desc) | Learn more, including about benefits and salaries, and apply here: https://fusionauth.io/jobs/ | +| 6 | [Post link](https://news.ycombinator.com/item?id=41130994) | The Laboratory for RNA-Based Lifeforms | UI/UX Science Developer | contract | | no | Toronto, Canada | | ONSITE | Send an email, introduce yourself, and please include your portfolio (examples of your previous work). | +| 7 | [Post link](https://news.ycombinator.com/item?id=41130999) | Aurora | Staff TLM | full-time | $189-302k (USD) | hybrid | | Go, Kubernetes, Python, C++ | Hybrid in SEA, Bay Area, PIT | Apply below! https://aurora.tech/jobs/staff-tech-lead-cloud-infrastructur... | +| 8 | [Post link](https://news.ycombinator.com/item?id=41130999) | Aurora | Cloud Platform Engineer | full-time | $189-302k (USD) | hybrid | | Go, Kubernetes, Python, C++ | Hybrid in SEA, Bay Area, PIT | Apply below! https://aurora.tech/jobs/staff-tech-lead-cloud-infrastructur... | +| 9 | [Post link](https://news.ycombinator.com/item?id=41134018) | Sea Foundry | Full Stack Software Developer | full-time | | yes | Oakland, USA | React, Rails, Python | | If you're interested email me directly at mike@seafoundry.com | +| 10 | [Post link](https://news.ycombinator.com/item?id=41130241) | QuestDB | Core Database Engineer | full-time | | yes | | Java, C++, Rust | | Job application here: https://questdb.io/careers/core-database-engineer/ | +| 11 | [Post link](https://news.ycombinator.com/item?id=41144936) | Reef Technologies | Senior Python Backend Engineer | full-time | 45-70 USD per hour, or 7560-11760 USD a month (USD) | yes | | Python | Full Remote Flexibility: Work from anywhere. | Just go to https://careers.reef.pl/ and see what we’re all about! Do not send us CVs. | +| 12 | [Post link](https://news.ycombinator.com/item?id=41131818) | Automattic | Product-minded Generalist | full-time | $110-$210k+ (USD) | yes | | PHP, JavaScript | | Apply at https://join.a8c.com/enghn | +| 13 | [Post link](https://news.ycombinator.com/item?id=41131818) | Automattic | Systems Engineer | full-time | $110-$210k+ (USD) | yes | | | | Apply at https://join.a8c.com/srsyshn | +| 14 | [Post link](https://news.ycombinator.com/item?id=41131111) | Mesa | Senior Software Engineer | full-time | | yes | | Node, React Native, Typescript, AWS | US/Canada Remote | Learn more and apply: https://job-boards.greenhouse.io/mesamember/jobs/4002978008 | +| 15 | [Post link](https://news.ycombinator.com/item?id=41132223) | Rainbow Insurance | Backend Software Engineer | full-time | $150-180k (USD) | hybrid | | Golang, React, GraphQL, PostgreSQL | Hybrid (2 days on-site in SF) | If interested, please reach out at hn@userainbow.com with your resume attached to the email. | +| 16 | [Post link](https://news.ycombinator.com/item?id=41132223) | Rainbow Insurance | Fullstack Software Engineer | full-time | $150-180k (USD) | hybrid | | Golang, React, GraphQL, PostgreSQL | Hybrid (2 days on-site in SF) | If interested, please reach out at hn@userainbow.com with your resume attached to the email. | +| 17 | [Post link](https://news.ycombinator.com/item?id=41139263) | FUTO | QA Lead | full-time | | hybrid | Austin, USA | | On-site / Hybrid / Remote | To apply, send your resume and cover letter to jobs at futo dot org with the subject of the position you're interested in. | +| 18 | [Post link](https://news.ycombinator.com/item?id=41139263) | FUTO | QA Tester | part-time | | hybrid | Austin, USA | | On-site / Hybrid / Remote | To apply, send your resume and cover letter to jobs at futo dot org with the subject of the position you're interested in. | +| 19 | [Post link](https://news.ycombinator.com/item?id=41130975) | Great Question | Rails Software Engineer | full-time | | yes | | Ruby on Rails, React, Postgres | Remote (US Timezones) | I'm the co-founder & CEO and actively playing a role in finding more great people to join the team: ned@greatquestion.co | +| 20 | [Post link](https://news.ycombinator.com/item?id=41130975) | Great Question | React Software Engineer | full-time | | yes | | Ruby on Rails, React, Postgres | Remote (US Timezones) | I'm the co-founder & CEO and actively playing a role in finding more great people to join the team: ned@greatquestion.co | +| 21 | [Post link](https://news.ycombinator.com/item?id=41131203) | Olo | Senior Machine Learning Engineer | full-time | | yes | | Python | Remote (US) (HQ in NYC) | Apply Online here for India: https://boards.greenhouse.io/ibkr/jobs/6744937002 | +| 22 | [Post link](https://news.ycombinator.com/item?id=41131203) | Olo | Full-stack Engineer | full-time | | yes | | JavaScript, Typescript | Remote (US) (HQ in NYC) | Apply Online here for India: https://boards.greenhouse.io/ibkr/jobs/6744937002 | +| 23 | [Post link](https://news.ycombinator.com/item?id=41131203) | Olo | Backend .NET Engineer | full-time | | yes | | .NET | Remote (US) (HQ in NYC) | Apply Online here for India: https://boards.greenhouse.io/ibkr/jobs/6744937002 | +| 24 | [Post link](https://news.ycombinator.com/item?id=41131203) | Olo | Marketing Automation Engineer | full-time | | yes | | | Remote (US) (HQ in NYC) | Apply Online here for India: https://boards.greenhouse.io/ibkr/jobs/6744937002 | +| 25 | [Post link](https://news.ycombinator.com/item?id=41131203) | Olo | Senior and Staff DevOps Engineers | full-time | | yes | | | Remote (US) (HQ in NYC) | Apply Online here for India: https://boards.greenhouse.io/ibkr/jobs/6744937002 | +| 26 | [Post link](https://news.ycombinator.com/item?id=41142750) | Eigen | Product Engineer | full-time | | yes | | TypeScript, Python | REMOTE (all remote) | send an email to careers [at] eigen (.) net with a resume/site link/whatever is indicative of you. | +| 27 | [Post link](https://news.ycombinator.com/item?id=41142750) | Eigen | Ex-Technical Founder Engineer | full-time | | yes | | TypeScript, Python | REMOTE (all remote) | send an email to careers [at] eigen (.) net with a resume/site link/whatever is indicative of you. | +| 28 | [Post link](https://news.ycombinator.com/item?id=41142750) | Eigen | AI Engineer | full-time | | yes | | TypeScript, Python | REMOTE (all remote) | send an email to careers [at] eigen (.) net with a resume/site link/whatever is indicative of you. | +| 29 | [Post link](https://news.ycombinator.com/item?id=41132372) | EnterpriseDB | Engineer on Postgres Distributed (EU/UK) | full-time | | yes | | | Remote | Feel free to email phil.eaton@enterprisedb.com. | +| 30 | [Post link](https://news.ycombinator.com/item?id=41132372) | EnterpriseDB | Engineer on Postgres Distributed (Brazil) | full-time | | yes | | | Remote | Feel free to email phil.eaton@enterprisedb.com. | +| 31 | [Post link](https://news.ycombinator.com/item?id=41132372) | EnterpriseDB | Product Manager on Databases/HA (US) | full-time | | yes | | | Remote | Feel free to email phil.eaton@enterprisedb.com. | +| 32 | [Post link](https://news.ycombinator.com/item?id=41132372) | EnterpriseDB | Product Manager on Analytics (US) | full-time | | yes | | | Remote | Feel free to email phil.eaton@enterprisedb.com. | +| 33 | [Post link](https://news.ycombinator.com/item?id=41132372) | EnterpriseDB | Product Manager on Platform (US) | full-time | | yes | | | Remote | Feel free to email phil.eaton@enterprisedb.com. | +| 34 | [Post link](https://news.ycombinator.com/item?id=41202259) | Safety Cybersecurity | Senior Python Engineer | full-time | | yes | Unknown city, Canada | Python | | https://apply.workable.com/safety/j/94AA92EC29/ | +| 35 | [Post link](https://news.ycombinator.com/item?id=41202259) | Safety Cybersecurity | Senior Fullstack Python Engineer | full-time | | yes | Unknown city, Canada | Python, Vue, React | | https://apply.workable.com/safety/j/DE63B30B06/ | +| 36 | [Post link](https://news.ycombinator.com/item?id=41137611) | Stealth ML Startup | ML Engineer | full-time | | hybrid | San Francisco, US | | | | +| 37 | [Post link](https://news.ycombinator.com/item?id=41137611) | Stealth ML Startup | DevOps Engineer | full-time | | hybrid | San Francisco, US | | | | +| 38 | [Post link](https://news.ycombinator.com/item?id=41137611) | Stealth ML Startup | ML Engineer | full-time | | hybrid | Amsterdam, Netherlands | | | | +| 39 | [Post link](https://news.ycombinator.com/item?id=41179588) | ChartMogul | Senior Full Stack Engineer | full-time | | yes | Unknown city, Remote | Ruby, Ruby on Rails, Vue.js, Typescript, Postgres, AWS | | https://jobs.chartmogul.com/o/senior-full-stack-engineer-del... | +| 40 | [Post link](https://news.ycombinator.com/item?id=41179588) | ChartMogul | Senior Ruby Engineer | full-time | | yes | Unknown city, Remote | Ruby, Ruby on Rails | | https://jobs.chartmogul.com/o/senior-ruby-engineer-pipeline-... | +| 41 | [Post link](https://news.ycombinator.com/item?id=41136550) | Cybernetica AS | Rust Developer | full-time | | no | Tallinn or Tartu, Estonia | Rust | ONSITE (Hybrid) | https://cyber.teamdash.com/p/job/NtUZYq67/rust-developer-for... | +| 42 | [Post link](https://news.ycombinator.com/item?id=41174013) | Solution Street | Full Stack .NET Developer | full-time | | hybrid | Herndon, VA, US | .NET, MVC, web APIs, SQL Server | | | +| 43 | [Post link](https://news.ycombinator.com/item?id=41174013) | Solution Street | Azure API Developer | full-time | | yes | Herndon, VA, US | Azure API Management | | | +| 44 | [Post link](https://news.ycombinator.com/item?id=41174013) | Solution Street | Azure Cloud Administrator | full-time | | yes | Herndon, VA, US | Microsoft Azure, GitHub Actions, Kubernetes, Docker | | | +| 45 | [Post link](https://news.ycombinator.com/item?id=41174013) | Solution Street | Senior Backend Java Developer | full-time | | yes | Herndon, VA, US | Java, SpringBoot | | | +| 46 | [Post link](https://news.ycombinator.com/item?id=41174013) | Solution Street | Backend Python Developer | full-time | | yes | Herndon, VA, US | Python | | | +| 47 | [Post link](https://news.ycombinator.com/item?id=41174013) | Solution Street | .NET Developer | full-time | | yes | Herndon, VA, US | .NET | | | +| 48 | [Post link](https://news.ycombinator.com/item?id=41130440) | Unite Us | Senior Data Scientist | full-time | $130k - $160k (USD) | yes | Unknown city, US | | | https://uniteus.com/our-careers/job-openings/job/?gh_jid=757... | +| 49 | [Post link](https://news.ycombinator.com/item?id=41171139) | Clementine | Founding Technical Designer | full-time | | yes | Unknown city, Remote | | | ramon@clementine.games | +| 50 | [Post link](https://news.ycombinator.com/item?id=41137525) | Langfuse | Backend Engineer | full-time | | no | Berlin, Germany | | in-person | clemens@ | +| 51 | [Post link](https://news.ycombinator.com/item?id=41137525) | Langfuse | Product Engineer | full-time | | no | Berlin, Germany | | in-person | clemens@ | +| 52 | [Post link](https://news.ycombinator.com/item?id=41137525) | Langfuse | Devrel | full-time | | no | Berlin, Germany | | in-person | clemens@ | +| 53 | [Post link](https://news.ycombinator.com/item?id=41132660) | BetterBrain | Software Engineer | full-time | | yes | Unknown city, USA | NextJS, React, Typescript, Supabase, Python | | adi@betterbrain.com | +| 54 | [Post link](https://news.ycombinator.com/item?id=41130185) | MONUMENTAL | Software Engineer | full-time | | no | Amsterdam, Netherlands | Rust, TypeScript, Python | Onsite | https://www.monumental.co/jobs | +| 55 | [Post link](https://news.ycombinator.com/item?id=41142662) | Kuzco, Inc. | Full-stack SWE | full-time | | no | San Francisco, CA, US | | | https://apply.workable.com/kuzco | +| 56 | [Post link](https://news.ycombinator.com/item?id=41130844) | Corbalt | Software Engineer | full-time | | yes | Unknown city, Remote | | | https://jobs.lever.co/corbalt/ | +| 57 | [Post link](https://news.ycombinator.com/item?id=41169485) | Make Waves | Senior Full Stack Developer | full-time | | hybrid | Amsterdam, NL | | (>= one day in the office a week) | https://kb.makewaves.fm/general/careers | +| 58 | [Post link](https://news.ycombinator.com/item?id=41132949) | Dirac | Software Engineer | full-time | £80k (GBP) | no | London, Acton, UK | django, postgres, python | In-person | ethan@dirac.software | +| 59 | [Post link](https://news.ycombinator.com/item?id=41131077) | Monad Labs | Developer Relations Engineer | full-time | | yes | Unknown city, Remote | | | https://grnh.se/219f52b85us | +| 60 | [Post link](https://news.ycombinator.com/item?id=41131077) | Monad Labs | Senior Software Engineer | full-time | | yes | Unknown city, Remote | | | https://grnh.se/f33a39005us | +| 61 | [Post link](https://news.ycombinator.com/item?id=41131077) | Monad Labs | Senior Devops Engineer | full-time | | no | NYC, US | | | https://grnh.se/876639bd5us | +| 62 | [Post link](https://news.ycombinator.com/item?id=41131077) | Monad Labs | Network Security Engineer | full-time | | no | NYC, US | | | https://grnh.se/c676f44d5us | +| 63 | [Post link](https://news.ycombinator.com/item?id=41202995) | Sheer Health | Mobile Engineer | full-time | $160-190k (USD) | no | New York, NY, US | Kotlin | ONSITE | hn ~at~ sheerhealth.com | +| 64 | [Post link](https://news.ycombinator.com/item?id=41132942) | Membrane | Founding Engineer | full-time | $150k | yes | Unknown city, US Timezones | | | juan membrane.io | +| 65 | [Post link](https://news.ycombinator.com/item?id=41132178) | Grid Status | Senior Software Engineer | full-time | $150k+ | yes | Chicago, US | python, react, postgres, snowflake, AWS | | jobs@gridstatus.io | +| 66 | [Post link](https://news.ycombinator.com/item?id=41131742) | Edmij | Senior Data Engineer | full-time | | no | Amsterdam, NL | | Onsite >= 2 days a week | https://edmij.nl/vacatures/senior-data-engineer/ | +| 67 | [Post link](https://news.ycombinator.com/item?id=41131742) | Edmij | Senior Back-End Developer | full-time | | no | Amsterdam, NL | | Onsite >= 2 days a week | https://edmij.nl/vacatures/analytische-back-end-developer/ | +| 68 | [Post link](https://news.ycombinator.com/item?id=41134978) | Freeform | Senior Software Engineer (C++) | full-time | | no | Los Angeles, CA, US | C++ | Onsite | https://grnh.se/c64188283us | +| 69 | [Post link](https://news.ycombinator.com/item?id=41134978) | Freeform | Senior Software Engineer (Rust) | full-time | | no | Los Angeles, CA, US | Rust | Onsite | https://grnh.se/3f7618973us | +| 70 | [Post link](https://news.ycombinator.com/item?id=41134978) | Freeform | Software Engineer (C++) | full-time | | no | Los Angeles, CA, US | C++ | Onsite | https://grnh.se/ab812b013us | +| 71 | [Post link](https://news.ycombinator.com/item?id=41134978) | Freeform | Software Engineer (Rust) | full-time | | no | Los Angeles, CA, US | Rust | Onsite | https://grnh.se/4b759a833us | +| 72 | [Post link](https://news.ycombinator.com/item?id=41134978) | Freeform | Software Engineer (Language Agnostic) | full-time | | no | Los Angeles, CA, US | | Onsite | https://grnh.se/fc7486e23us | +| 73 | [Post link](https://news.ycombinator.com/item?id=41132870) | Sourcegraph | Developer | full-time | None (USD) | yes | San Francisco, USA | | | Apply here: https://grnh.se/0572f98b4us | +| 74 | [Post link](https://news.ycombinator.com/item?id=41132870) | Sourcegraph | Designer who codes | full-time | None (USD) | yes | San Francisco, USA | | | Apply here: https://grnh.se/0572f98b4us | +| 75 | [Post link](https://news.ycombinator.com/item?id=41132870) | Sourcegraph | EM who codes | full-time | None (USD) | yes | San Francisco, USA | | | Apply here: https://grnh.se/0572f98b4us | +| 76 | [Post link](https://news.ycombinator.com/item?id=41132870) | Sourcegraph | PM who codes | full-time | None (USD) | yes | San Francisco, USA | | | Apply here: https://grnh.se/0572f98b4us | +| 77 | [Post link](https://news.ycombinator.com/item?id=41132870) | Sourcegraph | Customer Eng | full-time | None (USD) | yes | San Francisco, USA | | | Apply here: https://grnh.se/0572f98b4us | +| 78 | [Post link](https://news.ycombinator.com/item?id=41132870) | Sourcegraph | Tech Advisor | full-time | None (USD) | yes | San Francisco, USA | | | Apply here: https://grnh.se/0572f98b4us | +| 79 | [Post link](https://news.ycombinator.com/item?id=41133784) | Privy | Staff Frontend | full-time | None (USD) | yes | NYC, USA | | | Reach out at join [at] privy.io | +| 80 | [Post link](https://news.ycombinator.com/item?id=41133784) | Privy | Full-Stack | full-time | None (USD) | yes | NYC, USA | | | Reach out at join [at] privy.io | +| 81 | [Post link](https://news.ycombinator.com/item?id=41133784) | Privy | React Native Roles | full-time | None (USD) | yes | NYC, USA | | | Reach out at join [at] privy.io | +| 82 | [Post link](https://news.ycombinator.com/item?id=41129829) | Stealth ML Company | Machine Learning Engineer | unknown | | yes | | | | Contact us at adamnemecek+hnhiring@gmail.com | +| 83 | [Post link](https://news.ycombinator.com/item?id=41174904) | HarperDB | Distinguished Software Engineer | unknown | | yes | | | | Apply here: https://harperdb-inc.breezy.hr/p/ba7be300f0dc-distinguished-... | +| 84 | [Post link](https://news.ycombinator.com/item?id=41174904) | HarperDB | Pre-Sales Solution Engineer | unknown | | yes | | | | Apply here: https://harperdb-inc.breezy.hr/p/30d079378cdf-pre-sales-solu... | +| 85 | [Post link](https://news.ycombinator.com/item?id=41195610) | Poe AI | Senior Full Stack Engineer | full-time | $174k-$275k (USD) | yes | | React, Typescript, GraphQL, Python | | Apply below: Senior - https://jobs.ashbyhq.com/quora/58d4ca1a-92c1-4b7c-884d-3fe91... | +| 86 | [Post link](https://news.ycombinator.com/item?id=41195610) | Poe AI | Staff Full Stack Engineer | full-time | $174k-$275k (USD) | yes | | React, Typescript, GraphQL, Python | | Apply below: Staff - https://jobs.ashbyhq.com/quora/2044e81f-570d-4501-8bba-05dc4... | +| 87 | [Post link](https://news.ycombinator.com/item?id=41201877) | Chub AI | Mid-level frontend engineer | full-time | | yes | | TypeScript | | Send your application to hiring@chub.ai | +| 88 | [Post link](https://news.ycombinator.com/item?id=41130718) | Patch | Senior Software Engineer | full-time | $180 - 220k (USD) | hybrid | San Francisco, USA | Ruby, Typescript | in office 2-3 days a week | Apply via: https://jobs.ashbyhq.com/patch.io/934b8dfe-d144-4be2-8fa9-b0... | +| 89 | [Post link](https://news.ycombinator.com/item?id=41141845) | Imbue | Machine Learning Engineer | full-time | | yes | San Francisco, USA | | | Please apply through the website above. | +| 90 | [Post link](https://news.ycombinator.com/item?id=41170888) | Kinity | Full Stack Developer | contract | | hybrid | | Python, PyTorch, React.js, Next.js | REMOTE (UK) or HYBRID (London) | Have a look at the full job description here https://kinity.studio/careers | +| 91 | [Post link](https://news.ycombinator.com/item?id=41129830) | Goody | Senior Software Engineer | full-time | $170-220K (USD) | yes | | Ruby, Rails, React | Remote within North/South America | Take a look at our application at https://jobs.ongoody.com/swe and feel free to email me at mark@ongoody.com | +| 92 | [Post link](https://news.ycombinator.com/item?id=41132915) | Sudowrite | AI Engineer | contract | | yes | | | | Email james@sudowrite.com to apply. | +| 93 | [Post link](https://news.ycombinator.com/item?id=41132915) | Sudowrite | Staff AI Engineer | full-time | | yes | | | | Details here: https://r.people.capital/sudowrite-ai | +| 94 | [Post link](https://news.ycombinator.com/item?id=41138043) | Scale Medicine | Founding Engineer | full-time | $160-240K (USD) | hybrid | New York, USA | | New York | Apply at https://join.scalemedicine.com or email me at michael@scalemedicine.com | +| 95 | [Post link](https://news.ycombinator.com/item?id=41129823) | PlantingSpace | Senior Software Engineer | full-time | | yes | | | Remote (EU time zone) with quarterly gatherings | Check out our Join Us page: https://planting.space/joinus/ | +| 96 | [Post link](https://news.ycombinator.com/item?id=41129823) | PlantingSpace | Senior NLP Engineer | full-time | | yes | | | Remote (EU time zone) with quarterly gatherings | Check out our Join Us page: https://planting.space/joinus/ | +| 97 | [Post link](https://news.ycombinator.com/item?id=41129823) | PlantingSpace | Product Market Researcher | full-time | | yes | | | Remote (EU time zone) with quarterly gatherings | Check out our Join Us page: https://planting.space/joinus/ | +| 98 | [Post link](https://news.ycombinator.com/item?id=41129823) | PlantingSpace | Finance Ops | full-time | | yes | | | Remote (EU time zone) with quarterly gatherings | Check out our Join Us page: https://planting.space/joinus/ | +| 99 | [Post link](https://news.ycombinator.com/item?id=41181764) | Close | Senior/Staff Backend Engineer | full-time | | yes | | | REMOTE (US) | Apply here: https://jobs.lever.co/close.io/163446a3-2f3d-4f4a-9aec-cb1c8... | +| 100 | [Post link](https://news.ycombinator.com/item?id=41196312) | Conduktor | Senior Java Backend Engineer | full-time | | hybrid | London, UK | | London | Apply here: https://jobs.lever.co/conduktor/9b11cf2b-906e-49d7-baa1-6420... | +| 101 | [Post link](https://news.ycombinator.com/item?id=41196312) | Conduktor | Senior Product Manager | full-time | | hybrid | London, UK | | London | Apply here: https://jobs.lever.co/conduktor/e4c1a6c9-29c0-48c1-aa31-4569... | +| 102 | [Post link](https://news.ycombinator.com/item?id=41139782) | OpenRelay | Cofounder | unknown | | yes | | | | Drop me a line at kamil at openrelay dot io | +| 103 | [Post link](https://news.ycombinator.com/item?id=41129865) | Viz.ai | Solutions / DevOps Engineer | full-time | | yes | | | Remote (US Only, No Visa Sponsorship) | Email brian viz ai or apply through this link (https://grnh.se/982472b42us) | +| 104 | [Post link](https://news.ycombinator.com/item?id=41136480) | Phrasing | CTO | unknown | | yes | | | Europe | Visit https://phrasing.app/dream-team | +| 105 | [Post link](https://news.ycombinator.com/item?id=41133522) | Limitless | Principal Product Designer | full-time | | yes | | | | Apply here: https://jobs.ashbyhq.com/limitless/54e86ff0-58f8-4c6b-830b-1... | +| 106 | [Post link](https://news.ycombinator.com/item?id=41133522) | Limitless | Principal Design Engineer | full-time | | yes | | | | Apply here: https://jobs.ashbyhq.com/limitless/6f08f6fb-ffab-4919-82ed-8... | +| 107 | [Post link](https://news.ycombinator.com/item?id=41133522) | Limitless | Senior Software Engineer (Generalist) | full-time | | yes | | | | Apply here: https://jobs.ashbyhq.com/limitless/0911717b-0a69-406a-a494-1... | +| 108 | [Post link](https://news.ycombinator.com/item?id=41133522) | Limitless | Senior Software Engineer (Systems Backend) | full-time | | yes | | | | Apply here: https://jobs.ashbyhq.com/limitless/d9d1583d-4bbd-4e02-8223-8... | +| 109 | [Post link](https://news.ycombinator.com/item?id=41133522) | Limitless | Senior Software Engineer (Frontend) | full-time | | yes | | | | Apply here: https://jobs.ashbyhq.com/limitless/ba133a68-e121-466c-97d7-0... | +| 110 | [Post link](https://news.ycombinator.com/item?id=41130859) | Hightouch | Software Engineer, Backend (Distributed Systems) | full-time | | yes | | | Remote (North America) | Apply here: https://boards.greenhouse.io/hightouch/jobs/4782632004 | +| 111 | [Post link](https://news.ycombinator.com/item?id=41131265) | Orases | Full Stack Developer | full-time | None (USD) | hybrid | Frederick, USA | PHP, NodeJS, VueJS | 100% Remote (US) or Frederick, MD | https://orases.bamboohr.com/careers | +| 112 | [Post link](https://news.ycombinator.com/item?id=41157138) | Squint.ai | Sales Engineer | unknown | | yes | | | Remote, US & Canada | https://jobs.ashbyhq.com/squint.ai?utm_source=Hackernews | +| 113 | [Post link](https://news.ycombinator.com/item?id=41157138) | Squint.ai | Enterprise Account Executive | unknown | | yes | | | Remote, US & Canada | https://jobs.ashbyhq.com/squint.ai?utm_source=Hackernews | +| 114 | [Post link](https://news.ycombinator.com/item?id=41157138) | Squint.ai | Software Engineer | unknown | | yes | | | Remote, US & Canada | https://jobs.ashbyhq.com/squint.ai?utm_source=Hackernews | +| 115 | [Post link](https://news.ycombinator.com/item?id=41157138) | Squint.ai | Customer Strategy Partner | unknown | | yes | | | Remote, US & Canada | https://jobs.ashbyhq.com/squint.ai?utm_source=Hackernews | +| 116 | [Post link](https://news.ycombinator.com/item?id=41157138) | Squint.ai | Product Designer | unknown | | yes | | | Remote, US & Canada | https://jobs.ashbyhq.com/squint.ai?utm_source=Hackernews | +| 117 | [Post link](https://news.ycombinator.com/item?id=41157138) | Squint.ai | Product Marketing Manager | unknown | | yes | | | Remote, US & Canada | https://jobs.ashbyhq.com/squint.ai?utm_source=Hackernews | +| 118 | [Post link](https://news.ycombinator.com/item?id=41165109) | Pave.dev | Data Scientist | full-time | | yes | | | Remote (US) | https://wellfound.com/l/2AqFf9 | +| 119 | [Post link](https://news.ycombinator.com/item?id=41165109) | Pave.dev | Data Analyst | full-time | | yes | | | Remote (US) | https://wellfound.com/l/2zJxJp | +| 120 | [Post link](https://news.ycombinator.com/item?id=41137539) | Lovable | Product Engineer | full-time | | hybrid | London, UK | FastAPI, Next.js, Cloud Run, Fly.io, Supabase, GCP, AWS | ONSITE+HYBRID | London/Stockholm | mailto:anton@lovable.dev?subject=HN | +| 121 | [Post link](https://news.ycombinator.com/item?id=41137539) | Lovable | Generalist | full-time | | hybrid | London, UK | FastAPI, Next.js, Cloud Run, Fly.io, Supabase, GCP, AWS | ONSITE+HYBRID | London/Stockholm | mailto:anton@lovable.dev?subject=HN | +| 122 | [Post link](https://news.ycombinator.com/item?id=41130878) | Hellotext | Full Stack Ruby on Rails Wizard | unknown | | yes | | Ruby on Rails, Hotwire, TailwindCSS, ViewComponent | Remote | https://applicantai.com/hellotext/ruby-on-rails-frontend-and... | +| 123 | [Post link](https://news.ycombinator.com/item?id=41162278) | Cambly.com | Engineering Manager | full-time | | hybrid | San Francisco, USA | | Hybrid/Onsite | San Francisco, Ca, USA | https://jobs.ashbyhq.com/Cambly?utm_source=wnopvxR0o8 | +| 124 | [Post link](https://news.ycombinator.com/item?id=41162278) | Cambly.com | Sr. iOS Engineer | full-time | | hybrid | San Francisco, USA | | Hybrid/Onsite | San Francisco, Ca, USA | https://jobs.ashbyhq.com/Cambly?utm_source=wnopvxR0o8 | +| 125 | [Post link](https://news.ycombinator.com/item?id=41162278) | Cambly.com | Sr. Frontend Engineer | full-time | | hybrid | San Francisco, USA | | Hybrid/Onsite | San Francisco, Ca, USA | https://jobs.ashbyhq.com/Cambly?utm_source=wnopvxR0o8 | +| 126 | [Post link](https://news.ycombinator.com/item?id=41162278) | Cambly.com | Staff Platform Engineer | full-time | | hybrid | San Francisco, USA | | Hybrid/Onsite | San Francisco, Ca, USA | https://jobs.ashbyhq.com/Cambly?utm_source=wnopvxR0o8 | +| 127 | [Post link](https://news.ycombinator.com/item?id=41162278) | Cambly.com | Staff Backend Engineer | full-time | | hybrid | San Francisco, USA | | Hybrid/Onsite | San Francisco, Ca, USA | https://jobs.ashbyhq.com/Cambly?utm_source=wnopvxR0o8 | +| 128 | [Post link](https://news.ycombinator.com/item?id=41162278) | Cambly.com | Staff Android Engineer | full-time | | hybrid | San Francisco, USA | | Hybrid/Onsite | San Francisco, Ca, USA | https://jobs.ashbyhq.com/Cambly?utm_source=wnopvxR0o8 | +| 129 | [Post link](https://news.ycombinator.com/item?id=41162278) | Cambly.com | Sr. Economist | full-time | | hybrid | San Francisco, USA | | Hybrid/Onsite | San Francisco, Ca, USA | https://jobs.ashbyhq.com/Cambly?utm_source=wnopvxR0o8 | +| 130 | [Post link](https://news.ycombinator.com/item?id=41132488) | Relevant Healthcare | Director of Engineering | unknown | | yes | | | Remote (USA + Canada) | https://relevant.healthcare/jobs/director-of-engineering/ | +| 131 | [Post link](https://news.ycombinator.com/item?id=41132041) | Interviewer | Founding Engineer | full-time | | no | New York, USA | | New York, NY | mailto:shreyas@techinterviewer.ai?subject=Interest in Founding Engineer Role | +| 132 | [Post link](https://news.ycombinator.com/item?id=41132612) | Ephemera | Cryptography-minded Rust Engineer | full-time | | yes | | | Fully Remote | North/South America | https://paragraph.xyz/@ephemera/careers | +| 133 | [Post link](https://news.ycombinator.com/item?id=41132612) | Ephemera | Design-minded React Native Engineer | full-time | | yes | | | Fully Remote | North/South America | https://paragraph.xyz/@ephemera/careers | +| 134 | [Post link](https://news.ycombinator.com/item?id=41132612) | Ephemera | Blockchain-minded Distributed Systems Engineer | full-time | | yes | | | Fully Remote | North/South America | https://paragraph.xyz/@ephemera/careers | +| 135 | [Post link](https://news.ycombinator.com/item?id=41179646) | Upflow | Fullstack Engineer | unknown | | hybrid | Paris, France | Typescript, React, GCP, Postgres | Paris or Remote | https://jobs.ashbyhq.com/upflow/852704b8-203b-4502-9425-761f... | +| 136 | [Post link](https://news.ycombinator.com/item?id=41131221) | Foxglove | Staff Frontend Visualization Engineer | full-time | | yes | | TypeScript, React, Wasm, WebGL | Remote | https://foxglove.dev/ | +| 137 | [Post link](https://news.ycombinator.com/item?id=41131221) | Foxglove | Staff Backend Engineer | full-time | | yes | | TypeScript, Node.js, Postgres, Rust, C++, Python | Remote | https://foxglove.dev/ | +| 138 | [Post link](https://news.ycombinator.com/item?id=41131221) | Foxglove | Sales / Solutions Engineer | full-time | | no | Boston, USA | | onsite in Boston MA | https://foxglove.dev/ | +| 139 | [Post link](https://news.ycombinator.com/item?id=41129819) | Channable | Python Software Engineer (Infra Team) | full-time | | hybrid | Utrecht, Netherlands | Python | Utrecht, Netherlands | https://jobs.channable.com/o/python-software-engineer-python... | +| 140 | [Post link](https://news.ycombinator.com/item?id=41129819) | Channable | Python Software Engineer (Marketplaces Team) | full-time | | hybrid | Utrecht, Netherlands | Python | Utrecht, Netherlands | https://jobs.channable.com/o/python-software-engineer-market... | +| 141 | [Post link](https://news.ycombinator.com/item?id=41129819) | Channable | Haskell Software Engineer | full-time | | hybrid | Utrecht, Netherlands | Haskell | Utrecht, Netherlands | https://jobs.channable.com/o/haskell-software-engineer-2-3 | +| 142 | [Post link](https://news.ycombinator.com/item?id=41129819) | Channable | DevOps Engineer (DevEx Team) | full-time | | hybrid | Utrecht, Netherlands | | Utrecht, Netherlands | https://jobs.channable.com/o/devopsdevex-engineer | +| 143 | [Post link](https://news.ycombinator.com/item?id=41134412) | Lithos Carbon | Full-Stack Engineer | full-time | | hybrid | | | Hybrid (SF Bay Area, Seattle) and US Remote | mailto:hn@lithoscarbon.com | +| 144 | [Post link](https://news.ycombinator.com/item?id=41134412) | Lithos Carbon | Data Scientist | full-time | | hybrid | | | Hybrid (SF Bay Area, Seattle) and US Remote | mailto:hn@lithoscarbon.com | +| 145 | [Post link](https://news.ycombinator.com/item?id=41134412) | Lithos Carbon | Applied Statistician | full-time | | hybrid | | | Hybrid (SF Bay Area, Seattle) and US Remote | mailto:hn@lithoscarbon.com | +| 146 | [Post link](https://news.ycombinator.com/item?id=41192522) | Anvil | Developer Advocate | full-time | | hybrid | Cambridge, UK | | Cambridge, UK | https://anvil.works/jobs | +| 147 | [Post link](https://news.ycombinator.com/item?id=41131178) | Monument | Senior Software Engineer | full-time | | hybrid | New York, USA | NodeJS, React, Typescript, PostgreSQL, Redis, AWS, Terraform, Kubernetes | New York, NY | mailto:will@joinmonument.com | +| 148 | [Post link](https://news.ycombinator.com/item?id=41130571) | DogpatchLabs | Cofounder | full-time | | no | Dublin, Ireland | | Dublin | https://www.joinfounders.co/ | +| 149 | [Post link](https://news.ycombinator.com/item?id=41156458) | PermitFlow | Staff Software Engineer | full-time | | no | New York, USA | | New York, NY | https://permitflow.com/hiring | +| 150 | [Post link](https://news.ycombinator.com/item?id=41156458) | PermitFlow | Fullstack Software Engineer | full-time | | no | New York, USA | | New York, NY | https://permitflow.com/hiring | +| 151 | [Post link](https://news.ycombinator.com/item?id=41156458) | PermitFlow | Senior Frontend Engineer | full-time | | no | New York, USA | | New York, NY | https://permitflow.com/hiring | +| 152 | [Post link](https://news.ycombinator.com/item?id=41132295) | Beacon Biosignals | Multiple Roles | full-time | | yes | | | Remote, NYC, Boston, SF | https://beacon.bio/careers | +| 153 | [Post link](https://news.ycombinator.com/item?id=41191002) | Provable | Senior Software Engineer (Rust) | full-time | $195 - 275k (USD) | hybrid | San Francisco, USA | Rust | San Francisco, Hybrid (in office 3-5 days a week) | https://provable.com/careers | +| 154 | [Post link](https://news.ycombinator.com/item?id=41179664) | Carebit | Full Stack Rails & React Product Engineer | full-time | £80k-£100k/$100k-$125k equivalent (GBP) | yes | | Ruby on Rails, React | FULLY REMOTE | mailto:hiring@carebit.co | +| 155 | [Post link](https://news.ycombinator.com/item?id=41129845) | env0/OpenTofu | Open Source Software Engineer | full-time | | yes | Unknown city, Europe/Americas | | | You can apply here: https://www.comeet.com/jobs/env0/B6.005/open-source-engineer... | +| 156 | [Post link](https://news.ycombinator.com/item?id=41129845) | env0/OpenTofu | Open Source Software Engineer | full-time | | yes | Unknown city, Europe/Americas | | | You can apply here: https://www.comeet.com/jobs/env0/B6.005/open-source-engineer... | +| 157 | [Post link](https://news.ycombinator.com/item?id=41183146) | MDandMe | Mobile SWE (React Native) | unknown | | yes | USA, USA | React Native, iOS, Android | | If interested, email me at ilya@mdme.ai | +| 158 | [Post link](https://news.ycombinator.com/item?id=41183146) | MDandMe | Mobile SWE (iOS) | unknown | | yes | USA, USA | React Native, iOS, Android | | If interested, email me at ilya@mdme.ai | +| 159 | [Post link](https://news.ycombinator.com/item?id=41183146) | MDandMe | Mobile SWE (Android) | unknown | | yes | USA, USA | React Native, iOS, Android | | If interested, email me at ilya@mdme.ai | +| 160 | [Post link](https://news.ycombinator.com/item?id=41182420) | remberg | Senior Software Engineer | full-time | | hybrid | Munich, Germany | TypeScript, NestJS, Angular, Ionic, AWS | in-person or REMOTE (CEST +/- 3h) | Feel free to ping me via cecil.woebker@ if you want to learn more! More info: https://remberg.de/en/careers/ + Jobs https://remberg.de/jobs | +| 161 | [Post link](https://news.ycombinator.com/item?id=41182420) | remberg | Senior Platform Engineer (AWS) | full-time | | hybrid | Munich, Germany | TypeScript, NestJS, Angular, Ionic, AWS | in-person or REMOTE (CEST +/- 3h) | Feel free to ping me via cecil.woebker@ if you want to learn more! More info: https://remberg.de/en/careers/ + Jobs https://remberg.de/jobs | +| 162 | [Post link](https://news.ycombinator.com/item?id=41182420) | remberg | Senior Software Engineer Mobile | full-time | | hybrid | Munich, Germany | TypeScript, NestJS, Angular, Ionic, AWS | in-person or REMOTE (CEST +/- 3h) | Feel free to ping me via cecil.woebker@ if you want to learn more! More info: https://remberg.de/en/careers/ + Jobs https://remberg.de/jobs | +| 163 | [Post link](https://news.ycombinator.com/item?id=41176357) | DoShare | Flutter Developer Intern | intern | | hybrid | Unknown city, India | Flutter | Remote or NCR, India Region | More details and how to apply: https://dub.sh/TFZse3B | +| 164 | [Post link](https://news.ycombinator.com/item?id=41176357) | DoShare | AI/ML Developer Intern | intern | | hybrid | Unknown city, India | AI, ML | Remote or NCR, India Region | More details and how to apply: https://dub.sh/TFZse3B | +| 165 | [Post link](https://news.ycombinator.com/item?id=41176357) | DoShare | Data Scientist Intern | intern | | hybrid | Unknown city, India | | Remote or NCR, India Region | More details and how to apply: https://dub.sh/TFZse3B | +| 166 | [Post link](https://news.ycombinator.com/item?id=41176357) | DoShare | UI/UX Intern | intern | | hybrid | Unknown city, India | | Remote or NCR, India Region | More details and how to apply: https://dub.sh/TFZse3B | +| 167 | [Post link](https://news.ycombinator.com/item?id=41140644) | Stytch | Experienced Full-stack Engineer | unknown | | hybrid | Unknown city, US | Go, Node, Typescript, Next.js, React, Typescript | Remote (US) | Hybrid in SF/NY | https://jobs.ashbyhq.com/stytch?utm_source=OEvbo87dAp | +| 168 | [Post link](https://news.ycombinator.com/item?id=41140644) | Stytch | Experienced Full-Stack Engineer | unknown | | hybrid | Unknown city, US | Go, Node, Typescript, Next.js, React, Typescript | Remote (US) | Hybrid in SF/NY | https://jobs.ashbyhq.com/stytch?utm_source=OEvbo87dAp | +| 169 | [Post link](https://news.ycombinator.com/item?id=41140644) | Stytch | Experienced Backend Engineer | unknown | | hybrid | Unknown city, US | Go, Node, Typescript, Next.js, React, Typescript | Remote (US) | Hybrid in SF/NY | https://jobs.ashbyhq.com/stytch?utm_source=OEvbo87dAp | +| 170 | [Post link](https://news.ycombinator.com/item?id=41140644) | Stytch | Experienced Infra Engineer | unknown | | hybrid | Unknown city, US | Go, Node, Typescript, Next.js, React, Typescript | Remote (US) | Hybrid in SF/NY | https://jobs.ashbyhq.com/stytch?utm_source=OEvbo87dAp | +| 171 | [Post link](https://news.ycombinator.com/item?id=41140644) | Stytch | Experienced Data-Infra Engineer | unknown | | hybrid | Unknown city, US | Go, Node, Typescript, Next.js, React, Typescript | Remote (US) | Hybrid in SF/NY | https://jobs.ashbyhq.com/stytch?utm_source=OEvbo87dAp | +| 172 | [Post link](https://news.ycombinator.com/item?id=41140644) | Stytch | Product Manager, Activation | unknown | | hybrid | Unknown city, US | | Remote (US) | Hybrid in SF/NY | https://jobs.ashbyhq.com/stytch?utm_source=OEvbo87dAp | +| 173 | [Post link](https://news.ycombinator.com/item?id=41140644) | Stytch | Technical Product Marketing Manager | unknown | | hybrid | Unknown city, US | | Remote (US) | Hybrid in SF/NY | https://jobs.ashbyhq.com/stytch?utm_source=OEvbo87dAp | +| 174 | [Post link](https://news.ycombinator.com/item?id=41140644) | Stytch | Product Designer | unknown | | hybrid | Unknown city, US | | Remote (US) | Hybrid in SF/NY | https://jobs.ashbyhq.com/stytch?utm_source=OEvbo87dAp | +| 175 | [Post link](https://news.ycombinator.com/item?id=41140644) | Stytch | Developer Advocate Engineer | unknown | | hybrid | Unknown city, US | | Remote (US) | Hybrid in SF/NY | https://jobs.ashbyhq.com/stytch?utm_source=OEvbo87dAp | +| 176 | [Post link](https://news.ycombinator.com/item?id=41140644) | Stytch | Developer Education | unknown | | hybrid | Unknown city, US | | Remote (US) | Hybrid in SF/NY | https://jobs.ashbyhq.com/stytch?utm_source=OEvbo87dAp | +| 177 | [Post link](https://news.ycombinator.com/item?id=41146371) | A2X Accounting | Full-Stack Software Engineer | full-time | | yes | Unknown city, North America, Australia, New Zealand, or EU | Java, Spring Boot, Vue.js, Google Cloud | | More details and option to apply: https://a2xaccounting.com/ | +| 178 | [Post link](https://news.ycombinator.com/item?id=41141239) | Abnormal Security | Senior Backend Software Engineer | unknown | | yes | Unknown city, US, Canada | | REMOTE (US, Canada) with optional offices in SF & NYC | Please see the following links for more details on the open positions: https://grnh.se/b464544f3us | +| 179 | [Post link](https://news.ycombinator.com/item?id=41141239) | Abnormal Security | Senior Full Stack Software Engineer | unknown | | yes | Unknown city, US, Canada | | REMOTE (US, Canada) with optional offices in SF & NYC | Please see the following links for more details on the open positions: https://grnh.se/92e75a293us | +| 180 | [Post link](https://news.ycombinator.com/item?id=41185808) | Ordergroove | Test Automation Lead | full-time | | yes | Unknown city, unknown | Python, Selenium, Test Automation, Continuous Integration | | Here is the job description for more details: https://grnh.se/8622de302us | +| 181 | [Post link](https://news.ycombinator.com/item?id=41137169) | Queueco | Software Developer | full-time | | no | London, UK | | Full time on-site | Send us a message at: contact@queueco.com or apply directly at: https://apply.workable.com/queueco/j/6926A83DEE/ | +| 182 | [Post link](https://news.ycombinator.com/item?id=41144489) | ScribbleVet | Full-stack Engineer | full-time | | yes | Unknown city, US | Postgres, Elixir, React Native, React, Nextjs | must be able to work US timezones | If you're interested in building AI-driven features that help vets and the animals they care for, check us out here: https://www.notion.so/Senior-Full-Stack-Frontend-Engineer-6b... | +| 183 | [Post link](https://news.ycombinator.com/item?id=41144529) | Fractional AI | Founding Engineer | full-time | 150k-210k | no | San Francisco, USA | | Onsite | apply https://jobs.lever.co/fractional or reach out to me (annie@fractional.ai) | +| 184 | [Post link](https://news.ycombinator.com/item?id=41140788) | Commonwealth Fusion Systems | Software Engineer - Frontend | unknown | | hybrid | Unknown city, USA | React, Golang | ONSITE (3x/wk) in Devens MA or Milpitas CA | Apply here for Devens, MA: https://jobs.lever.co/cfsenergy/ea99be4e-3e4a-4dd9-8db2-d149... Apply here for Milpitas, CA: https://jobs.lever.co/cfsenergy/fac39d00-cc35-4a22-b6cf-75d6... | +| 185 | [Post link](https://news.ycombinator.com/item?id=41132158) | AWS Device Farm | Senior level Software Engineer (L6) | full-time | | no | Seattle, WA | | Seattle, WA | You can find more details about the role here: https://www.amazon.jobs/en/jobs/2599145/sr-software-developm... | +| 186 | [Post link](https://news.ycombinator.com/item?id=41130029) | Microsoft Azure Storage | Software Engineer | unknown | | hybrid | Seattle, WA | | Onsite or Remote (US only) | please reach out to me directly at imnaseer@microsoft.com and include "Automated Reasoning and Validation Position" in the subject. | +| 187 | [Post link](https://news.ycombinator.com/item?id=41130143) | Quatt.io | Senior Backend Developer | full-time | | hybrid | Amsterdam, Netherlands | Typescript | Hybrid/ONSITE | Email me directly ( my-hacker-news-username@quatt.io ) for questions or apply via the career page. | +| 188 | [Post link](https://news.ycombinator.com/item?id=41130143) | Quatt.io | Senior QA / Test Engineer | full-time | | hybrid | Amsterdam, Netherlands | | Hybrid/ONSITE | Email me directly ( my-hacker-news-username@quatt.io ) for questions or apply via the career page. | +| 189 | [Post link](https://news.ycombinator.com/item?id=41130143) | Quatt.io | Senior App Developer | full-time | | hybrid | Amsterdam, Netherlands | React native | Hybrid/ONSITE | Email me directly ( my-hacker-news-username@quatt.io ) for questions or apply via the career page. | +| 190 | [Post link](https://news.ycombinator.com/item?id=41130143) | Quatt.io | DevOps Engineer | full-time | | hybrid | Amsterdam, Netherlands | | Hybrid/ONSITE | Email me directly ( my-hacker-news-username@quatt.io ) for questions or apply via the career page. | +| 191 | [Post link](https://news.ycombinator.com/item?id=41141613) | Trunk | SWE II Platform Engineer | full-time | | hybrid | Unknown city, US | Typescript, React, Redux, Next.js, Node, AWS, CDK, k8s, gRPC | SF Office or Remote US or Remote Canada | Please apply here: https://trunk.io/jobs | +| 192 | [Post link](https://news.ycombinator.com/item?id=41141613) | Trunk | DevRel Engineer | full-time | | hybrid | Unknown city, US | Typescript, React, Redux, Next.js, Node, AWS, CDK, k8s, gRPC | SF Office or Remote US or Remote Canada | Please apply here: https://trunk.io/jobs | +| 193 | [Post link](https://news.ycombinator.com/item?id=41141613) | Trunk | Sr Data Engineer | full-time | | hybrid | Unknown city, US | Typescript, React, Redux, Next.js, Node, AWS, CDK, k8s, gRPC | SF Office or Remote US or Remote Canada | Please apply here: https://trunk.io/jobs | +| 194 | [Post link](https://news.ycombinator.com/item?id=41191445) | Argent | Miami Field Engineer | full-time | 145,000 - 195,000 (USD) | no | Miami, USA | Active Directory, Azure, Datadog, Support, Network, SQL, Security, Splunk | Onsite | More details and option to apply: https://devitjobs.com/jobs/Argent-Miami-Field-Engineers | +| 195 | [Post link](https://news.ycombinator.com/item?id=41136285) | Assembled | Software Engineer | full-time | | hybrid | San Francisco, USA | | San Francisco or New York | https://boards.greenhouse.io/assembled/jobs/4957681004 | +| 196 | [Post link](https://news.ycombinator.com/item?id=41136285) | Assembled | Product Manager | full-time | | hybrid | San Francisco, USA | | San Francisco or New York | https://boards.greenhouse.io/assembled/jobs/5175807004 | +| 197 | [Post link](https://news.ycombinator.com/item?id=41191301) | Datenna | Principal Engineer | full-time | | hybrid | Eindhoven, Netherlands | Python, FastAPI, Django, Go, MongoDB, PostgreSQL | Eindhoven, Netherlands | https://jobs.datenna.com/o/principal-engineer#Full-Stack #Python #FastAPI #Django #Go #MongoDB #PostgreSQL | +| 198 | [Post link](https://news.ycombinator.com/item?id=41135090) | FurtherAI | Founding Software Engineer | full-time | | no | San Francisco, USA | | San Francisco | For more information and to apply - https://www.ycombinator.com/companies/furtherai/jobs/YZZvimn... | +| 199 | [Post link](https://news.ycombinator.com/item?id=41130295) | Juniper | Senior Software Engineer | full-time | None (USD) | hybrid | New York City, USA | | | Email me directly at josh.paul@juniperplatform.com | +| 200 | [Post link](https://news.ycombinator.com/item?id=41131589) | Motive | SRE | unknown | | yes | | Golang, Ruby, Java, AWS, PostgresSql, DynamoDB, Redis, Cassandra, Kafka | | https://gomotive.com/company/careers/#search-jobs | +| 201 | [Post link](https://news.ycombinator.com/item?id=41131589) | Motive | Product Manager | unknown | | yes | | Golang, Ruby, Java, AWS, PostgresSql, DynamoDB, Redis, Cassandra, Kafka | | https://gomotive.com/company/careers/#search-jobs | +| 202 | [Post link](https://news.ycombinator.com/item?id=41131589) | Motive | Backend Engineer | unknown | | yes | | Golang, Ruby, Java, AWS, PostgresSql, DynamoDB, Redis, Cassandra, Kafka | | https://gomotive.com/company/careers/#search-jobs | +| 203 | [Post link](https://news.ycombinator.com/item?id=41131589) | Motive | AI Engineer | unknown | | yes | | Golang, Ruby, Java, AWS, PostgresSql, DynamoDB, Redis, Cassandra, Kafka | | https://gomotive.com/company/careers/#search-jobs | +| 204 | [Post link](https://news.ycombinator.com/item?id=41136553) | KREA | Founding Web Graphics Engineer | unknown | | no | San Francisco, USA | JavaScript, Svelte | | https://www.krea.ai/careers | +| 205 | [Post link](https://news.ycombinator.com/item?id=41131240) | RINSE | Software Engineer | full-time | None (USD) | yes | | Python, Django, React, Typescript | | Email us as jobs@rinse.com, or my first name at rinse.com | +| 206 | [Post link](https://news.ycombinator.com/item?id=41132926) | BioIntelliSense | Senior Software Engineer | full-time | $140-175k (USD) | yes | Unknown city, USA | C#, .NET, WebAssembly, MongoDB, Confluent, GCP, AWS | | Send your CV/resume/LinkedIn profile directly to the technical hiring manager: "hn@biointellisense dot com" | +| 207 | [Post link](https://news.ycombinator.com/item?id=41131256) | Meaningful Gigs | Founding Sr. Backend Engineer | full-time | | yes | | Javascript, Typescript, React, NodeJS, AWS SDK, Serverless, Express, Python, Tensorflow, Pytorch, Scikit-learn | | Contact our Head of Talent directly at Christina(at)meaningfulgigs.com or on LI: https://www.linkedin.com/in/christina-kayler/ | +| 208 | [Post link](https://news.ycombinator.com/item?id=41131256) | Meaningful Gigs | Senior Frontend Engineer | full-time | | yes | | Javascript, Typescript, React, NodeJS, AWS SDK, Serverless, Express, Python, Tensorflow, Pytorch, Scikit-learn | | Contact our Head of Talent directly at Christina(at)meaningfulgigs.com or on LI: https://www.linkedin.com/in/christina-kayler/ | +| 209 | [Post link](https://news.ycombinator.com/item?id=41131256) | Meaningful Gigs | Founding/Sr. ML Engineer | full-time | | yes | | Javascript, Typescript, React, NodeJS, AWS SDK, Serverless, Express, Python, Tensorflow, Pytorch, Scikit-learn | | Contact our Head of Talent directly at Christina(at)meaningfulgigs.com or on LI: https://www.linkedin.com/in/christina-kayler/ | +| 210 | [Post link](https://news.ycombinator.com/item?id=41184259) | Bruinen | Senior Software Engineer | full-time | | no | San Francisco Bay Area, USA | Rust, Sqlite, React | | Email to get in touch: Tevon [at] bruinen [dot] co | +| 211 | [Post link](https://news.ycombinator.com/item?id=41131385) | Freed | Software Engineer (Fullstack) | full-time | None (USD) | yes | Unknown city, USA | React, TypeScript, Node.js | | Apply here: https://www.getfreed.ai/careers?utm_source=Aob6wkJPZQ | +| 212 | [Post link](https://news.ycombinator.com/item?id=41131385) | Freed | Software Engineer (iOS) | full-time | None (USD) | yes | Unknown city, USA | React, TypeScript, Node.js | | Apply here: https://www.getfreed.ai/careers?utm_source=Aob6wkJPZQ | +| 213 | [Post link](https://news.ycombinator.com/item?id=41131765) | ServiceNow | Staff Software Engineer | full-time | | hybrid | San Diego, USA | Ruby, Puppet, Python, Go, PostgreSQL, MySQL, MariaDB, Oracle | | Apply Here: https://careers.servicenow.com/uk/jobs/744000003981989/staff... | +| 214 | [Post link](https://news.ycombinator.com/item?id=41141533) | Sitewire | Full Stack Rails Engineer | full-time | | yes | Unknown city, USA | Ruby on Rails, Hotwire, Tailwind, Postgres, Sidekiq | | Learn more or apply at https://wellfound.com/l/2zf9K9 | +| 215 | [Post link](https://news.ycombinator.com/item?id=41131601) | ROCKSTAR GAMES | .NET SOFTWARE ENGINEER | full-time | | unknown | | C#, ASP.NET, SQL Server | | You can see our other openings here: https://www.rockstargames.com/careers/ | +| 216 | [Post link](https://news.ycombinator.com/item?id=41138812) | Jam.dev | Staff Fullstack Engineer | full-time | | yes | | React, Typescript, Node, GraphQL | | Apply here (we read and respond to every submission): https://jam.dev/careers | +| 217 | [Post link](https://news.ycombinator.com/item?id=41138812) | Jam.dev | AI Product Engineer | full-time | | yes | | React, Typescript, Node, GraphQL | | Apply here (we read and respond to every submission): https://jam.dev/careers | +| 218 | [Post link](https://news.ycombinator.com/item?id=41131584) | Peregrine Technologies | Senior Mobile Engineer | full-time | $130,000 - $215,000 (USD) | hybrid | San Francisco, USA | Python, Javascript, Typescript, Kubernetes, AWS, Elasticsearch, Kafka, Terraform, Pulumi, ArgoCD, React Native | | Senior Mobile Engineer: https://boards.greenhouse.io/peregrinetechnologies/jobs/4437... | +| 219 | [Post link](https://news.ycombinator.com/item?id=41140362) | Volley | Senior Software Engineer | full-time | $160k-260k | no | San Francisco Bay Area, USA | Typescript, Node, React | | Please apply via website, mention you're from HN Who's Hiring | +| 220 | [Post link](https://news.ycombinator.com/item?id=41137449) | RevEng.AI | Systems Software Engineer | full-time | £60k-100k (GBP) | hybrid | London, UK | Linux, Windows, gcc, clang, msvc, dpkg, Conan, vcpkg, Docker | | Please reach out and apply via LinkedIn or send your CV to contact@reveng.ai | +| 221 | [Post link](https://news.ycombinator.com/item?id=41137449) | RevEng.AI | Compiler Engineer | full-time | £80-120k (GBP) | hybrid | London, UK | | | Please reach out and apply via LinkedIn or send your CV to contact@reveng.ai | +| 222 | [Post link](https://news.ycombinator.com/item?id=41130533) | Waitwhile | Frontend Software Engineer | full-time | | hybrid | Stockholm, Sweden | Angular, RxJS | | https://careers.waitwhile.com/jobs/4537202-software-engineer... | +| 223 | [Post link](https://news.ycombinator.com/item?id=41130533) | Waitwhile | Solutions Engineer | full-time | | hybrid | Stockholm, Sweden | | | https://careers.waitwhile.com/jobs/3245527-solutions-enginee... | +| 224 | [Post link](https://news.ycombinator.com/item?id=41133455) | Neon | Software Engineer, Developer Productivity | full-time | | yes | | | | Please email me directly via david at neon dot tech! | +| 225 | [Post link](https://news.ycombinator.com/item?id=41133455) | Neon | Software Engineer, Team Lead (Control Plane) | full-time | | yes | | | | Please email me directly via david at neon dot tech! | +| 226 | [Post link](https://news.ycombinator.com/item?id=41133455) | Neon | Software Engineer, Team Lead (Identity) | full-time | | yes | | | | Please email me directly via david at neon dot tech! | +| 227 | [Post link](https://news.ycombinator.com/item?id=41133455) | Neon | Systems Software Engineer | full-time | | yes | | | | Please email me directly via david at neon dot tech! | +| 228 | [Post link](https://news.ycombinator.com/item?id=41133455) | Neon | Site Reliability Engineer (Azure) | full-time | | yes | | | | Please email me directly via david at neon dot tech! | +| 229 | [Post link](https://news.ycombinator.com/item?id=41133455) | Neon | Fullstack Engineer | full-time | | yes | | | | Please email me directly via david at neon dot tech! | +| 230 | [Post link](https://news.ycombinator.com/item?id=41131311) | Layer | Founding Front End Engineer | full-time | | no | San Francisco, USA | | | If you’re passionate about building software that real small businesses use every day, get in touch with me at daniel [at] layerfi.com | +| 231 | [Post link](https://news.ycombinator.com/item?id=41133348) | Crusoe | Senior/Staff Site Reliability Engineer | full-time | | hybrid | San Francisco, USA | | | View full list of roles and apply here: https://jobs.ashbyhq.com/Crusoe?utm_source=Hackernews Questions? Email: careers@crusoeenergy.com | +| 232 | [Post link](https://news.ycombinator.com/item?id=41133415) | Cumulus | Senior Full Stack Software Engineer | full-time | $115k—$165k (USD) | no | Waltham, USA | React, React Native, AWS | | Reach out to us at careers+hn@cumulusds.com | +| 233 | [Post link](https://news.ycombinator.com/item?id=41131156) | Radar Labs | Software Engineer (backend) | full-time | | no | New York City, USA | Rust, TypeScript, Python, Scala, Terraform | | https://radar.com/jobs#jobs | +| 234 | [Post link](https://news.ycombinator.com/item?id=41131156) | Radar Labs | Software Engineer (full-stack) | full-time | | no | New York City, USA | Rust, TypeScript, Python, Scala, Terraform | | https://radar.com/jobs#jobs | +| 235 | [Post link](https://news.ycombinator.com/item?id=41131156) | Radar Labs | Software Engineer (mobile) | full-time | | no | New York City, USA | Rust, TypeScript, Python, Scala, Terraform | | https://radar.com/jobs#jobs | +| 236 | [Post link](https://news.ycombinator.com/item?id=41131156) | Radar Labs | Software Engineer (security) | full-time | | no | New York City, USA | Rust, TypeScript, Python, Scala, Terraform | | https://radar.com/jobs#jobs | +| 237 | [Post link](https://news.ycombinator.com/item?id=41141496) | Venture Global LNG | Data Scientist | unknown | | no | Arlington, USA | Spark | | https://venturegloballng.com/careers/?gh_jid=7470846002 | +| 238 | [Post link](https://news.ycombinator.com/item?id=41141496) | Venture Global LNG | Data Engineer | unknown | | no | Arlington, USA | Spark | | https://venturegloballng.com/careers/?gh_jid=7470493002 | +| 239 | [Post link](https://news.ycombinator.com/item?id=41141496) | Venture Global LNG | Data Analyst | unknown | | no | Arlington, USA | Spark | | https://venturegloballng.com/careers/?gh_jid=7525311002 | +| 240 | [Post link](https://news.ycombinator.com/item?id=41131026) | Andi (YC W22) | AI Engineer | full-time | | hybrid | San Francisco, USA | Python, AWS | | https://www.ycombinator.com/companies/andi/jobs/okQ7tYQ-ai-e... | +| 241 | [Post link](https://news.ycombinator.com/item?id=41131097) | Datadog | Software Engineer | full-time | | no | Boston, USA | Go, Java, Python, Typescript | | https://dtdg.co/hnwhoshiring | +| 242 | [Post link](https://news.ycombinator.com/item?id=41129876) | ElectronX | Senior-to-Principal Level Software Engineer (fullstack) | full-time | | hybrid | NYC, USA | | | https://jobs.ashbyhq.com/electronx/800e6d57-cfbb-4314-975e-5... | +| 243 | [Post link](https://news.ycombinator.com/item?id=41129876) | ElectronX | Senior-to-Principal Level Software Engineer (backend) | full-time | | hybrid | NYC, USA | | | https://jobs.ashbyhq.com/electronx/800e6d57-cfbb-4314-975e-5... | +| 244 | [Post link](https://news.ycombinator.com/item?id=41133470) | OpenRent | Front-end Developer / Designer | full-time | 75k-100k+ (GBP) | hybrid | London, UK | | | https://www.openrent.co.uk/jobs | +| 245 | [Post link](https://news.ycombinator.com/item?id=41131949) | Spacelift | Senior Software Engineer | full-time | $80k-$120k (USD) | yes | | Go | | https://spacelift.teamtailor.com/jobs/3006934-software-engin... | +| 246 | [Post link](https://news.ycombinator.com/item?id=41130749) | Quotez | Full-Stack Founding Engineer | full-time | | no | Berlin, Germany | Typescript, React, Next.js, Tailwind | | https://quotez.jobs.personio.com/job/1646275 | +| 247 | [Post link](https://news.ycombinator.com/item?id=41131087) | MyAlloy | Mid-level Front-end Developer | full-time | 120k-140k (USD) | yes | | Typescript, React, Next.js, Node, Postgres | (US) or Contract (international, +-3 CST) | lucas [at] myalloy.com - no agencies | +| 248 | [Post link](https://news.ycombinator.com/item?id=41131087) | MyAlloy | Junior Software Engineer in Test | full-time | 80k-110k (USD) | yes | | Typescript, React, Next.js, Node, Postgres | (US) or Contract (international, +-3 CST) | lucas [at] myalloy.com - no agencies | +| 249 | [Post link](https://news.ycombinator.com/item?id=41134583) | Harvard Library Innovation Lab | Software Engineering Manager | full-time | | hybrid | | | (some US states) | https://lil.law.harvard.edu/jobs/#sem | +| 250 | [Post link](https://news.ycombinator.com/item?id=41180530) | ProWritingAid | Browser Extension & SPA TypeScript Developer | contract | | yes | | TypeScript, Angular, Jest, Storybook, Playwright, Lerna, Nx, Webpack, LESS | | https://pwa.notion.site/Browser-Extension-SPA-Developer-Cont... | +| 251 | [Post link](https://news.ycombinator.com/item?id=41180530) | ProWritingAid | C# Full Stack Marketing Developer | contract | | yes | | C#, ASP.net | | https://pwa.notion.site/C-Full-Stack-Marketing-Developer-Con... | +| 252 | [Post link](https://news.ycombinator.com/item?id=41130475) | Coder | OSS Engineer | full-time | | yes | | | | https://jobs.ashbyhq.com/Coder | +| 253 | [Post link](https://news.ycombinator.com/item?id=41130475) | Coder | Lead Designer | full-time | | yes | | | | https://jobs.ashbyhq.com/Coder | +| 254 | [Post link](https://news.ycombinator.com/item?id=41130475) | Coder | Data Engineer | full-time | | no | Austin, USA | | | https://jobs.ashbyhq.com/Coder | +| 255 | [Post link](https://news.ycombinator.com/item?id=41130475) | Coder | Developer Relations | full-time | | yes | USA, Unknown country | | | https://jobs.ashbyhq.com/Coder | +| 256 | [Post link](https://news.ycombinator.com/item?id=41130475) | Coder | Sr. Technical Writer | full-time | | yes | | | | https://jobs.ashbyhq.com/Coder | +| 257 | [Post link](https://news.ycombinator.com/item?id=41130475) | Coder | Sr. Product Manager | full-time | | yes | | | | https://jobs.ashbyhq.com/Coder | +| 258 | [Post link](https://news.ycombinator.com/item?id=41138985) | Humaans (YC W21) | Full Stack Engineer | full-time | | no | London, UK | JavaScript, ReScript, TypeScript, React, Node.js, Postgres, Redis, Kubernetes, GCP | | https://jobs.ashbyhq.com/humaans?utm_source=7nNGnERWLP | +| 259 | [Post link](https://news.ycombinator.com/item?id=41174622) | Fingerprint | Senior Machine Learning Engineer | full-time | | yes | | | (Global) | https://grnh.se/373a6c2c4us | +| 260 | [Post link](https://news.ycombinator.com/item?id=41174622) | Fingerprint | IOS Researcher | full-time | | yes | | | (Global) | https://grnh.se/ceef3d1b4us | +| 261 | [Post link](https://news.ycombinator.com/item?id=41174622) | Fingerprint | Senior R&D Engineer | full-time | | yes | | | (Global) | https://grnh.se/f768a5934us | +| 262 | [Post link](https://news.ycombinator.com/item?id=41134484) | Felt Clinic | Senior Mobile Software Engineer | full-time | $180k-$220k (USD) | yes | San Francisco, USA | React, Ionic, Kotlin, Zoom/WebRTC | (USA) | sid (at) feltclinic.com | +| 263 | [Post link](https://news.ycombinator.com/item?id=41143505) | PDM Automotive | Director of Engineering | full-time | | hybrid | Seattle, USA | GoLang, gRPC, JSONB, Postgres, ReactJS, AWS, OpenAI | | https://tinyurl.com/pdmjob | +| 264 | [Post link](https://news.ycombinator.com/item?id=41130697) | ML6 | Machine Learning Engineer | full-time | | hybrid | | Python, TensorFlow, PyTorch, GCP, AWS, Azure | (Amsterdam, Berlin, Ghent) | https://ml6.eu/join-us | +| 265 | [Post link](https://news.ycombinator.com/item?id=41130697) | ML6 | Data Engineer | full-time | | hybrid | | Python, TensorFlow, PyTorch, GCP, AWS, Azure | (Amsterdam, Berlin, Ghent) | https://ml6.eu/join-us | +| 266 | [Post link](https://news.ycombinator.com/item?id=41130697) | ML6 | Software Engineer | full-time | | hybrid | | Python, TensorFlow, PyTorch, GCP, AWS, Azure | (Amsterdam, Berlin, Ghent) | https://ml6.eu/join-us | +| 267 | [Post link](https://news.ycombinator.com/item?id=41131525) | Kensho Technologies | Senior Backend Software Engineer | full-time | | hybrid | | | (Cambridge/Boston/NYC) | https://www.kensho.com/careers | +| 268 | [Post link](https://news.ycombinator.com/item?id=41135596) | Upduo | Senior Full-Stack Engineer | full-time | | yes | | Flutter, Node, Typescript, Rust, GraphQL, Prisma | (Remote or Bay Area) | careers@upduo.com | +| 269 | [Post link](https://news.ycombinator.com/item?id=41130013) | Happy Scribe | Engineer | full-time | | hybrid | Barcelona, Spain | | | https://bit.ly/3LM4XKf | +| 270 | [Post link](https://news.ycombinator.com/item?id=41130013) | Happy Scribe | Designer | full-time | | hybrid | Barcelona, Spain | | | https://bit.ly/3LM4XKf | +| 271 | [Post link](https://news.ycombinator.com/item?id=41130013) | Happy Scribe | ML Engineer | full-time | | hybrid | Barcelona, Spain | | | https://bit.ly/3LM4XKf | +| 272 | [Post link](https://news.ycombinator.com/item?id=41130278) | Enter | Software Engineer - Java Backend | full-time | $130k - $180k (USD) | yes | | | | https://jobs.lever.co/enter-rcm-llc/faa8d556-e3c1-42bf-a67c-... | +| 273 | [Post link](https://news.ycombinator.com/item?id=41130278) | Enter | Marketing Lead | full-time | $110k - $130k (USD) | yes | | | | https://jobs.lever.co/enter-rcm-llc/cef7ba4d-9c79-40c9-b154-... | +| 274 | [Post link](https://news.ycombinator.com/item?id=41129899) | Fauna Robotics | Software Engineer | full-time | | no | NYC, USA | Python, C++ | | recruiting@faunarobotics.com | +| 275 | [Post link](https://news.ycombinator.com/item?id=41137286) | Automata | Principal Engineer | full-time | £120k-£140k + bonus + equity (GBP) | hybrid | London, UK | | | https://careers.automata.tech/jobs/3203114-principal-softwar... | +| 276 | [Post link](https://news.ycombinator.com/item?id=41137286) | Automata | Senior Software Engineer | full-time | £70k-£90k + bonus (GBP) | hybrid | London, UK | | | https://careers.automata.tech/jobs/4723923-senior-software-e... | +| 277 | [Post link](https://news.ycombinator.com/item?id=41170553) | Weaviate | Senior Fullstack Engineer | full-time | | yes | | Go | Remote between UTC-5 and UTC+2 | https://careers.weaviate.io/jobs/4608044-senior-full-stack-e... | +| 278 | [Post link](https://news.ycombinator.com/item?id=41170553) | Weaviate | Software Engineer, Client Libraries | full-time | | yes | | Java | Remote between UTC-5 and UTC+2 | https://careers.weaviate.io/jobs/4799540-software-engineer-c... | +| 279 | [Post link](https://news.ycombinator.com/item?id=41170553) | Weaviate | Product Marketing Manager | full-time | | yes | | | Remote between UTC-5 and UTC+2 | https://careers.weaviate.io/jobs/4601378-product-marketing-m... | +| 280 | [Post link](https://news.ycombinator.com/item?id=41170553) | Weaviate | QA Engineer | full-time | | yes | | | Remote between UTC-5 and UTC+2 | https://careers.weaviate.io/jobs/4602648-qa-engineer | +| 281 | [Post link](https://news.ycombinator.com/item?id=41159854) | Nomic Foundation | Engineering Manager | full-time | | yes | | | Remote in UTC+2 to UTC-4 timezones | https://nomic.foundation/jobs | +| 282 | [Post link](https://news.ycombinator.com/item?id=41139043) | Compass Regulatory | Software Engineer (full-stack) | full-time | $130k-190k (USD) | no | SF Bay Area, USA | Django, HTMX, Alpine.js, Tailwind, AWS, Terraform, Docker, Postgres | | graham@compassregulatory.com | +| 283 | [Post link](https://news.ycombinator.com/item?id=41131884) | HVN | Software Engineer | full-time | | yes | | Python | | https://stayhvn.com/careers | +| 284 | [Post link](https://news.ycombinator.com/item?id=41135181) | Resemble AI | Full Stack Engineer | full-time | | no | San Francisco Bay Area, USA | Next.js, Rails | | zohaib [at] resemble.ai | +| 285 | [Post link](https://news.ycombinator.com/item?id=41131089) | Recharge | Senior Software Engineer (Core Commerce) | full-time | | yes | | Python, Flask, MySQL, Redis, Elasticsearch, React, Vue, GCP, Kubernetes | REMOTE (US Timezones) | https://grnh.se/f265a47c2us | +| 286 | [Post link](https://news.ycombinator.com/item?id=41132344) | Rollbar | Senior Software Engineer, Full-stack | full-time | | yes | Budapest, Hungary | Python, Node.js, TypeScript, React, MySQL, Kafka, ClickHouse, Elasticsearch, Redis, Kubernetes, Terraform, Google Cloud Platform | Remote Europe, Budapest | https://rollbar.com/careers/ | +| 287 | [Post link](https://news.ycombinator.com/item?id=41131047) | HENNGE | Senior Front end Developer (React) | full-time | | no | Tokyo, Japan | | ONSITE | https://recruit.hennge.com/en/mid-career/ | +| 288 | [Post link](https://news.ycombinator.com/item?id=41131047) | HENNGE | Senior Front end Developer (Vue) | full-time | | no | Tokyo, Japan | | ONSITE | https://recruit.hennge.com/en/mid-career/ | +| 289 | [Post link](https://news.ycombinator.com/item?id=41131047) | HENNGE | Senior Software Developer (Go) | full-time | | no | Tokyo, Japan | | ONSITE | https://recruit.hennge.com/en/mid-career/ | +| 290 | [Post link](https://news.ycombinator.com/item?id=41131047) | HENNGE | Senior Software Engineer (Python) | full-time | | no | Tokyo, Japan | | ONSITE | https://recruit.hennge.com/en/mid-career/ | +| 291 | [Post link](https://news.ycombinator.com/item?id=41160970) | Two Six Technologies | Reverse Engineer/Vulnerability Researcher | full-time | | no | Arlington, VA, USA | | ONSITE | https://job-boards.greenhouse.io/twosixtechnologies/jobs/503...... | +| 292 | [Post link](https://news.ycombinator.com/item?id=41133759) | Vannevar Labs | Engineer | full-time | | yes | | | REMOTE-FIRST | https://boards.greenhouse.io/vannevarlabs | +| 293 | [Post link](https://news.ycombinator.com/item?id=41137557) | Lightdash | Senior Full Stack Engineer | full-time | £60K – £110K + options (GBP) | yes | | Typescript, React, Node, SQL | REMOTE (Europe-based) | https://jobs.ashbyhq.com/lightdash/9efa292a-cc34-4388-90a2-2.... | +| 294 | [Post link](https://news.ycombinator.com/item?id=41139459) | Ataccama | Staff/Principal Software Developer In Test | full-time | | yes | | | Hybrid / Remote in EU+UK | https://jobs.ataccama.com/bb63f8a7-d0ff-47f5-b5ba-9e63272b74... | +| 295 | [Post link](https://news.ycombinator.com/item?id=41139459) | Ataccama | Platform Engineer (generalist) | full-time | | yes | | | Hybrid / Remote in EU+UK | https://jobs.ataccama.com/9820324c-35fc-46a5-985a-64d1461c40... | +| 296 | [Post link](https://news.ycombinator.com/item?id=41139459) | Ataccama | Platform Engineer (building blocks) | full-time | | yes | | | Hybrid / Remote in EU+UK | https://jobs.ataccama.com/a1109fcd-79c2-4bd5-9d42-76e01ab0a5... | +| 297 | [Post link](https://news.ycombinator.com/item?id=41139459) | Ataccama | Engineering Manager (Platform team) | full-time | | yes | | | Hybrid / Remote in EU+UK | https://jobs.ataccama.com/793d4a24-2c5c-42fe-96b0-67c3cb30ce... | +| 298 | [Post link](https://news.ycombinator.com/item?id=41140548) | ABN AMRO | AI Developer | full-time | | hybrid | Amsterdam, Netherlands | Python | | Mention HN when reaching out. My email is in my profile. | +| 299 | [Post link](https://news.ycombinator.com/item?id=41137278) | Quadrature | Software Developer | full-time | | no | London or New York, UK or USA | | Onsite | lessya@quadrature.ai | +| 300 | [Post link](https://news.ycombinator.com/item?id=41133205) | Adora | Senior ML Engineer | full-time | | no | Seattle, WA, USA | Python | ONSITE | https://careers.adora-ai.com/ | +| 301 | [Post link](https://news.ycombinator.com/item?id=41133205) | Adora | Full Stack Engineer | full-time | | no | Seattle, WA, USA | TypeScript, React, AWS | ONSITE | https://careers.adora-ai.com/ | +| 302 | [Post link](https://news.ycombinator.com/item?id=41132016) | Plotly | Senior Software Developer in Test | full-time | | yes | | | Remote in Canada | https://boards.greenhouse.io/plotly | +| 303 | [Post link](https://news.ycombinator.com/item?id=41132016) | Plotly | Staff Software Engineer, Full Stack | full-time | | yes | | | Remote in United States | https://boards.greenhouse.io/plotly | +| 304 | [Post link](https://news.ycombinator.com/item?id=41132016) | Plotly | Customer Success Engineer, Infrastructure | full-time | | yes | | | Remote in United Kingdom | https://boards.greenhouse.io/plotly | +| 305 | [Post link](https://news.ycombinator.com/item?id=41132015) | Veridise | Lead Frontend Software Engineer | full-time | | yes | | TypeScript, React, Docker, Kubernetes, AWS | Remote (Any timezone) | https://veridise.com/careers-frontend-software-engineer/ | +| 306 | [Post link](https://news.ycombinator.com/item?id=41131420) | Seam | Content Marketing | full-time | | no | San Francisco, USA | | | Apply here: https://www.ycombinator.com/companies/seam/jobs/KP0PeRj-cont... | +| 307 | [Post link](https://news.ycombinator.com/item?id=41132804) | Matterworks.ai | Principal Software Engineer | full-time | | hybrid | Boston/Somerville, USA | | | https://jobs.lever.co/matterworks/94bec32b-7dfc-4307-9338-ce... | +| 308 | [Post link](https://news.ycombinator.com/item?id=41132804) | Matterworks.ai | Data Engineering | full-time | | hybrid | Boston/Somerville, USA | | | https://jobs.lever.co/matterworks/94bec32b-7dfc-4307-9338-ce... | +| 309 | [Post link](https://news.ycombinator.com/item?id=41141835) | Terminal | Founding Engineer | full-time | | no | Toronto, Canada | | | https://www.ycombinator.com/companies/terminal/jobs | +| 310 | [Post link](https://news.ycombinator.com/item?id=41141835) | Terminal | Founding Data Scientist | full-time | | no | Toronto, Canada | | | https://www.ycombinator.com/companies/terminal/jobs | +| 311 | [Post link](https://news.ycombinator.com/item?id=41131226) | Val Town | Founding DevRel | full-time | $150k & 1-2% equity (USD) | no | Brooklyn, USA | | | https://val-town.notion.site/DevRel-at-Val-Town-117abe970694... | +| 312 | [Post link](https://news.ycombinator.com/item?id=41132084) | Beacon AI | Senior I | full-time | | hybrid | SF Bay Area, USA | | | https://beaconai.co/careers | +| 313 | [Post link](https://news.ycombinator.com/item?id=41132084) | Beacon AI | Senior II | full-time | | hybrid | SF Bay Area, USA | | | https://beaconai.co/careers | +| 314 | [Post link](https://news.ycombinator.com/item?id=41132084) | Beacon AI | Staff | full-time | | hybrid | SF Bay Area, USA | | | https://beaconai.co/careers | +| 315 | [Post link](https://news.ycombinator.com/item?id=41132084) | Beacon AI | Tech Lead | full-time | | hybrid | SF Bay Area, USA | | | https://beaconai.co/careers | +| 316 | [Post link](https://news.ycombinator.com/item?id=41132084) | Beacon AI | Engineering Manager | full-time | | hybrid | SF Bay Area, USA | | | https://beaconai.co/careers | +| 317 | [Post link](https://news.ycombinator.com/item?id=41130597) | Diabolocom | Software Engineer (Golang) | full-time | | yes | France, France | Golang | | anna.miroshnichenko@diabolocom.com with "HN" in subject line. | +| 318 | [Post link](https://news.ycombinator.com/item?id=41130597) | Diabolocom | Java Software Engineer | full-time | | yes | France, France | Java | | anna.miroshnichenko@diabolocom.com with "HN" in subject line. | +| 319 | [Post link](https://news.ycombinator.com/item?id=41132672) | OwnerRez | Senior Full Stack Engineer | full-time | | yes | Remote, USA | .NET, MySQL, Redis, DynamoDB | | https://www.ownerreservations.com/senior-software-developer | +| 320 | [Post link](https://news.ycombinator.com/item?id=41133920) | OneSignal | Senior Software Engineer | full-time | | yes | California, New York, Pennsylvania, Texas, Utah, Washington, USA | Go, Rust, Ruby on Rails, Kafka, Postgres, Redis, InfluxDB, Typescript, React | | https://onesignal.com/careers | +| 321 | [Post link](https://news.ycombinator.com/item?id=41133920) | OneSignal | Engineering Manager | full-time | | yes | California, New York, Pennsylvania, Texas, Utah, Washington, USA | Go, Rust, Ruby on Rails, Kafka, Postgres, Redis, InfluxDB, Typescript, React | | https://onesignal.com/careers | +| 322 | [Post link](https://news.ycombinator.com/item?id=41142326) | Standard | Staff SRE (Site Reliability Engineer) | full-time | $190K—$225K (USD) | yes | Remote - US, USA | | | https://boards.greenhouse.io/standardai/jobs/4410563005 | +| 323 | [Post link](https://news.ycombinator.com/item?id=41132161) | Data Research Group | Senior .NET Full Stack Engineer | full-time | | yes | Remote (USA), USA | C#, ASP.NET MVC, Microsoft SQL Server, HTML, CSS, JavaScript | | https://www.datarg.com/careers.html | +| 324 | [Post link](https://news.ycombinator.com/item?id=41159505) | Bitonic | App developer (Flutter) | full-time | | no | Amsterdam, Netherlands | Flutter | | https://bitonic.homerun.co/app-developer-flutter/en | +| 325 | [Post link](https://news.ycombinator.com/item?id=41131845) | Comulate | Senior Engineer | full-time | | no | San Francisco, CA, USA | TypeScript, Postgres, React, GraphQL, Next.js | | https://comulate.com/careers | +| 326 | [Post link](https://news.ycombinator.com/item?id=41134068) | Enclave Markets | Senior Software Engineer | full-time | | yes | Remote (Global), USA | Go, Python | | https://boards.greenhouse.io/avalabsecosystem/jobs/523135600... | +| 327 | [Post link](https://news.ycombinator.com/item?id=41134068) | Enclave Markets | Senior Trading Systems Software Engineer | full-time | | yes | Remote (Global), USA | Go, Python | | https://boards.greenhouse.io/avalabsecosystem/jobs/523142100... | +| 328 | [Post link](https://news.ycombinator.com/item?id=41130846) | Better Stack | Full-stack Engineer | full-time | | yes | EU or remote in UTC ± 3h, unknown | | | https://betterstack.com/careers/fullstack-engineer | +| 329 | [Post link](https://news.ycombinator.com/item?id=41130458) | Beautiful.ai | Lead Software Engineer | full-time | $175k - $250k Base Salary + Equity (USD) | yes | Fully Remote, USA/Canada | | | https://boards.greenhouse.io/beautifulai/jobs/4231312007 | +| 330 | [Post link](https://news.ycombinator.com/item?id=41130458) | Beautiful.ai | VP of Marketing | full-time | $225k - $300k Base Salary + Equity (USD) | yes | Fully Remote, USA/Canada | | | https://boards.greenhouse.io/beautifulai/jobs/4323511007 | +| 331 | [Post link](https://news.ycombinator.com/item?id=41131045) | Wasmer | Frontend Software Engineer | full-time | | hybrid | Hybrid (EU Timezones + Madrid Office), Spain | JS, TS, React, Next.js, Tailwind, GraphQL | | https://www.workatastartup.com/jobs/45795 | +| 332 | [Post link](https://news.ycombinator.com/item?id=41138990) | Slice | Principal Engineer | full-time | | hybrid | Hybrid/Remote, unknown | | | https://www.linkedin.com/jobs/view/3986398434 | +| 333 | [Post link](https://news.ycombinator.com/item?id=41131795) | Tangram | Rust/Linux Programmer | full-time | | yes | Remote (USA), USA | Rust, Linux | | jobs@tangram.dev | +| 334 | [Post link](https://news.ycombinator.com/item?id=41135664) | Daydream | Senior Backend Engineer | full-time | | yes | Remote (US) or Kirkland/LA/NYC, USA | | | https://jobs.ashbyhq.com/dahlia-labs | +| 335 | [Post link](https://news.ycombinator.com/item?id=41135664) | Daydream | Staff Software Engineer – Search, Ranking, & Recommendations | full-time | | yes | Remote (US) or Kirkland/LA/NYC, USA | | | https://jobs.ashbyhq.com/dahlia-labs | +| 336 | [Post link](https://news.ycombinator.com/item?id=41135664) | Daydream | Staff Data Engineer | full-time | | yes | Remote (US) or Kirkland/LA/NYC, USA | | | https://jobs.ashbyhq.com/dahlia-labs | +| 337 | [Post link](https://news.ycombinator.com/item?id=41138485) | SpotHero | Backend Engineer (Python/Django/Postgres) | full-time | | hybrid | Chicago or Toronto, USA/Canada | Python, Django, Postgres | | https://spothero.com/careers | +| 338 | [Post link](https://news.ycombinator.com/item?id=41138485) | SpotHero | Senior Machine Learning Engineer | full-time | | hybrid | Chicago or Toronto, USA/Canada | | | https://spothero.com/careers | +| 339 | [Post link](https://news.ycombinator.com/item?id=41138996) | Cosuno | Senior Full Stack Developer | full-time | | yes | | TypeScript, React, Node | | Apply at https://www.cosuno.com/en/company#careers | +| 340 | [Post link](https://news.ycombinator.com/item?id=41138996) | Cosuno | Full Stack Developer | full-time | | yes | | TypeScript, React, Node | | Apply at https://www.cosuno.com/en/company#careers | +| 341 | [Post link](https://news.ycombinator.com/item?id=41135217) | Ford Motor Company | Senior Site Reliability Engineer | full-time | | yes | Unknown city, USA | | | https://efds.fa.em5.oraclecloud.com/hcmUI/CandidateExperienc... | +| 342 | [Post link](https://news.ycombinator.com/item?id=41129928) | Aha! | Rails Engineer | full-time | | yes | | Rails, React | | Apply at https://www.aha.io | +| 343 | [Post link](https://news.ycombinator.com/item?id=41129928) | Aha! | React Engineer | full-time | | yes | | Rails, React | | Apply at https://www.aha.io | +| 344 | [Post link](https://news.ycombinator.com/item?id=41143143) | TestDriver.ai | Growth | full-time | | yes | Austin, USA | | | Please email: ian[at]dashcam.io | +| 345 | [Post link](https://news.ycombinator.com/item?id=41131258) | Scholarly | Software Engineer | full-time | $150k - $200k (USD) | no | Seattle, USA | Ruby on Rails | | Please apply using the following link: https://scholarly.breezy.hr/p/a8959b02b8bd-software-engineer | +| 346 | [Post link](https://news.ycombinator.com/item?id=41187012) | Dimensional Analytics | Data Scientist | unknown | | no | Chantilly, USA | | | Email our owner at jbittner@dimensional-analytics.com | +| 347 | [Post link](https://news.ycombinator.com/item?id=41187012) | Dimensional Analytics | Data Engineer | unknown | | no | Chantilly, USA | | | Email our owner at jbittner@dimensional-analytics.com | +| 348 | [Post link](https://news.ycombinator.com/item?id=41187012) | Dimensional Analytics | DevOps Engineer | unknown | | no | Chantilly, USA | | | Email our owner at jbittner@dimensional-analytics.com | +| 349 | [Post link](https://news.ycombinator.com/item?id=41141000) | Toolhouse | Part-Time Developer Advocate | part-time | | yes | San Francisco, USA | | | Please email hello@toolhouse.ai subject DevRel - HN | +| 350 | [Post link](https://news.ycombinator.com/item?id=41138631) | Metaschool | Engineering Lead | full-time | $200K - $250K + Equity (USD) | hybrid | Unknown city, USA | | | Apply via this link: https://www.linkedin.com/jobs/view/3984847435/ | +| 351 | [Post link](https://news.ycombinator.com/item?id=41139183) | Orbit | Full Stack Engineer | full-time | | yes | | | | Read more & apply --> https://bit.ly/3JCNVh2 | +| 352 | [Post link](https://news.ycombinator.com/item?id=41131872) | Page Vault | Senior Software Engineer | full-time | $90k - $160k (USD) | yes | Unknown city, USA | React.js, Node.js, MySql, AWS | | Please apply using the following link: https://www.notion.so/page-vault/Join-Our-Team-90d59fb2b9ca4... | +| 353 | [Post link](https://news.ycombinator.com/item?id=41131940) | Comity Inc. | Machine Learning Engineering Manager | full-time | | hybrid | Unknown city, USA | | | Read the JD and apply here: https://jobs.ashbyhq.com/comity | +| 354 | [Post link](https://news.ycombinator.com/item?id=41131940) | Comity Inc. | Power System Applications Engineer | full-time | | hybrid | Unknown city, USA | | | Read the JD and apply here: https://jobs.ashbyhq.com/comity | +| 355 | [Post link](https://news.ycombinator.com/item?id=41131940) | Comity Inc. | Quantitative Researcher | full-time | | hybrid | Unknown city, USA | | | Read the JD and apply here: https://jobs.ashbyhq.com/comity | +| 356 | [Post link](https://news.ycombinator.com/item?id=41160329) | Skydio | Cloud Engineer | full-time | | hybrid | San Mateo, USA | Typescript, Python, C++ | | https://www.skydio.com/careers | +| 357 | [Post link](https://news.ycombinator.com/item?id=41160329) | Skydio | Web Engineer | full-time | | hybrid | San Mateo, USA | Typescript, Python, C++ | | https://www.skydio.com/careers | +| 358 | [Post link](https://news.ycombinator.com/item?id=41160329) | Skydio | Robotics Engineer | full-time | | hybrid | San Mateo, USA | Typescript, Python, C++ | | https://www.skydio.com/careers | +| 359 | [Post link](https://news.ycombinator.com/item?id=41138793) | Zetier | Reverse Engineer | full-time | | no | Arlington, USA | | | | +| 360 | [Post link](https://news.ycombinator.com/item?id=41138793) | Zetier | CNO Developer | full-time | | no | Arlington, USA | | | | +| 361 | [Post link](https://news.ycombinator.com/item?id=41138793) | Zetier | Hacker | full-time | | no | Arlington, USA | | | | +| 362 | [Post link](https://news.ycombinator.com/item?id=41137267) | Openfort | Backend Engineer | full-time | | no | Barcelona, Spain | typescript, Go | | Read more: https://jobs.openfort.xyz | +| 363 | [Post link](https://news.ycombinator.com/item?id=41137267) | Openfort | Dev-Ops Engineer | full-time | | no | Barcelona, Spain | typescript, Go | | Read more: https://jobs.openfort.xyz | +| 364 | [Post link](https://news.ycombinator.com/item?id=41137155) | Glass Health | Founding Senior Software Engineer (full-stack) | full-time | $130k-$210k + equity (USD) | yes | Unknown city, USA | Django, Typescript, React, Redux, Postgres | flexible | Apply by sending a resume/linkedin to will plus hnhiring at glass dot health, or feel free to apply on Lever and mention HN! https://jobs.lever.co/glass-health-inc/ | +| 365 | [Post link](https://news.ycombinator.com/item?id=41137019) | Vectara | Field Engineer | full-time | | yes | | | | All positions are at https://vectara.com/careers/#job-listings | +| 366 | [Post link](https://news.ycombinator.com/item?id=41137019) | Vectara | Front-end Engineer | full-time | | yes | | | | All positions are at https://vectara.com/careers/#job-listings | +| 367 | [Post link](https://news.ycombinator.com/item?id=41137019) | Vectara | Platform Engineer | full-time | | yes | | | | All positions are at https://vectara.com/careers/#job-listings | +| 368 | [Post link](https://news.ycombinator.com/item?id=41137019) | Vectara | Product Manager | full-time | | yes | | | | All positions are at https://vectara.com/careers/#job-listings | +| 369 | [Post link](https://news.ycombinator.com/item?id=41142514) | Pylon | Product Designer | full-time | | no | Menlo Park, USA | | | [0]: https://jobs.ashbyhq.com/pylon/2763f2cc-487b-4232-8ffe-b5cd7... | +| 370 | [Post link](https://news.ycombinator.com/item?id=41142514) | Pylon | Developer Experience Engineer | full-time | | no | Menlo Park, USA | | | [1]: https://jobs.ashbyhq.com/pylon/2edff632-10c6-4a08-9da6-85bcc... | +| 371 | [Post link](https://news.ycombinator.com/item?id=41132831) | Spill | Fullstack Engineer | full-time | £65-80k (GBP) | no | London, UK | | | email calvin[at]spill[dot]chat for a more thorough job spec | +| 372 | [Post link](https://news.ycombinator.com/item?id=41139402) | Bolna | Software Engineer | full-time | | yes | San Francisco, USA | Python | | Please email your CV or contact us to learn more: "founders [AT] bolna [DOT] dev" | +| 373 | [Post link](https://news.ycombinator.com/item?id=41134413) | Amazon Grocery Tech | Software Developer | full-time | | hybrid | Brisbane, Australia | | | More here: https://www.amazon.jobs/en/jobs/2676748/2024-software-develo... | +| 374 | [Post link](https://news.ycombinator.com/item?id=41129902) | Zanders | Software engineer | full-time | | hybrid | Amsterdam, NL | Python, FastAPI, Pydantic, SQLAlchemy | | Send me an email: c.felten [at] zandersgroup.nl or check the posting here: https://career.zanders.eu/job/software-engineer/524 | +| 375 | [Post link](https://news.ycombinator.com/item?id=41129902) | Zanders | Software engineer | full-time | | hybrid | Amsterdam, NL | Python, FastAPI, Pydantic, SQLAlchemy | | Send me an email: c.felten [at] zandersgroup.nl or check the posting here: https://career.zanders.eu/job/software-engineer/524 | +| 376 | [Post link](https://news.ycombinator.com/item?id=41140023) | Blackshark AI | Senior Software Engineer | full-time | | hybrid | Austria or Remote EU, Unknown country | Python, Fast API, PostgreSQL, Docker, RabbitMQ, Kubernetes, Azure | | https://blackshark.sprad.io/etorCk | +| 377 | [Post link](https://news.ycombinator.com/item?id=41140023) | Blackshark AI | Senior Machine Learning Engineer | full-time | | hybrid | Austria or Remote EU, Unknown country | Python, Fast API, PostgreSQL, Docker, RabbitMQ, Kubernetes, Azure | | https://blackshark.sprad.io/Z55BY | +| 378 | [Post link](https://news.ycombinator.com/item?id=41204223) | Solventum (formerly 3M Health Care) | Senior Software Engineer (Backend) | full-time | $160-$195k (USD) | hybrid | St. Paul, MN or Pittsburgh, PA, US | C#, Java, Postgres, AWS, React, React Native, TypeScript | | https://healthcare.wd1.myworkdayjobs.com/en-US/Search/job/Se... | +| 379 | [Post link](https://news.ycombinator.com/item?id=41204223) | Solventum (formerly 3M Health Care) | Software Engineer (Backend) | full-time | $95-$117k (USD) | hybrid | St. Paul, MN or Pittsburgh, PA, US | C#, Java, Postgres, AWS, React, React Native, TypeScript | | https://healthcare.wd1.myworkdayjobs.com/en-US/Search/job/So... | +| 380 | [Post link](https://news.ycombinator.com/item?id=41204223) | Solventum (formerly 3M Health Care) | Senior Software Engineer (Frontend) | full-time | $160-$195k (USD) | hybrid | St. Paul, MN or Pittsburgh, PA, US | C#, Java, Postgres, AWS, React, React Native, TypeScript | | https://healthcare.wd1.myworkdayjobs.com/en-US/Search/job/Se... | +| 381 | [Post link](https://news.ycombinator.com/item?id=41204223) | Solventum (formerly 3M Health Care) | Software Engineer (Frontend) | full-time | $95-$117k (USD) | hybrid | St. Paul, MN or Pittsburgh, PA, US | C#, Java, Postgres, AWS, React, React Native, TypeScript | | https://healthcare.wd1.myworkdayjobs.com/en-US/Search/job/So... | +| 382 | [Post link](https://news.ycombinator.com/item?id=41132099) | Streak | Staff UI Engineer | full-time | | yes | Unknown city, Remote Only | | | https://www.streak.com/careers/staff-ui-engineer | +| 383 | [Post link](https://news.ycombinator.com/item?id=41131783) | Topologic | Senior Frontend Engineer | full-time | | hybrid | Boston, MA, US, US | TypeScript, React, Redux, WebGL 2, Rust | | https://jobs.ashbyhq.com/topologic | +| 384 | [Post link](https://news.ycombinator.com/item?id=41131783) | Topologic | Staff Frontend Engineer | full-time | | hybrid | Boston, MA, US, US | TypeScript, React, Redux, WebGL 2, Rust | | https://jobs.ashbyhq.com/topologic | +| 385 | [Post link](https://news.ycombinator.com/item?id=41131783) | Topologic | Principal Frontend Engineer | full-time | | hybrid | Boston, MA, US, US | TypeScript, React, Redux, WebGL 2, Rust | | https://jobs.ashbyhq.com/topologic | +| 386 | [Post link](https://news.ycombinator.com/item?id=41129878) | SmarterDx | Engineering Manager | full-time | $150-230k+ | yes | Remote (US only), US | | | https://smarterdx.com/careers | +| 387 | [Post link](https://news.ycombinator.com/item?id=41129878) | SmarterDx | Staff Software Engineer | full-time | $150-230k+ | yes | Remote (US only), US | | | https://smarterdx.com/careers | +| 388 | [Post link](https://news.ycombinator.com/item?id=41129878) | SmarterDx | Senior Software Engineer | full-time | $150-230k+ | yes | Remote (US only), US | | | https://smarterdx.com/careers | +| 389 | [Post link](https://news.ycombinator.com/item?id=41129878) | SmarterDx | Senior Data Engineer | full-time | $150-230k+ | yes | Remote (US only), US | | | https://smarterdx.com/careers | +| 390 | [Post link](https://news.ycombinator.com/item?id=41129878) | SmarterDx | Machine Learning Research Scientist | full-time | $150-230k+ | yes | Remote (US only), US | | | https://smarterdx.com/careers | +| 391 | [Post link](https://news.ycombinator.com/item?id=41129878) | SmarterDx | Technical Program Manager | full-time | $150-230k+ | yes | Remote (US only), US | | | https://smarterdx.com/careers | +| 392 | [Post link](https://news.ycombinator.com/item?id=41129878) | SmarterDx | Sales | full-time | $150-230k+ | yes | Remote (US only), US | | | https://smarterdx.com/careers | +| 393 | [Post link](https://news.ycombinator.com/item?id=41134700) | Bodyport (YC S15) | Senior Software Engineer | full-time | | hybrid | San Francisco, US | | | https://jobs.lever.co/bodyport | +| 394 | [Post link](https://news.ycombinator.com/item?id=41158146) | modash.io | Software Engineer | full-time | | yes | Remote, Europe | | | https://www.modash.io/blog/engineering-interviews-at-modash | +| 395 | [Post link](https://news.ycombinator.com/item?id=41135716) | Source | Protocol Engineer | full-time | | yes | USA/Canada/EU, Unknown country | | | https://careers.source.network | +| 396 | [Post link](https://news.ycombinator.com/item?id=41132589) | 3Play Media | Staff API Engineer | full-time | $160-$180k (USD) | hybrid | Boston, MA, US | Rails, Typescript, Python | 1-day-in-office | https://www.3playmedia.com/company/jobs-post/?gh_jid=6076237... | +| 397 | [Post link](https://news.ycombinator.com/item?id=41131160) | Smarkets | Staff Engineer, Full Stack | full-time | | hybrid | London, UK | | | https://smarkets.com/job/6040356/ | +| 398 | [Post link](https://news.ycombinator.com/item?id=41131160) | Smarkets | Senior Software Engineer, Backend Lead | full-time | | hybrid | London, UK | | | https://smarkets.com/job/5997705/ | +| 399 | [Post link](https://news.ycombinator.com/item?id=41131160) | Smarkets | Senior Software Engineer, Data Lead | full-time | | hybrid | London, UK | | | https://smarkets.com/job/5872898/ | +| 400 | [Post link](https://news.ycombinator.com/item?id=41131160) | Smarkets | Software Engineer - Backend | full-time | | hybrid | London, UK | | | https://smarkets.com/job/5945885/ | +| 401 | [Post link](https://news.ycombinator.com/item?id=41131160) | Smarkets | Software Engineer - Fullstack | full-time | | hybrid | London, UK | | | https://smarkets.com/job/5941479/ | +| 402 | [Post link](https://news.ycombinator.com/item?id=41131160) | Smarkets | Cloud Infrastructure Engineer | full-time | | yes | Remote UK, UK | | | https://smarkets.com/job/5798683/ | +| 403 | [Post link](https://news.ycombinator.com/item?id=41131160) | Smarkets | Senior DevOps Engineer | full-time | | hybrid | London, UK | | | https://smarkets.com/job/5397742/ | +| 404 | [Post link](https://news.ycombinator.com/item?id=41131943) | Cogram | Senior Frontend Engineer | full-time | | hybrid | Remote (CET ± 3 hours) or Onsite (Berlin), Germany | JavaScript, TypeScript, Python | | https://cogram.com | +| 405 | [Post link](https://news.ycombinator.com/item?id=41131943) | Cogram | Senior Backend Engineer | full-time | | hybrid | Remote (CET ± 3 hours) or Onsite (Berlin), Germany | JavaScript, TypeScript, Python | | https://cogram.com | +| 406 | [Post link](https://news.ycombinator.com/item?id=41131943) | Cogram | Senior Full-Stack Engineer | full-time | | hybrid | Remote (CET ± 3 hours) or Onsite (Berlin), Germany | JavaScript, TypeScript, Python | | https://cogram.com | +| 407 | [Post link](https://news.ycombinator.com/item?id=41134151) | One Huddle | Software Engineer | full-time | | yes | Remote (US), US | Elixir | | email Claire at onehuddle dot com | +| 408 | [Post link](https://news.ycombinator.com/item?id=41134151) | One Huddle | Part-Time Software Engineer | part-time | | yes | Remote (US), US | Elixir | | email Claire at onehuddle dot com | +| 409 | [Post link](https://news.ycombinator.com/item?id=41131549) | Hashboard | Senior Full-Stack Engineer | full-time | | no | New York (NYC), US | | | https://jobs.ashbyhq.com/hashboard | +| 410 | [Post link](https://news.ycombinator.com/item?id=41131549) | Hashboard | Lead Frontend Engineer | full-time | | no | New York (NYC), US | | | https://jobs.ashbyhq.com/hashboard | +| 411 | [Post link](https://news.ycombinator.com/item?id=41131549) | Hashboard | Product Evangelist | full-time | | no | New York (NYC), US | | | https://jobs.ashbyhq.com/hashboard | +| 412 | [Post link](https://news.ycombinator.com/item?id=41129825) | Ameba | Multiple Roles | full-time | £100k + Equity (GBP) | no | London, UK | | | https://amebaai.notion.site/Ameba-Careers-80d79ba6917b4d2aab... | +| 413 | [Post link](https://news.ycombinator.com/item?id=41131748) | Charge Robotics | Senior Mechanical Engineer | full-time | | no | SF Bay Area, US | | | https://www.workatastartup.com/jobs/64008 | +| 414 | [Post link](https://news.ycombinator.com/item?id=41135065) | TurboML | Software Engineer | full-time | | yes | Remote, Unknown country | | | https://turboml.com/careers | +| 415 | [Post link](https://news.ycombinator.com/item?id=41135065) | TurboML | ML Engineer | full-time | | yes | Remote, Unknown country | | | https://turboml.com/careers | +| 416 | [Post link](https://news.ycombinator.com/item?id=41135065) | TurboML | Enterprise Sales | full-time | | yes | Remote, Unknown country | | | https://turboml.com/careers | +| 417 | [Post link](https://news.ycombinator.com/item?id=41135065) | TurboML | Technical Writer | full-time | | yes | Remote, Unknown country | | | https://turboml.com/careers | +| 418 | [Post link](https://news.ycombinator.com/item?id=41139933) | TRM Labs | Senior Software Engineer, Data Platform | full-time | | yes | Remote: US, US | | | https://www.trmlabs.com/careers-list?gh_jid=5181574004 | +| 419 | [Post link](https://news.ycombinator.com/item?id=41139933) | TRM Labs | Staff Software Engineer, Data Incrementalization | full-time | | yes | Remote: US, US | | | https://www.trmlabs.com/careers-list?gh_jid=5219831004 | +| 420 | [Post link](https://news.ycombinator.com/item?id=41139933) | TRM Labs | Senior Software Engineer, Data Product | full-time | | yes | Remote: Argentina, Argentina | | | https://www.trmlabs.com/careers-list?gh_jid=5242615004 | +| 421 | [Post link](https://news.ycombinator.com/item?id=41139933) | TRM Labs | Senior Software Engineer, Data Product | full-time | | yes | Remote: Brazil, Brazil | | | https://www.trmlabs.com/careers-list?gh_jid=5219332004 | +| 422 | [Post link](https://news.ycombinator.com/item?id=41139933) | TRM Labs | Senior Software Engineer, Infrastructure | full-time | | yes | Remote: US, US | | | https://www.trmlabs.com/careers-list?gh_jid=5192054004 | +| 423 | [Post link](https://news.ycombinator.com/item?id=41135688) | SerpApi | Junior Fullstack Engineer | full-time | $150K - 180K (USD) | yes | Austin, TX, US | Ruby, Rails, MongoDB, React.JS | 1099 for US or local avg + 20% for outside the US | https://serpapi.com/careers | +| 424 | [Post link](https://news.ycombinator.com/item?id=41135688) | SerpApi | Senior Fullstack Engineer | full-time | $150K - 180K (USD) | yes | Austin, TX, US | Ruby, Rails, MongoDB, React.JS | 1099 for US or local avg + 20% for outside the US | https://serpapi.com/careers | +| 425 | [Post link](https://news.ycombinator.com/item?id=41135688) | SerpApi | Customer Success Engineer | full-time | $150K - 180K (USD) | yes | Austin, TX, US | | 1099 for US or local avg + 20% for outside the US | https://serpapi.com/careers | +| 426 | [Post link](https://news.ycombinator.com/item?id=41136167) | HouseAccount | Senior Product Manager | full-time | $165k-$215k (USD) | hybrid | NYC, US | | | https://job-boards.greenhouse.io/houseaccount/jobs/444340400... | +| 427 | [Post link](https://news.ycombinator.com/item?id=41134404) | 76 Software Engineering Group | Software Engineer | full-time | None (USD) | no | Oklahoma City, USA | C, C++, C#, Java, Python, JavaScript, LabVIEW, Visual Basic, Assembly, Ada, Fortran | | e-mail 76SMXG.Tinker.Careers@us.af.mil and tell them Jake sent you | +| 428 | [Post link](https://news.ycombinator.com/item?id=41134404) | 76 Software Engineering Group | Software Engineer | full-time | None (USD) | no | Oklahoma City, USA | C, C++, C#, Java, Python, JavaScript, LabVIEW, Visual Basic, Assembly, Ada, Fortran | | e-mail 76SMXG.Tinker.Careers@us.af.mil and tell them Jake sent you | +| 429 | [Post link](https://news.ycombinator.com/item?id=41129921) | Velo Data | Senior Frontend Engineer | full-time | None (USD) | yes | | | | Email me at hello@velodata.app if you are interested or have any questions! | +| 430 | [Post link](https://news.ycombinator.com/item?id=41133817) | Fleetio | Engineering Manager | full-time | None (USD) | yes | | | 100% REMOTE - open to candidates in the USA, CANADA & MEXICO (Pending role) | https://www.fleetio.com/careers | +| 431 | [Post link](https://news.ycombinator.com/item?id=41133817) | Fleetio | Sr Software Engineer | full-time | None (USD) | yes | | | 100% REMOTE - open to candidates in the USA, CANADA & MEXICO (Pending role) | https://www.fleetio.com/careers | +| 432 | [Post link](https://news.ycombinator.com/item?id=41137066) | E2B | Infrastructure Engineer | full-time | $150k - $220k + equity (0.1% - 1%) (USD) | no | San Francisco, USA | JS, Python, TypeScript, Golang, Rust, Next.js | San Francisco (in-person) | Send a quick hi to my email - vasek at e2b.dev | +| 433 | [Post link](https://news.ycombinator.com/item?id=41137066) | E2B | Product Engineer | full-time | $150k - $220k + equity (0.1% - 1%) (USD) | no | San Francisco, USA | JS, Python, TypeScript, Golang, Rust, Next.js | San Francisco (in-person) | Send a quick hi to my email - vasek at e2b.dev | +| 434 | [Post link](https://news.ycombinator.com/item?id=41137066) | E2B | Growth Engineer | full-time | $150k - $220k + equity (0.1% - 1%) (USD) | no | San Francisco, USA | JS, Python, TypeScript, Golang, Rust, Next.js | San Francisco (in-person) | Send a quick hi to my email - vasek at e2b.dev | +| 435 | [Post link](https://news.ycombinator.com/item?id=41131608) | Palm | ML Engineer | full-time | None (USD) | yes | | | Remote (Netherlands and Sweden) | Career website: https://careers.usepalm.com/jobs/4766006-senior-machine-lear... | +| 436 | [Post link](https://news.ycombinator.com/item?id=41140228) | Complete | Full Stack Engineer | full-time | None (USD) | unknown | San Francisco, USA | | | Feel free to reach out directly with questions or to share a resume: michael@complete.so | +| 437 | [Post link](https://news.ycombinator.com/item?id=41140228) | Complete | Chief of Staff | full-time | None (USD) | unknown | San Francisco, USA | | | Feel free to reach out directly with questions or to share a resume: michael@complete.so | +| 438 | [Post link](https://news.ycombinator.com/item?id=41134782) | 10x Genomics | Staff Software Engineer, Web Team | full-time | None (USD) | yes | Pleasanton, USA | React, TypeScript, Node.js, Postgres | Remote (US)/Onsite (Pleasanton, CA) | Please feel free to apply directly on our careers website or reach out to me with any questions or your resume via email (robert.baird@10xgenomics.com) | +| 439 | [Post link](https://news.ycombinator.com/item?id=41134782) | 10x Genomics | Software Engineer III, Web Team | full-time | None (USD) | yes | Pleasanton, USA | React, TypeScript, Node.js, Postgres | Remote (US)/Onsite (Pleasanton, CA) | Please feel free to apply directly on our careers website or reach out to me with any questions or your resume via email (robert.baird@10xgenomics.com) | +| 440 | [Post link](https://news.ycombinator.com/item?id=41134782) | 10x Genomics | Staff Software Engineer, Instrument Software | full-time | None (USD) | yes | Pleasanton, USA | C++, Python | Remote (US)/Onsite (Pleasanton, CA) | Please feel free to apply directly on our careers website or reach out to me with any questions or your resume via email (robert.baird@10xgenomics.com) | +| 441 | [Post link](https://news.ycombinator.com/item?id=41134782) | 10x Genomics | Staff Software Engineer, Core Software | full-time | None (USD) | yes | Pleasanton, USA | Python, Go, React, AWS | Remote (US)/Onsite (Pleasanton, CA) | Please feel free to apply directly on our careers website or reach out to me with any questions or your resume via email (robert.baird@10xgenomics.com) | +| 442 | [Post link](https://news.ycombinator.com/item?id=41132188) | Sphinx Defense | Sr. Backend Engineer | full-time | None (USD) | yes | | | Remote (US Only), DC, Colorado Springs, LA | Check out our open roles: https://www.sphinxdefense.com/#Careers | +| 443 | [Post link](https://news.ycombinator.com/item?id=41132188) | Sphinx Defense | DevOps Engineer | full-time | None (USD) | yes | | | Remote (US Only), DC, Colorado Springs, LA | Check out our open roles: https://www.sphinxdefense.com/#Careers | +| 444 | [Post link](https://news.ycombinator.com/item?id=41132188) | Sphinx Defense | Product Engineer | full-time | None (USD) | yes | | | Remote (US Only), DC, Colorado Springs, LA | Check out our open roles: https://www.sphinxdefense.com/#Careers | +| 445 | [Post link](https://news.ycombinator.com/item?id=41134988) | Fondant | AI/ML Engineer | full-time | None (USD) | yes | | | REMOTE | Reach out at my username [at] fondant.design with a short blurb about yourself and link(s) to personal contribution(s) e.g., open-source code, cool demo of something you built etc. | +| 446 | [Post link](https://news.ycombinator.com/item?id=41130422) | Needle | Lead AI Engineer | full-time | None (USD) | yes | | AI/LLM models, generative technologies, React, cloud platforms (GCP) | REMOTE (US) | West Coast US timezone | Find out more here: https://tinyurl.com/needle-lead-ai-engineer | +| 447 | [Post link](https://news.ycombinator.com/item?id=41131165) | Trunk Tools | Director of AI | full-time | None (USD) | yes | New York City, USA | typescript, react, node, python, aws | US REMOTE or ONSITE NYC | feel free to email your resume and a note over to rob+aug24@trunk.tools | +| 448 | [Post link](https://news.ycombinator.com/item?id=41131165) | Trunk Tools | Senior+ Full Stack Implementation Engineer | full-time | None (USD) | yes | New York City, USA | typescript, react, node, python, aws | US REMOTE or ONSITE NYC | feel free to email your resume and a note over to rob+aug24@trunk.tools | +| 449 | [Post link](https://news.ycombinator.com/item?id=41131165) | Trunk Tools | Senior+ Machine Learning Engineer | full-time | None (USD) | yes | New York City, USA | typescript, react, node, python, aws | US REMOTE or ONSITE NYC | feel free to email your resume and a note over to rob+aug24@trunk.tools | +| 450 | [Post link](https://news.ycombinator.com/item?id=41131165) | Trunk Tools | Senior+ Full Stack Engineer (Frontend Architect) | full-time | None (USD) | yes | New York City, USA | typescript, react, node, python, aws | US REMOTE or ONSITE NYC | feel free to email your resume and a note over to rob+aug24@trunk.tools | +| 451 | [Post link](https://news.ycombinator.com/item?id=41131165) | Trunk Tools | Senior+ Engineering Manager | full-time | None (USD) | yes | New York City, USA | typescript, react, node, python, aws | US REMOTE or ONSITE NYC | feel free to email your resume and a note over to rob+aug24@trunk.tools | +| 452 | [Post link](https://news.ycombinator.com/item?id=41131165) | Trunk Tools | Senior+ DevOps/Infrastructure/SRE Engineer (AWS) | full-time | None (USD) | yes | New York City, USA | typescript, react, node, python, aws | US REMOTE or ONSITE NYC | feel free to email your resume and a note over to rob+aug24@trunk.tools | +| 453 | [Post link](https://news.ycombinator.com/item?id=41131165) | Trunk Tools | IT/Security Engineer | full-time | None (USD) | yes | New York City, USA | | US REMOTE or ONSITE NYC | feel free to email your resume and a note over to rob+aug24@trunk.tools | +| 454 | [Post link](https://news.ycombinator.com/item?id=41133919) | Inngest | Mid-Sr Frontend Engineer | full-time | None (USD) | yes | San Francisco, USA | | San Francisco + Remote | email me: tony [at] inngest.com | +| 455 | [Post link](https://news.ycombinator.com/item?id=41133919) | Inngest | Infrastructure Engineer | full-time | None (USD) | yes | San Francisco, USA | | San Francisco + Remote | email me: tony [at] inngest.com | +| 456 | [Post link](https://news.ycombinator.com/item?id=41133614) | Maestro AI | Senior Full Stack Engineer | full-time | None (USD) | yes | Seattle, USA | Python, React, Redux, Typescript | REMOTE (US) Seattle onsite preferred, Remote OK | Please email careers+hn at getmaestro.ai with your resume, your Github, and a short note detailing a project you've enjoyed working on. | +| 457 | [Post link](https://news.ycombinator.com/item?id=41133614) | Maestro AI | Senior AI Engineer | full-time | None (USD) | yes | Seattle, USA | Python, React, Redux, Typescript | REMOTE (US) Seattle onsite preferred, Remote OK | Please email careers+hn at getmaestro.ai with your resume, your Github, and a short note detailing a project you've enjoyed working on. | +| 458 | [Post link](https://news.ycombinator.com/item?id=41131305) | FanPad | Founding Engineer | full-time | None (USD) | yes | | Angular, .NET, Postgres, AWS | REMOTE | reach out to me at: alex at fanpad dot xyz | +| 459 | [Post link](https://news.ycombinator.com/item?id=41132946) | Doctor Droid | ML Engineer | full-time | 15-20LPA INR | no | Bangalore, India | | Bangalore, INDIA | ONSITE | email siddarth [at] drdroid [dot] io if it sounds like a place you'd like to be a part of | +| 460 | [Post link](https://news.ycombinator.com/item?id=41136996) | Lancom Systems | Senior Data Platform Engineer | full-time | | yes | Karlsruhe, Germany | | Remote (EU - Germany, Spain, Austria, Belgium, Netherlands) | Email me at jonas.vonandrian +lancom.de | +| 461 | [Post link](https://news.ycombinator.com/item?id=41131967) | Protege | Generalist Engineer | full-time | | yes | | | Remote (US) | Please apply at https://jobs.ashbyhq.com/protege or email us at careers@withprotege.ai if you don’t see a job that fits. | +| 462 | [Post link](https://news.ycombinator.com/item?id=41131967) | Protege | Senior / Staff Data Engineer | full-time | | yes | | | Remote (US) | Please apply at https://jobs.ashbyhq.com/protege or email us at careers@withprotege.ai if you don’t see a job that fits. | +| 463 | [Post link](https://news.ycombinator.com/item?id=41131647) | Yardstik | Senior Software Engineer (Ruby/Rails) | full-time | | hybrid | Minneapolis, USA | Ruby, Rails | Minneapolis, MN | Please apply via: https://app.trinethire.com/companies/135023-yardstik/jobs/96... | +| 464 | [Post link](https://news.ycombinator.com/item?id=41133965) | Djamo | Software Engineer | full-time | | yes | | Typescript, Flutter, Postgresql, Redis, Kafka | Remote (UTC-3 to UTC+3) | You can directly join me at vianney at djamo.io | +| 465 | [Post link](https://news.ycombinator.com/item?id=41132981) | doxel.ai | Product Engineer | full-time | | yes | | | REMOTE (US) | Apply at https://doxel.ai/careers/ and shoot me an email at williamtruong@doxel.ai | +| 466 | [Post link](https://news.ycombinator.com/item?id=41130356) | Tracebit | Founding Engineer | full-time | £70-100k + equity (GBP) | no | London, UK | | | https://tracebit.com/jobs/founding-engineer | +| 467 | [Post link](https://news.ycombinator.com/item?id=41130356) | Tracebit | Founding Frontend Engineer | full-time | £70-100k + equity (GBP) | no | London, UK | | | https://tracebit.com/jobs/founding-frontend-engineer | +| 468 | [Post link](https://news.ycombinator.com/item?id=41130396) | Topaz Labs | Founding Sales Executive | full-time | | no | Dallas, unknown | | | email russell.pompea@topazlabs.com | +| 469 | [Post link](https://news.ycombinator.com/item?id=41130396) | Topaz Labs | Software Engineer | full-time | | no | Dallas, unknown | | | see postings at https://www.topazlabs.com/careers | +| 470 | [Post link](https://news.ycombinator.com/item?id=41130396) | Topaz Labs | PhD Deep Learning Researcher | full-time | | no | Dallas, unknown | | | see postings at https://www.topazlabs.com/careers | +| 471 | [Post link](https://news.ycombinator.com/item?id=41136765) | Viator | Director | full-time | | hybrid | Poland, Portugal, UK, unknown | | Remote roles must be based in Poland, Portugal, or the UK. | https://bit.ly/viator-jobs | +| 472 | [Post link](https://news.ycombinator.com/item?id=41136765) | Viator | Manager | full-time | | hybrid | Poland, Portugal, UK, unknown | | Remote roles must be based in Poland, Portugal, or the UK. | https://bit.ly/viator-jobs | +| 473 | [Post link](https://news.ycombinator.com/item?id=41136765) | Viator | Engineer | full-time | | hybrid | Poland, Portugal, UK, unknown | | Remote roles must be based in Poland, Portugal, or the UK. | https://bit.ly/viator-jobs | +| 474 | [Post link](https://news.ycombinator.com/item?id=41135583) | Promptfoo | Software Engineer | full-time | | hybrid | SF Bay Area, US | TypeScript, React, Node.js, Python | Remote (US) | Email careers@promptfoo.dev with "HN" in the subject. | +| 475 | [Post link](https://news.ycombinator.com/item?id=41135095) | Guided Clinical Solutions | Product Manager | full-time | | yes | Unknown city, US | | US Only | Email theo@guidedclinical.com | +| 476 | [Post link](https://news.ycombinator.com/item?id=41141374) | neuronOS | Lead Developer | full-time | | hybrid | Bay Area, US | | | https://gist.github.com/greenido/692fb7c037946d979d5b23a4fee... | +| 477 | [Post link](https://news.ycombinator.com/item?id=41136649) | BHS Technologies | Linux Embedded Software Engineer | full-time | | no | Innsbruck, Austria | Linux, C++, Rust, Python | | talents@bhs-technologies.com | +| 478 | [Post link](https://news.ycombinator.com/item?id=41163985) | Second Software Engineer | Software Engineer | full-time | | yes | Unknown city, US | Ruby on Rails, PostgreSQL, Vue.js, AWS | Remote (US) | Isadora@thecreativestrategysite.com | +| 479 | [Post link](https://news.ycombinator.com/item?id=41131198) | Aer Compliance | Senior Software Engineer | full-time | | hybrid | NYC, US | | | https://www.ycombinator.com/companies/aer/jobs/HjlZNtR-senio... | +| 480 | [Post link](https://news.ycombinator.com/item?id=41133639) | APM Help | CTO | full-time | | yes | Unknown city, US | | | taylor at apmhelp dot com | +| 481 | [Post link](https://news.ycombinator.com/item?id=41136467) | comma.ai | SW Engineer | full-time | | no | San Diego, US | | | https://comma.ai/jobs | +| 482 | [Post link](https://news.ycombinator.com/item?id=41136467) | comma.ai | HW Engineer | full-time | | no | San Diego, US | | | https://comma.ai/jobs | +| 483 | [Post link](https://news.ycombinator.com/item?id=41136467) | comma.ai | Designer | full-time | | no | San Diego, US | | | https://comma.ai/jobs | +| 484 | [Post link](https://news.ycombinator.com/item?id=41134215) | Kombo.dev | Engineer | full-time | | no | Berlin, Germany | | In-office (with flexibility) | https://workatastartup.com/companies/kombo | +| 485 | [Post link](https://news.ycombinator.com/item?id=41133086) | Arch.dev | Engineering | full-time | | yes | Unknown city, unknown | | | https://jobs.gusto.com/boards/arch-data-inc-49da2865-e3bf-45... | +| 486 | [Post link](https://news.ycombinator.com/item?id=41131373) | yeet | Systems Programmer | full-time | | yes | Chicago, US | Rust, Python, React, WebAssembly | Prefer US Based | work@yeet.cx | +| 487 | [Post link](https://news.ycombinator.com/item?id=41131353) | Gradient.ai | Staff SWE | full-time | | hybrid | SF Bay Area, US | | | https://lnkd.in/g6kytYQf | +| 488 | [Post link](https://news.ycombinator.com/item?id=41131353) | Gradient.ai | Senior SWE | full-time | | hybrid | SF Bay Area, US | | | https://lnkd.in/gt62fXYu | +| 489 | [Post link](https://news.ycombinator.com/item?id=41131353) | Gradient.ai | Enterprise Account Executive | full-time | | hybrid | SF Bay Area, US | | | https://lnkd.in/gBbcRneY | +| 490 | [Post link](https://news.ycombinator.com/item?id=41131555) | Contour | Founding Engineer | full-time | | hybrid | San Francisco, US | Rust, Typescript, Next, WASM, Postgres | 3 days in person | email alex at contour dot app | +| 491 | [Post link](https://news.ycombinator.com/item?id=41132035) | Replit | Software Engineer, Platform | full-time | | hybrid | Foster City, CA, US | | Hybrid in Foster City, CA + Hybrid in NY | https://jobs.ashbyhq.com/replit?utm_source=HackerNews | +| 492 | [Post link](https://news.ycombinator.com/item?id=41132035) | Replit | Software Engineer, Workspace UX | full-time | | hybrid | Foster City, CA, US | | Hybrid in Foster City, CA + Hybrid in NY | https://jobs.ashbyhq.com/replit?utm_source=HackerNews | +| 493 | [Post link](https://news.ycombinator.com/item?id=41132875) | Spice AI | SWE | full-time | | hybrid | Unknown city, unknown | Rust | ONSITE (Seattle, Seoul), REMOTE (Australia) | https://spice.ai/careers | +| 494 | [Post link](https://news.ycombinator.com/item?id=41132875) | Spice AI | DevRel | full-time | | hybrid | Unknown city, unknown | | ONSITE (Seattle, Seoul), REMOTE (Australia) | https://spice.ai/careers | +| 495 | [Post link](https://news.ycombinator.com/item?id=41132688) | AE Studio | Multiple Roles | full-time | | yes | Unknown city, unknown | | | https://ae.studio/join-us | +| 496 | [Post link](https://news.ycombinator.com/item?id=41138875) | Cariloop | Senior Fullstack Engineer | full-time | None (USD) | yes | | Typescript, Angular | Remote (US Only) | Apply at https://tinyurl.com/43jhbz8f | +| 497 | [Post link](https://news.ycombinator.com/item?id=41130491) | Niceboard | Senior Software Engineer | full-time | None (USD) | yes | | Hapi.js, Node, Vue.js, PostgreSQL, ElasticSearch | Remote (US/Europe) | https://niceboard.co | +| 498 | [Post link](https://news.ycombinator.com/item?id=41130491) | Niceboard | Full Stack Developer | full-time | None (USD) | yes | | Hapi.js, Node, Vue.js, PostgreSQL, ElasticSearch | Remote (US/Europe) | https://niceboard.co | +| 499 | [Post link](https://news.ycombinator.com/item?id=41132569) | 40GRID | Senior Angular Frontend Engineer | full-time | None (USD) | yes | | Django, Python, Angular JS, Angular TS | Full-time Remote | Email: jobs [at] 40grid.com | +| 500 | [Post link](https://news.ycombinator.com/item?id=41132569) | 40GRID | Django / Python Backend Engineer | full-time | None (USD) | yes | | Django, Python, Angular JS, Angular TS | Full-time Remote | Email: jobs [at] 40grid.com | +| 501 | [Post link](https://news.ycombinator.com/item?id=41140599) | onXmaps, Inc | Engineer | full-time | None (USD) | yes | Montana, USA | OpenGL, Metal, C++, Python, PostgreSQL, GIS, Kotlin, Swift, SwiftUI, Go, Elixir, GraphQL, GCP, Kubernetes, Vue JS | Montana or REMOTE, USA only | https://www.onxmaps.com/careers | +| 502 | [Post link](https://news.ycombinator.com/item?id=41139248) | Arturo AI | MLEng | full-time | 130-190k DOE (USD) | hybrid | Unknown city, USA | python, pytorch, sql, stats, linux, mlflow, aws | Remote/hybrid. Proximity to Utah preferred | Email: dmillar at the above domain | +| 503 | [Post link](https://news.ycombinator.com/item?id=41139248) | Arturo AI | MLOps Roles | full-time | 130-190k DOE (USD) | hybrid | Unknown city, USA | python, pytorch, sql, stats, linux, mlflow, aws | Remote/hybrid. Proximity to Utah preferred | Email: dmillar at the above domain | +| 504 | [Post link](https://news.ycombinator.com/item?id=41135331) | Mixpeek | Founding Computer Vision Engineer | full-time | None (USD) | yes | Unknown city, USA | | Remote USA | Email the founder ethan at mixpeek dot com | +| 505 | [Post link](https://news.ycombinator.com/item?id=41132103) | Powertools Technologies | Junior Engineer | full-time | | no | Lisbon, Portugal | | | Email your interest and CV to hr@powertools-tech.com | +| 506 | [Post link](https://news.ycombinator.com/item?id=41132103) | Powertools Technologies | Senior Engineer | full-time | | no | Lisbon, Portugal | | | Email your interest and CV to hr@powertools-tech.com | +| 507 | [Post link](https://news.ycombinator.com/item?id=41131459) | DuckDuckGo | Engineering Director, Site Reliability | full-time | $242k + equity (USD) | yes | Unknown city, Remote | | | Apply via the provided link | +| 508 | [Post link](https://news.ycombinator.com/item?id=41131459) | DuckDuckGo | Senior C++ Engineer | full-time | $176k + equity (USD) | yes | Unknown city, Remote | | | Apply via the provided link | +| 509 | [Post link](https://news.ycombinator.com/item?id=41131459) | DuckDuckGo | Engineering Director, Apple | full-time | $242k + equity (USD) | yes | Unknown city, Remote | | | Apply via the provided link | +| 510 | [Post link](https://news.ycombinator.com/item?id=41131459) | DuckDuckGo | Senior Backend Engineer | full-time | $176k + equity (USD) | yes | Unknown city, Remote | | | Apply via the provided link | +| 511 | [Post link](https://news.ycombinator.com/item?id=41131459) | DuckDuckGo | Lead, Business Development (US/Canada) | full-time | $198k - $220k + equity (USD) | yes | Unknown city, Remote | | | Apply via the provided link | +| 512 | [Post link](https://news.ycombinator.com/item?id=41131459) | DuckDuckGo | Senior Software Engineer, Windows Desktop App | full-time | $176k + equity (USD) | yes | Unknown city, Remote | | | Apply via the provided link | +| 513 | [Post link](https://news.ycombinator.com/item?id=41131459) | DuckDuckGo | Global Payroll Manager | full-time | $160k + equity (USD) | yes | Unknown city, Remote | | | Apply via the provided link | +| 514 | [Post link](https://news.ycombinator.com/item?id=41131459) | DuckDuckGo | Design Director, Brand and Marketing | full-time | $242k + equity (USD) | yes | Unknown city, Remote | | | Apply via the provided link | +| 515 | [Post link](https://news.ycombinator.com/item?id=41131459) | DuckDuckGo | Senior Creative Designer - Brand | full-time | $176k + equity (USD) | yes | Unknown city, Remote | | | Apply via the provided link | +| 516 | [Post link](https://news.ycombinator.com/item?id=41133025) | PSPDFKit | Engineering | full-time | | yes | Unknown city, Remote | | | Apply via the provided link | +| 517 | [Post link](https://news.ycombinator.com/item?id=41136791) | Roboflow | Infrastructure Engineer | full-time | | yes | San Francisco, USA | | | Apply via the provided link | +| 518 | [Post link](https://news.ycombinator.com/item?id=41136791) | Roboflow | ML Engineer | full-time | | yes | San Francisco, USA | | | Apply via the provided link | +| 519 | [Post link](https://news.ycombinator.com/item?id=41136791) | Roboflow | Full-Stack Engineer | full-time | | yes | San Francisco, USA | | | Apply via the provided link | +| 520 | [Post link](https://news.ycombinator.com/item?id=41130312) | Fullstory | Senior Systems Software Engineer, Android | full-time | $160,000 to $190,000 (USD) | yes | Atlanta, USA | | | Apply via the provided link | +| 521 | [Post link](https://news.ycombinator.com/item?id=41130312) | Fullstory | Senior Software Engineer, Flutter | full-time | $160,000 to $190,000 (USD) | yes | Atlanta, USA | | | Apply via the provided link | +| 522 | [Post link](https://news.ycombinator.com/item?id=41130312) | Fullstory | Senior Software Engineer, Ingestion | full-time | | yes | Atlanta, USA | | | Apply via the provided link | +| 523 | [Post link](https://news.ycombinator.com/item?id=41130312) | Fullstory | Senior Data Engineer | full-time | | yes | Atlanta, USA | | | Apply via the provided link | +| 524 | [Post link](https://news.ycombinator.com/item?id=41137536) | sea.dev | Full Stack Product Engineer | full-time | | hybrid | London, UK | | | See the provided link | +| 525 | [Post link](https://news.ycombinator.com/item?id=41137096) | BillionToOne (YC S17) | Senior Manager, Software Engineering | full-time | | hybrid | Menlo Park, CA | | | Apply via the provided link | +| 526 | [Post link](https://news.ycombinator.com/item?id=41137096) | BillionToOne (YC S17) | Senior Software Engineer, Digital Experiences | full-time | | hybrid | Menlo Park, CA | | | Apply via the provided link | +| 527 | [Post link](https://news.ycombinator.com/item?id=41137096) | BillionToOne (YC S17) | Lead Product Designer | full-time | | hybrid | Menlo Park, CA | | | Apply via the provided link | +| 528 | [Post link](https://news.ycombinator.com/item?id=41137096) | BillionToOne (YC S17) | Senior Manager/Director of IT | full-time | | hybrid | Menlo Park, CA | | | Apply via the provided link | +| 529 | [Post link](https://news.ycombinator.com/item?id=41137096) | BillionToOne (YC S17) | Senior Bioinformatics Scientist | full-time | | hybrid | Menlo Park, CA | | | Apply via the provided link | +| 530 | [Post link](https://news.ycombinator.com/item?id=41132744) | Stanford University IT | Cloud Security Engineer | full-time | | hybrid | Stanford, CA | | | See the provided link | +| 531 | [Post link](https://news.ycombinator.com/item?id=41132744) | Stanford University IT | LAN Engineer | full-time | | hybrid | Stanford, CA | | | See the provided link | +| 532 | [Post link](https://news.ycombinator.com/item?id=41132744) | Stanford University IT | CT Senior Network Engineer | full-time | | hybrid | Stanford, CA | | | See the provided link | +| 533 | [Post link](https://news.ycombinator.com/item?id=41130702) | Raylu | AI Engineer | full-time | $110K - $165K (USD) | no | NYC, USA | | | Apply via the provided link | +| 534 | [Post link](https://news.ycombinator.com/item?id=41132409) | Lago (YC S21) | Machine Learning Engineer | full-time | | yes | Unknown city, Remote | | | See the provided link | +| 535 | [Post link](https://news.ycombinator.com/item?id=41132409) | Lago (YC S21) | Front-End Engineer | full-time | | yes | Unknown city, Remote | | | See the provided link | +| 536 | [Post link](https://news.ycombinator.com/item?id=41132409) | Lago (YC S21) | Product Designer | full-time | | yes | Unknown city, Remote | | | See the provided link | +| 537 | [Post link](https://news.ycombinator.com/item?id=41132286) | Danswer AI | Full Stack Engineer | full-time | $150,000 - $240,000 (USD) | no | Unknown city, On-site | | | Email your resume or refer somebody to founders@danswer.ai | +| 538 | [Post link](https://news.ycombinator.com/item?id=41131139) | MixRank (YC S11) | Junior Software Engineer | full-time | | yes | Unknown city, Remote | | | Apply via the provided link | +| 539 | [Post link](https://news.ycombinator.com/item?id=41131139) | MixRank (YC S11) | Software Engineer | full-time | | yes | Unknown city, Remote | | | Apply via the provided link | +| 540 | [Post link](https://news.ycombinator.com/item?id=41131139) | MixRank (YC S11) | Ex-Founder | full-time | | yes | Unknown city, Remote | | | Apply via the provided link | +| 541 | [Post link](https://news.ycombinator.com/item?id=41132088) | Figma | Senior Security Engineer | full-time | $149k - $350k (USD) | yes | Unknown city, Remote | | | Email fwortley at .com | +| 542 | [Post link](https://news.ycombinator.com/item?id=41131276) | ParaFi Capital | IT Systems and Security Administrator | full-time | | no | New York City, USA | | | Email careers@parafi.com | +| 543 | [Post link](https://news.ycombinator.com/item?id=41136727) | ChatGPT Writer | React Developer | full-time | | yes | Unknown city, Remote | | | See the provided link | +| 544 | [Post link](https://news.ycombinator.com/item?id=41137419) | Schoolyear | Fullstack Go/Vuejs Developer | full-time | | hybrid | Unknown city, Remote | | | See the provided link | +| 545 | [Post link](https://news.ycombinator.com/item?id=41130801) | Stealth Financial Institution | AI Product Engineer | full-time | | hybrid | Krakow, Poland | | | Email victoria dot pillari at leveluphcs dot com | +| 546 | [Post link](https://news.ycombinator.com/item?id=41132150) | CAPP | Data Wrangler | full-time | $70-90K starting + benefits (USD) | hybrid | Greater Philadelphia, USA | | | Email careers@cappusa.com | +| 547 | [Post link](https://news.ycombinator.com/item?id=41160993) | WunderGraph | Multiple Roles | full-time | | yes | Unknown city, Remote | | | Apply via the provided link |