diff --git a/.github/workflows/build-project.yml b/.github/workflows/build-project.yml index 605f5e84..26d8e45a 100644 --- a/.github/workflows/build-project.yml +++ b/.github/workflows/build-project.yml @@ -12,22 +12,22 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - - name: Install Poetry - run: | - curl -sSL https://install.python-poetry.org | python3 - - - name: Poetry lock - run: poetry lock + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + with: + version: 1.8.3 + virtualenvs-create: true + virtualenvs-in-project: true - name: Install dependencies - run: poetry install + run: poetry lock && poetry install - name: Run build run: poetry build diff --git a/examples/agent_of_flo_ai.ipynb b/examples/agent_of_flo_ai.ipynb index 78979e23..9197b808 100644 --- a/examples/agent_of_flo_ai.ipynb +++ b/examples/agent_of_flo_ai.ipynb @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -32,7 +32,7 @@ "True" ] }, - "execution_count": 6, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -58,16 +58,16 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 7, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -102,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -111,7 +111,7 @@ "kind: FloAgent\n", "name: weather-assistant\n", "agent:\n", - " name: Weather Assistant\n", + " name: WeatherAssistant\n", " kind: agentic\n", " job: >\n", " Given the city name you are capable of answering the latest whether this time of the year by searching the internet\n", @@ -122,17 +122,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-09-22 13:22:31,840 - BUILDER - INFO - Building Flo instance from YAML\n", - "2024-09-22 13:22:31,846 - COMMON - INFO - Flo instance created for session e7f22b4d-7380-4d00-97c9-5267a468468a\n" - ] - }, { "data": { "image/jpeg": "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", @@ -146,23 +138,16 @@ ], "source": [ "from IPython.display import Image, display\n", - "flo = Flo.build(session, simple_weather_checking_agent,log_level=\"DEBUG\")\n", + "flo = Flo.build(session, simple_weather_checking_agent, log_level=\"ERROR\")\n", "\n", "flo.draw()" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-09-22 13:22:34,352 - COMMON - INFO - Invoking query for session e7f22b4d-7380-4d00-97c9-5267a468468a: Whats the whether in New Delhi, India ?\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -171,25 +156,28 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `tavily_search_results_json` with `{'query': 'current weather in New Delhi, India'}`\n", + "Invoking: `tavily_search_results_json` with `{'query': 'New Delhi India weather October 2023'}`\n", "\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3m[{'url': 'https://www.weatherapi.com/', 'content': \"{'location': {'name': 'New Delhi', 'region': 'Delhi', 'country': 'India', 'lat': 28.6, 'lon': 77.2, 'tz_id': 'Asia/Kolkata', 'localtime_epoch': 1726991371, 'localtime': '2024-09-22 13:19'}, 'current': {'last_updated_epoch': 1726991100, 'last_updated': '2024-09-22 13:15', 'temp_c': 35.3, 'temp_f': 95.5, 'is_day': 1, 'condition': {'text': 'Mist', 'icon': '//cdn.weatherapi.com/weather/64x64/day/143.png', 'code': 1030}, 'wind_mph': 3.4, 'wind_kph': 5.4, 'wind_degree': 350, 'wind_dir': 'N', 'pressure_mb': 1007.0, 'pressure_in': 29.74, 'precip_mm': 0.0, 'precip_in': 0.0, 'humidity': 56, 'cloud': 50, 'feelslike_c': 38.1, 'feelslike_f': 100.6, 'windchill_c': 36.6, 'windchill_f': 98.0, 'heatindex_c': 40.7, 'heatindex_f': 105.3, 'dewpoint_c': 20.3, 'dewpoint_f': 68.5, 'vis_km': 3.5, 'vis_miles': 2.0, 'uv': 9.0, 'gust_mph': 3.9, 'gust_kph': 6.2}}\"}, {'url': 'https://mausam.imd.gov.in/delhiums/', 'content': 'Urban Meteorological Services for Delhi - NCR India Meteorological Department Ministry of Earth Sciences Government of India. ... Sep 22, 2024. Sep 23, 2024. ... Sep 25, 2024. Interactive Display of weather and Thunderstorm warnings. Current Weather Across Delhi - NCR. Delhi; Gurugram; Faridabad; Gautam Budh Nagar; Ghaziabad; New Delhi. 33.0 ...'}, {'url': 'https://www.msn.com/en-in/news/India/delhi-weather-and-aqi-today-warm-start-at-2705-c-check-weather-forecast-for-september-22-2024/ar-AA1qYihM', 'content': \"The temperature in Delhi today, on September 22, 2024, is 35.08 °C. The day's forecast indicates a minimum and maximum temperature of 27.05 °C and 37.13 °C, respectively. The relative humidity ...\"}, {'url': 'https://weatherspark.com/h/m/109174/2024/9/Historical-Weather-in-September-2024-in-New-Delhi-NCT-India', 'content': '°F September 2024 Weather History in New Delhi NCT, India Latest Report — 3:00 PM °F Dew Pt. 73°F\\xa0\\xa0oppressive No Report Overcast 8,000 ft Mostly Clear 1,500 ft Mostly Clear 3,000 ft This report shows the past weather for New Delhi, providing a weather history for September 2024. It features all historical weather data series we have available, including the New Delhi temperature history for September 2024. New Delhi Temperature History September 2024 Sep 65°F 65°F 70°F 70°F 75°F 75°F 80°F 80°F 85°F 85°F 90°F 90°F 95°F 95°F 100°F 100°F Hourly Temperature in September 2024 in New Delhi Sep'}, {'url': 'https://www.timeanddate.com/weather/india/new-delhi/hourly', 'content': 'Hour-by-Hour Forecast for New Delhi, Delhi, India. Weather Today Weather Hourly 14 Day Forecast Yesterday/Past Weather Climate (Averages) Currently: 84 °F. Passing clouds. (Weather station: New Delhi / Safdarjung, India). See more current weather.'}]\u001b[0m\u001b[32;1m\u001b[1;3mThe current weather in New Delhi, India, is as follows:\n", + "\u001b[0m\u001b[36;1m\u001b[1;3m[{'url': 'https://www.weatherapi.com/', 'content': \"{'location': {'name': 'New Delhi', 'region': 'Delhi', 'country': 'India', 'lat': 28.6, 'lon': 77.2, 'tz_id': 'Asia/Kolkata', 'localtime_epoch': 1727343896, 'localtime': '2024-09-26 15:14'}, 'current': {'last_updated_epoch': 1727343000, 'last_updated': '2024-09-26 15:00', 'temp_c': 33.4, 'temp_f': 92.1, 'is_day': 1, 'condition': {'text': 'Mist', 'icon': '//cdn.weatherapi.com/weather/64x64/day/143.png', 'code': 1030}, 'wind_mph': 6.7, 'wind_kph': 10.8, 'wind_degree': 107, 'wind_dir': 'ESE', 'pressure_mb': 1004.0, 'pressure_in': 29.65, 'precip_mm': 0.0, 'precip_in': 0.0, 'humidity': 59, 'cloud': 75, 'feelslike_c': 36.5, 'feelslike_f': 97.7, 'windchill_c': 34.7, 'windchill_f': 94.5, 'heatindex_c': 39.2, 'heatindex_f': 102.5, 'dewpoint_c': 21.3, 'dewpoint_f': 70.3, 'vis_km': 4.0, 'vis_miles': 2.0, 'uv': 8.0, 'gust_mph': 7.7, 'gust_kph': 12.4}}\"}, {'url': 'https://weatherspark.com/h/m/109174/2023/10/Historical-Weather-in-October-2023-in-New-Delhi-India', 'content': 'New Delhi Temperature History October 2023. The daily range of reported temperatures (gray bars) and 24-hour highs (red ticks) and lows (blue ticks), placed over the daily average high (faint red line) and low (faint blue line) temperature, with 25th to 75th and 10th to 90th percentile bands.'}, {'url': 'https://www.meteoprog.com/weather/Delhi/month/october/', 'content': 'Delhi (India) weather in October 2023 ☀️ Accurate weather forecast for Delhi in October ⛅ Detailed forecast By month Current temperature \"near me\" Weather news ⊳ Widget of weather ⊳ Water temperature | METEOPROG'}, {'url': 'https://world-weather.info/forecast/india/delhi/october-2023/', 'content': 'Extended weather forecast in Delhi. Hourly Week 10 days 14 days 30 days Year. Detailed ⚡ Delhi Weather Forecast for October 2023 - day/night 🌡️ temperatures, precipitations - World-Weather.info.'}, {'url': 'https://weather-and-climate.com/New-Delhi-October-averages', 'content': 'New Delhi, monthly averages in October. Min Temperature 20°C. Max Temperature 34°C. Chance of Rain 3%. Precipitation 14 mm. Rainy days 1 day. Humidity 44%. Windspeed 4 km/h. Sunshine 262 hours.'}]\u001b[0m\u001b[32;1m\u001b[1;3mThe current weather in New Delhi, India is as follows:\n", "\n", - "- **Temperature**: 35.3°C (95.5°F)\n", + "- **Temperature**: 33.4°C (92.1°F)\n", "- **Condition**: Mist\n", - "- **Feels Like**: 38.1°C (100.6°F)\n", - "- **Humidity**: 56%\n", - "- **Wind**: 3.4 mph (5.4 kph) from the North\n", - "- **Visibility**: 3.5 km\n", - "- **Pressure**: 1007 mb\n", - "\n", - "The forecast for today indicates a minimum temperature of 27.05°C and a maximum of 37.13°C.\n", + "- **Feels Like**: 36.5°C (97.7°F)\n", + "- **Humidity**: 59%\n", + "- **Wind**: 10.8 kph (6.7 mph) from the East-Southeast\n", + "- **Visibility**: 4 km\n", + "- **Pressure**: 1004 mb\n", "\n", - "For more details, you can check the [India Meteorological Department](https://mausam.imd.gov.in/delhiums/) or other weather services.\u001b[0m\n", + "For more detailed forecasts and historical data, you can check the following links:\n", + "- [Weather API](https://www.weatherapi.com/)\n", + "- [Weather Spark](https://weatherspark.com/h/m/109174/2023/10/Historical-Weather-in-October-2023-in-New-Delhi-India)\n", + "- [Meteoprog](https://www.meteoprog.com/weather/Delhi/month/october/)\n", + "- [World Weather Info](https://world-weather.info/forecast/india/delhi/october-2023/)\n", + "- [Weather and Climate](https://weather-and-climate.com/New-Delhi-October-averages)\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n", - "{'messages': [HumanMessage(content='Whats the whether in New Delhi, India ?')], 'output': 'The current weather in New Delhi, India, is as follows:\\n\\n- **Temperature**: 35.3°C (95.5°F)\\n- **Condition**: Mist\\n- **Feels Like**: 38.1°C (100.6°F)\\n- **Humidity**: 56%\\n- **Wind**: 3.4 mph (5.4 kph) from the North\\n- **Visibility**: 3.5 km\\n- **Pressure**: 1007 mb\\n\\nThe forecast for today indicates a minimum temperature of 27.05°C and a maximum of 37.13°C.\\n\\nFor more details, you can check the [India Meteorological Department](https://mausam.imd.gov.in/delhiums/) or other weather services.'}\n" + "{'messages': [HumanMessage(content='Whats the whether in New Delhi, India ?')], 'output': 'The current weather in New Delhi, India is as follows:\\n\\n- **Temperature**: 33.4°C (92.1°F)\\n- **Condition**: Mist\\n- **Feels Like**: 36.5°C (97.7°F)\\n- **Humidity**: 59%\\n- **Wind**: 10.8 kph (6.7 mph) from the East-Southeast\\n- **Visibility**: 4 km\\n- **Pressure**: 1004 mb\\n\\nFor more detailed forecasts and historical data, you can check the following links:\\n- [Weather API](https://www.weatherapi.com/)\\n- [Weather Spark](https://weatherspark.com/h/m/109174/2023/10/Historical-Weather-in-October-2023-in-New-Delhi-India)\\n- [Meteoprog](https://www.meteoprog.com/weather/Delhi/month/october/)\\n- [World Weather Info](https://world-weather.info/forecast/india/delhi/october-2023/)\\n- [Weather and Climate](https://weather-and-climate.com/New-Delhi-October-averages)'}\n" ] } ], @@ -393,20 +381,20 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2024-09-22 13:22:57,657 - BUILDER - INFO - Building Flo instance from YAML\n", - "2024-09-22 13:22:57,664 - COMMON - INFO - Flo instance created for session 71b7747f-6530-45d7-b78d-54b8cc8bbb02\n" + "2024-09-26 15:54:42,618 - BUILDER - INFO - Building Flo instance from YAML\n", + "2024-09-26 15:54:42,624 - COMMON - INFO - Flo instance created for session 61LQSb1Ceb4ieNvy\n" ] }, { "data": { - "image/jpeg": "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P/mVnXRj/wCUT9I+0LIiIudBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBV7MUbGLy3ftCA2XOibDeqs+PNE0ktcwet7S53T98CR4hqsKLOiuaJuu5h4rMUs5TbaoWY7UBJbzRnflcPFrh4tcPAtOxB6ELMUHldGYrLXTddFLTyBABuUZ315nAeAc5hHOB8jtx9CwzoiYABup88xo9XbxH+8xkrbo4VW6q3rHLlBsWhFqvifj8rpHSYyOP1TmDZ7xx9X9nlhLeSa7DDJ/sx15JHbfTt4+Ctn3E2ParPf8ArQ/VJ1eH4/4ktGa0KFzWo20ZvMKLG5DNSN3ipNfty7+Ekp69nGPW4jc7bNDnENOD9wgl6WdQZ21HtsWG72O4/liax3/IqZxGCoYGu6HH1Y6zHHmeWjdz3eG7nHq4/SSSlsKjbfS+3P8Au82Q89P4VuCx5hMvnFmWR09mwW8pmled3O23Ow9QG52aGj1KTRFpqqmqZqnegiIsQREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREGvuO5aOHo5iQO+cP4fL3nV29Y/wD78vgtgrX3Hbf4PRty/fnD/GAI++dX5f8A/fk6rYKAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiINeceQDw7G7mt/wBNYbq4b/8AedXothrXnHnb4OxuSB31hvAb/wDelVbDQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBEWHl8rXwmOmu2nOEMQG4Y0uc4kgNa0DqSSQAPWSFYiaptG8ZiKlP1DqubZ8OKxVdjuojsXZHSNH+9yx7b/KASPkJXz37rD+IYP3ub6tdeq15xxhbLuipHfusP4hg/e5vq0791h/EMH73N9Wmq15xxgsu6Kkd+6w/iGD97m+rTv3WH8Qwfvc31aarXnHGCzn7y5fKfn4KSYbTc+jpctQyZqZKLLC6ImCStcZK+DkMTtztEz0t+nab7dOu8fJ/wCK1/jZwyx+sb2m3aXiyL3uqU33POXyQA8olJ5GcvMQ7YbHoAd/S6a78ongrkfKP0fTwWcrYmiadxluC7WsSGWP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", + "image/jpeg": "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", "text/plain": [ "" ] @@ -470,20 +458,12 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-09-22 13:25:01,619 - BUILDER - INFO - Building Flo instance from YAML\n", - "2024-09-22 13:25:01,627 - COMMON - INFO - Flo instance created for session 11351ff8-1110-4724-9e15-042eeccd99b4\n" - ] - }, { "data": { - "image/jpeg": "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", + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCALZAWMDASIAAhEBAxEB/8QAHQABAAMBAQEBAQEAAAAAAAAAAAUGBwQIAwIBCf/EAFoQAAEEAQIDAgkFCgkJBwIHAAEAAgMEBQYRBxIhExQIFRciMUFRVpRCVdHS0xYjJDI2VGFxdZI1dIGTlbKztNQYMzQ3UnKRscFDRFNkc4KhJWIJJzhjdqPD/8QAGgEBAQEBAQEBAAAAAAAAAAAAAAECBAMFBv/EADYRAQABAgMECAUDBAMBAAAAAAABAhEDElEUMVKRBCFBYnGSodETM2HB0iJCsQUjgfAyssLh/9oADAMBAAIRAxEAPwD/AFTREQEREBERAREQEREBERAREQEREBFzZHIV8VSmt2pOyrxN5nO2Lj+oAdST6AACSSAOqgGYS5qpgsZt89Om8Ex4eCXkAaR07d7er3+1rXcg328/YPPrTReM1U2j/dyxCatZ3G0ZOzs5CrXf/syztaf+BK+H3VYT54ofFM+lfKtorT1NgZBgsbE3YDZlSMf9F9vuWwvzRQ+GZ9C3/Z+vodT+fdVhPnih8Uz6V+mamw8rg1mWovcfQG2WE/8ANfz7lsL80UPhmfQv4/SeDkYWPw2Pc09C11VhB/8AhP7P19F6ko1we0OaQ5pG4I9BX9VZfoWpQe6xgJDgLe5dy1m71pCf/Eg3DXAn0lvK707OG6ksHmX5Lt61qA1MlVLW2IN929R5r2O+VG7Y7O6egggOa4DNVEWzUTePVLaJREReKCIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIKxnNsrrHCYt+zq0EcmTlYd/OexzGwj9Oznud19bGn9VnVYtjufEbHTO35LuOmrtdt052PY8Df2lrnn/ANp/QrOujF/40RG633lqexi2nPCjw+tjn36c0lq7L0MXDcfFlocWO5XpK+4fFBIZAXPJGzQ4N3Pr6FQXg5eEtmeKHBOXVue0bnzkadd1mR2MxoMGT3mlaGUG9q50hYGNa4O2O/rKrOg+E2uaPhEHO4rRjuGej7ByH3QQxZ6O5SzbntLa80VVn+Zl5tnuJDfWPbzVjT/CfjVj/BZvcJotMsxF7Cua2tlqeeiYM7AbjpZYYy3z6/NG4jd5G/oOwJ252Wz0PCy0tZ0prbMXcHqXB3dH12W8pgctj218g2J4Jjexhk5HB2x2PP6uu243ofFXwysji+FEOq9J6D1RWitXqMFa9nMUxkFiCdxJfEBNzElo2aSAC57PSDus0qeDPriClxfZhuGEGjsdqnSkdLGYiDOQW3MtRyjdksjngc7wXP5tywDYF3NuFu/HXhNqbW/g04vTeCpwy6mxjcZajoTztjZLJWdG58Xab8oJ5XAHfbcDrt1QbDozUr9YaZpZiTDZTT77IcTjczC2G3Ds4t2kY1zgN9txs49CFx6p2xWdwGXj2aTZ8XWD/txTdGj9YlERBPoBft+Md/voLNZ3UOlqd/UunDpPMyl/bYg3Y7hgAeQ3eWPzXczQHdPRzbepfDW4727AY9u5ks5WCQADfZsJM7ifYPvW2/tcB610YHzIjs67+Fuv0WN6zoiLnQREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERBF6iwvjug1kcor3a8gsVLBbzdlM3flcRuN2nctcNxu1zhuN9188NqKPIzOpWmdwy8Q+/UpHdSB8uMkDtIz6ngfoIa4FomFH5jA4/PwMiyFWOy1h5o3O6PjO227HDq07dNwQV7U1UzGSvd/H+/79b4pBFVzoXkO1fUOerR+gMF3tdh+uVr3H9ZO6/n3ET+9Oe/n4vslrJh8fpJaNVpRZXwtx2U1hoqrlchqnMi1JYtRO7CWIN5Y7Msbf+zPXlY3f9O6tg0RKQQ7U+ee0+kd4jH/yIwU+Hh8fpJaNU5lcvTwlQ2b1hleEHlBd6XuPoa0Dq5x9TQCT6ACovDULGQyjs5kIe7zGIwU6rj51eFxDnF/q7R5a3cDoA1o67En64rR2LxNwXWQyWsgAQLt2Z9iZoPpDXvJLAf8AZbsOg6dFNqTVTRExh9vabtwiIvBBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQZ7wEIPDChsdx3zIen+Oz/pK0JZ7wE38mFDfb/TL/4u23+mz+xaEgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIM84BDbhfQ6h34ZkOoH/nZ1oazzgFt5LqGx3HfMh6Rt/32daGgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIip9rV+UyM8viGhUnpxPdEbl6w6MSvadndm1rHEtBBHMSNyOgI2cfXDwqsT/AIrEXXBFSPHmsPzHB/FTfZp481h+Y4P4qb7Ne+y16xzgsu6KkePNYfmOD+Km+zTx5rD8xwfxU32abLXrHOCy7rNPCG4u3uBnDK5rGppp+qIaMsYt1Y7YrOihcSDLzcj99nFgI29Did+nWU8eaw/McH8VN9muHPfdHqbCX8RksVgbWPvwPrWIX2ZtnxvaWuH+b9hKbLXrHOCzDvAW8Jqzxqr5LTcGjpcVjsLHNbmy5vCVhlnsukjh5BE3Ylr5Dvv/ANn6OvT1svPHg8cG8n4OehpNOYSviLvb25Ldi7YnlEkznHZoO0foawNaB+gnpuVqHjzWH5jg/ipvs02WvWOcFl3RUjx5rD8xwfxU32aePNYfmOD+Km+zTZa9Y5wWXdFSPHmsPzHB/FTfZp481h+Y4P4qb7NNlr1jnBZd0VLZqLVUG8k+KxdqNvV0VW49shH/ANvPHyk+wEtHtIVpxWUrZrHQXqjy+vM3maXNLSPUQQeoIIIIPUEEFeWJg14cXnd9Oss60RF4IIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAs64dnfRGHJ9JgBP69ytFWc8OvyHw38XH/VfQ6P8AKr8Y/ipexY0RZPP4UvDaDM3cX44yE1ylckoTivgchMxk8byx7O0ZAWnZwI3B2/StTMRvRrCIioIihdY6xw+gNO2s9nrfcMTVLBPZ7J8gj53tY0kMBO3M4bnbYDqdgCVBNIo2zqTGVNQ0cFNcjjy16vNar1TvzSRROjbI4eroZY+npO/TfY7c+nNZYfV02YixNzvjsRefjbpET2iKwxrXPjBcAHbB7dy3cbnbfcEIJpFX7Gv9P0slnKNnKRVJ8HUjvZF1gOjjrQPDy2R0jgGbbRvJ2J2267dFOV547UEc0LxJFI0PY9voc0jcEIPoiIqC5uGB30vN+jK5MDb2C9OF0rl4X/kvP+1sn/f50xPkVeMfxUvYtqIi+YgiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICznh1+Q+G/i4/6rRlnPDr8h8N/Fx/1X0Oj/ACq/GP4qXsWNecfBrpa1dk9Xz1crhI9IjWmb7ajLQlddce9Sb8swlDB52x6sPQH9a9HLKZfBc4byZu5lhh8hDdt3JMhO6vnchEx873l739m2cMG7iTsBt+jZWYm90UQt1LpLjLkYdT5zUNexqK9bh0pk4Mh2uE2dXeYak9T0Mlj5XPDuXzyzfm9IMBpzWL+Geh9X4PXWS1zDrivjKbrUQzAuG26Wbu8dnGyu6RCWZ4aWuDeToOUbEncBwF0J91VrUbsCJctYfNK+Sa3PJG2SZpbK9kTnmNj3Nc4FzWg9T1XPivB04d4bD5jFwabjkp5aBlW423ansvfEx3MyNr5HucxrXec0MIAIBGxAWcsjFtL4ziHPf4mcPnZbMYnJfc/TzOFFnUUmTs07RlmDW96LGO5HuhYHRnmbtzAEhxCmtNZw+FlYzwbbs1dKt0izF2aLZXNiGUus55udgOzn12NjA5ty0yO2Wp4vg3guH7shmdFYevDquSi+pHayd+1I2xu4OaLEjnPe8Atbs4hzmjcNIBIXRwX4ZDhZpCehNLWsZXI5Czl8lPTiMUL7M8he8RtJJDGjlY3c77MG6kUzuHk7D62zORgxfHDKxXGDh07H6ayNUA/fW9k+LKScvyiJbMJB/wD2D6VbuGujM3Y1FwzwGQ1DmsK3Pacymps7XxV6Sq61asWoJdnOYQWuYZw3maQ7Zhbvs47+nZeHmnJtNZnT78TCcPmX2ZL9Xd21h1hznTOJ333cXOO4I29W2wXTLo/DzappajdTHjmlTlx9ewJHgRwSOY57OQHlO5jYdyNxt0I3KRQPMPFTF2G4/wAJfAyZvO28XT0tj79aC1lrEogkMVxzwzmeeVjzEwOaOjgNnAgqW134+0vjeE2gtJ5DJzQan7zZs2bupLFexL2NaORtdl1zJpImu5i4NYAdoyGloJXoF+gNPyZXUORkxsc1rUFWKjlDK5z2WoI2yNYxzCS0ACWQHYDfm677BVlng8cP26PGlnYF02EbZbcignvWZX15mtDWvhldIZIiGgAcjm7DoPSVcsjF9UYjidpHSGNxWX1JbxEWR1th6mNsU83JkLtatK8MniksPhiMrebzmh7XdHbO5gAvTOmNOQ6Uw0WNr28hejjc9wnyl2W3O4ucXHeSRxcQN9gN+gAAVex/BfR2MwdDEV8Q4UaOUizULZLc8j++RuDmTOkc8veQWj8YkHYAghXZWIsC5eF/5Lz/ALWyf9/nXUuXhf8AkvP+1sn/AH+dbxPkVeMfxUvYtqIi+YgiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICznh1+Q+G/i4/6rRlQm4vMaTa6lSxMmaxzXOdXfWnjZLG0u37N7ZHNB5dyA4HqAOgI69/R5iaaqL2mZjf1br+7UbrJpFCeNs/7m5P4qn9uuTL6tyOAxlnI5PTFzH4+swyz2rN6lHHE0elznGfYBdHw+9Hmp9yyzIqxiNVZnN4ytfr6KzccFhgkY206tXlDT6OaOSVr2H9DgCPWF2eNs/wC5uT+Kp/bp8PvR5qfcsm0UJ42z/ubk/iqf26eNs/7m5P4qn9unw+9Hmp9yybRQnjbP+5uT+Kp/bp42z/ubk/iqf26fD70ean3LJtFCeNs/7m5P4qn9unjbP+5uT+Kp/bp8PvR5qfcsm0UJ42z/ALm5P4qn9unjbP8Aubk/iqf26fD70ean3LJtcvC/8l5/2tk/7/OuBt3UdoGOHS1ipKejZL1uuImn2u7OR7th09A3XjDw7vBa1lj8PLrzSefzOax0TDLncMLMhbC7qX2oYg4gRk7l7Opb+NuRzFvljTFOFNF4vMxumJ3ROnibof6Fosf4I6QyPg/cIcJpLIY6xlIMRFCw3sZM67JYmnc6S0/s+zY5rGTSSBoAeTHyE9eYDUcbncdmJ70FG9Xtz0Ju7W4oZA59eXlDuR4HVp5XNdsfSHA+ghfNZd6IiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIir2qdW+IpatCjSfl89dJFXHxv5BsPxpZpNiIoWb+c8gn0Na173MY4PtqvV9DSFKKW2JrFqw/saePpx9rZuS7biOJg9J26knZrWgue5rWucIPFaQv6iyFTOawLJLNd4mo4KJwfUx7wTyyE7AzT9R57vNZsOza08z39+lNFnD25cxlrYzOp7MfZT5Ex9myOPfm7GCPc9lECB5u5c7YF7nuG6tCAiIgIiICIiAiIgIiICIiAo3NacxmomVm5KjDc7rYjtQOkb50UzCeR7Helrhu4bj1OI9BKkkQV9uEzGOma7H5szwy5F1qzFlYe3LYHDzoIHMLDHyu85pf2m25btsW8irqa1FPTrZbDWqNm3ZlrxuqtdbgAZ1a98jG/e2vb6C8N6+b6S3msCIOLDZvHajxkGRxN+tk8fOCYrdOZssUgBIPK5pIOxBHT1grtUTc0tjbmQqXzA6G7UEwgnryOjLe1H3zcNIDtzs7zgfOAPpG64Ia+osBBCwWRqWpWoyc7rDWQ5CzYad2ec0MhPMPNPmxgHrvsdgFlRROJ1NSytltPd1TKirFclxlnlbYgjk325mgkdCHNJaSN2kbqWQEREBERAREQEREBERAREQEREBERAREQEREBERBX9Z6rGlsfXFev4wzF+YVMbjw8MNmctLti75LGta573bHlYxxAcQGn+aR0n9zkVi1cteNM/f5H5HKOiEZnc0bNaxgJ7OJgJDIwTsCSS57nvdBYAO1Fxb1RkZw4wafhgw1NrgQGyyxR2rDx6jzNkqt326dmevUhX5AREQEREBERAREQEREBERAREQEREBERAREQR+dwVPUmMnoXmSOrzN5XOgnfBK3qHBzJI3NexwLWkOaQQQCCCFyC7kMVkeyvfh1O5b5KstWsWmqwx78s55iHDna4CQBv47Glu4L3Ta+divFbrywTxMmglaWSRyNDmvaRsQQehBHqQfRFXcFMzBZM6dlmpQsEJmxNaOWQzuqxiNknMH778j5GDmaSNpIwQ3pvYkBERAREQEREBERARFCZjW+ntP2hWyecx9CztzdjYssY/b28pO+y3TRVXNqYvK2um0VW8qmjvejE/GR/SnlU0d70Yn4yP6V67NjcE8pXLOi0oqt5VNHe9GJ+Mj+lPKpo73oxPxkf0ps2NwTykyzotKKreVTR3vRifjI/pTyqaO96MT8ZH9KbNjcE8pMs6LSiq3lU0d70Yn4yP6U8qmjvejE/GR/SmzY3BPKTLOi0rgzmexmmcXPk8xkamJxtcAzXL07YYYwSGjme4gDckDqfSQoXyqaO96MT8ZH9KiNXaq4e630vldP5fUOIsYzJ1pKliPvke5Y9pB269CN9wfUQCmzY3BPKTLOis8HOKOjM7rviDQxursHkb+R1EJqdWrkoZZbLG4ukHOia15L2js5Ny0bDkd7CVsy/zf8CHgVieFnHDVWpNVZvGxRadkloYSxJZY1twyBzXWY+vVvZEt/XIR6Wle9/Kpo73oxPxkf0ps2NwTykyzotKKreVTR3vRifjI/pTyqaO96MT8ZH9KbNjcE8pMs6LSiq3lU0d70Yn4yP6U8qmjvejE/GR/SmzY3BPKTLOi0oqt5VNHe9GJ+Mj+lPKpo73oxPxkf0ps2NwTykyzotKKreVTR3vRifjI/pTyqaO96MT8ZH9KbNjcE8pMs6LSiqw4paOcQBqfEkn0AXGfSp/G5WlmqbLePuQXqr/AMWetK2Rjv1OaSCsV4WJRF66ZjxhLTDqREXkgiIgIiICIiAiIgIiIK3rm4zC46tmpMhXxdbG2GS2rFmt2oNcnlkZuOrNw4HmHoLRv03VkXHma1i7iL1eraNG1LA+OK0IhKYXlpDX8h6O2Ox5T0O2y5NIZqvqTSeFy9O83KVL9KG1DeZEYm2GPYHNkDD1aHAg8p6jfZBLoiICIiAiIgIiIOLNXHY7D3rTAC+CCSVoPta0kf8AJVHSVWOvp+lIBzT2YWTzzO6vmkc0Fz3E9SST/J6PQFZ9VfkxmP4nN/UKr2mfycxX8Ui/qBfRwOrCnxa7EkiItMiIiAiIgIiICIiAiIgIiICIiAiIgIiICiabhjNfUGVwI2ZKrYNljegkfGY+R5Ho5gC5u+25BG580KWUPJ/rC05/Frn/ACiW6euKo+k/xKwvaIi+SgiIgIiICIiAiIgIiICrnDzJDK6Px84zA1A4dpC/Iip3Xtnskcx33rYcuzmluw6dNx6VY1XdA5I5bTpnOZbnnNu3YDdbW7uN47UsZi5Nh/m+Xs+b5XZ83ykFiREQEREBERAREQReqvyYzH8Tm/qFV7TP5OYr+KRf1ArDqr8mMx/E5v6hVe0z+TmK/ikX9QL6OD8mfH7NdjttvmjqzPrxNnsNY4xxPfyNe7boC7Y7An17Hb2LCfBdyOqdav1Vq3VXeop58ncpVoG5uSzUjZFZkjMTK3ZsZH2fZNaJOrpN3E8u+y3tZVo3hzqjRPCLUuBoXMc3Uty3lrVCz2snYQus2JZYXPPJzbtEjSQGnqCAT6UneyzbiXq7O2/B84ya7oZvI0m2rMkWDkq25I+7Va0jK4kh2I5DJIyaTmGxcHt9gU9ka+Q4AcR9ERwatzuc0rqW1PjL9LUeQdefWlbA+aOxFK/z2gdm5rmkluzgdgQrTxK4MS5zwcr/AA001LWrSeKosZTluucyIdnyAOeWtceoaSSAepUZU4T6x4g61xOf4mW8Gynha9mPH4PTrpnxOmnjMUk8ssoaXERlzWtDRtzE7+3FpuK3p/w0cFnc7hWipim4LM34qFOeHUVWbJNdK/kikmoN8+NhcW7+c5zQ4FzR12+ul+N8fDjhdqrUGo7s2Tm+7bK4jHx3rzYw5xuyMhh7aV3LFGxrSdyQ1jGHYdAFYOEnDniDw3hwel7UulMnpHD7wQ5QxzDJzVmtIhY6PlEbXt8wF4eQQ38Xc7qDv+Dvqaxgs7joMviYpaur3ax01bkikfyzvlkkkgtx+gs++vYHMO5Dt9gRsX6gxfhh4eTFamdfx1GbLYetXsxVdOZuDLQXO3nFeJjJ2BoY/tXMa5r2jYODuoVk0/xp1TkM/rDA5TQ1fG53A4uvkoqUebZK242V0gHLK6JjWNHZkOc7bY79COqh+JmE1PkeB2uYtc19I43ta8QrjFi5NDDyvaTJJI2MS8wcGuaWRnkLQSHAFZLw9xNjjRp3X+k6MtHLZfI0qNmfWceVtZOpb7GdpZQsSSQQloLWvBbGD5sjyRv6V5iRqWL8JS/rPSXEWvjMZi6mrdOYo34hj85DkacjHNk2e2wyMjnYY3bxuZ6Q0eh24j7vErWbuAehczqHEvgkyN3CxT38NqIw2HxTPr8thx7tt98e/Z8A6cpcOfr0ndOcGNU2dY6nyuoG6cxWPz2mRgHUdP8AanuZY9/IWl7GiQFs0hJ2ZtysaGnq5fFnCPX2W4N4TRWZm062zg7mH7rbpTz8tivTnie90gdH5kjmRDZrdxzH8YBP1CS1R4QeSxl3V1jBaKn1FprSEhhzeVbkGQSNkZG2WZteEtPbGNjgXbuZueg3Xyy/hD5WTKari0vo1uo8dp3H1crYvvyraonrT1zO3smGJxMnKHbNOwO3VwJ2XDqbg1ryu7iBhNJ5PAwaY1vZltWrGSE3fMbJPCyGyYmMaWS8wZzN5nM5XE77qZ05wRu6Xs8RYadir4tzmFoYnFtfI4yRivTfX3m8zYAlzTu3m6b9B6Ff1Cq6u47WfLbwgdipZxpLM4o2si0u5Whl90cdF7277biVoaD6u0d7V+uDfGjPaqznGKwKkmWjp3W38BSmttgZNSHaVWlj3+bGxz6UjyT03eXfK6/jF+DNm59H6ixeXyFAXrGj8Np7FWaksh7pYpRPf2xJY0hveXNe3bc7MB2B6L8a28FrJZDFVsTp3IUKmNj0jW09M24ZB3iStbisRdo1o86KQCwyQ77/AH3oHdQp+reJLCeFbDkNMcQrlnCUDl9IYvxs+pic7FkKtuItkIDbMbPNcHROa5rmbt3B6gq2aX4xZbJa1x2ns9pI4B+Zxk2Vw8rciyyZ2RGPnila1gEUgErDsHPb1PndFQMtwE1xqM6+sWxpPFP1LpA6er0cW+dsNOVjnmIlxiHOwiZ/M4NaW8rQGu6lXbWnB/L6p1HpK5XycGOgxencrh7FiJ7+3ZLaigZHLEOXY8picTuWn8XbfrtYzCH0n4T0d7XE2mdTYbH4K2KNq8043PwZV0QrgOljsMiAMMgadwPOB5XAHov7pTwi8vntR6LgyejGaf0/q2pYyONyljKtlkNaKDtt5IWx7RvLCx3KXkBpd5245TA6P4D6vweW0BZyVXRtLEaToW8bJTxbZ3G5FNXEb53l0Y3cXRsJj2O/NIe0J2Cy3wer9B2uNN6bnFHWzH0reLhkxuXv2Dp6u+Iuk/BrFaMV43cjYhzPMgBa3dwB3zerquNU0/4aOCzudwrRUxTcFmb8VCnPDqKrNkmulfyRSTUG+fGwuLd/Oc5ocC5o67X3hLxcz3FSa1aZpCPE6frXbuPfkJsoHySSwTOjBjiEQ5mO5epc5paeYbOA5jD8JOHPEHhvDg9L2pdKZPSOH3ghyhjmGTmrNaRCx0fKI2vb5gLw8ghv4u53Vu4LaDyHDjRUmHyU1aey7KZC6H1HOczkntyzMG7mtO4bIAem2++xPpWozdovah5P9YWnP4tc/wCUSmFDyf6wtOfxa5/yiXvR2+FX8SsL2iIvkoIiICIiAiIgIiICIiAq7oPInKYCWc5hudIyN+Hvbavdw3ktzM7Hk269ly9lzfL7Pm+UrEq7oLI+NcBLP44ZnNsjfh72yt3cN5LkzOx5PWYuXsi75Zj5vlILEiIgIiICIiAiIgi9VfkxmP4nN/UKr2mfycxX8Ui/qBWnM03ZHEXqjCA+eCSIE+ouaR/1VP0lcjsYGnCDyWasLILFd3R8MjWgOa4HqCD+jqNiOhC+hgdeFPi12JlERbZEREBERAREQEREBERAREQEREBERAREQFDyf6wtOfxa5/yiUwomiG5bXlGSs4TR42tYFmRh3bG+Ts+SMn0cxAc7bfcADcecFunqiqfpP8SsLyiIvkoIiICIiAiIgIiICIiAq7oLI+NcBLP44ZnNsjfh72yt3cN5LkzOx5PWYuXsi75Zj5vlKxKu6CyPjXASz+OGZzbI34e9srd3DeS5MzseT1mLl7Iu+WY+b5SCxIiICIiAiIgIiIChsxovT+obAnymDxuSnA5RLbqRyvA9m7gTsplFqmuqib0zaTcq3ks0Z7pYT+j4vqp5LNGe6WE/o+L6qtKL22jG455y1mnVVvJZoz3Swn9HxfVTyWaM90sJ/R8X1VaUTaMbjnnJmnVVvJZoz3Swn9HxfVUNmuH2mnvfjsPo/BNyUtaSSK9ZxEclSu4Oa0doG8ped3EiNrgXBjgXM6FWm/cuXsgcdj+2pvgfDLYuTViYnR827ooydg5zmtLSW7hnNueuwPbiMPSwNBlLH1o6lVjnvEcY23e9xe95PpLnOc5znHcuc4kkkkptGNxzzkzTqrNLg7oqj25Gl8VK+eTtXumpxv8AO5Q3zQRsxuzR5rQBvudtySenyWaM90sJ/R8X1VaUTaMbjnnJmnVVvJZoz3Swn9HxfVTyWaM90sJ/R8X1VaUTaMbjnnJmnVVvJZoz3Swn9HxfVTyWaM90sJ/R8X1VaUTaMbjnnJmnVVvJZoz3Swn9HxfVTyWaM90sJ/R8X1VaUTaMbjnnJmnVUrHCXRVqvLC/SeGDJGljjHSjY4Ajbo5oBB/SCCFCeSvA4GydtI4jM4yWWtBBDHjYe8VGkckkkkjz99aDyPPywC8+f5oWkIm0Y3HPOTNOqmYzQGgMzUbaoac09crlzmdrDRhc3ma4te0kN6FrgWkekEEHqF1eSzRnulhP6Pi+qpC/gHNtNvYyd1G5G2d3YN2bWtSSNABnaBu4gsYQ4bOGxAOznA/vD53vs/cLkTaeZirQ2LNVjnPjZzg79nKWtEjQ5rm7gA9BuG7hNoxuOecmadUZ5LNGe6WE/o+L6qeSzRnulhP6Pi+qrSibRjcc85M06quOFujWkEaTwgI6gjHxfVU/j8bUxFRlWjVhpVY+jIK8YjY39TQAAulFivFxK4tXVM+MpMzO8REXkgiIgIiICIiAiIgIiICrugsj41wEs/jhmc2yN+HvbK3dw3kuTM7Hk9Zi5eyLvlmPm+UrEq7oLI+NcBLP44ZnNsjfh72yt3cN5LkzOx5PWYuXsi75Zj5vlILEiIgIiICIiAiIgIiICIiAobNZiWO7VxeNlpPysxbM6C1MWuZWDwJZQ1oJdtuAB0Bc4bkKXkkbFG573BjGguc5x2AHrJKr+jJfG1GTPd9F+HL8lqnI6iar4qhaDDEQ7zztu555+vNI7o0bNASuGw9TT+LrY+jEYqtdvKxrnukcfWXOe4lz3EkkucS5xJJJJJXaiICIiAiIgIiICIiAiIgLhzGHrZyn3a0H8gkZKx8Ujo3sexwc1wc0gjYtHT0HqCCCQu5EENRydupfbj8t2T7FmWw+pPUhkbE6FpBYyQncNlDXbbcx5+ze9oaN2MmVyZbF181jLVC0JDXsRujeYZXxSAEelr2EOY4ekOaQ4EAgggFcOncjasd9pZAQMvUpizlhsCV0kJJ7KVw2BYXNHVpHRzXbEgAkJlERAREQEREBERAREQEREBERAVd0FkfGuAln8cMzm2Rvw97ZW7uG8lyZnY8nrMXL2Rd8sx83ylYlXdBZHxrgJZ/HDM5tkb8Pe2Vu7hvJcmZ2PJ6zFy9kXfLMfN8pBYkREBERAREQEREBERAREQV3Xdsw4A1GXLuPsZKeLHw2sfD2k0TpXBvO0Ho3YEkuP4oBPXbZWJV3OzmTVemabbGRgdz2LhbUj3rzNZEYyyd/qbvO1zR63MB+SVYkBERAREQEREBERAREQEREBERAVdhgMPEG5KyHGMbPjIWySsdtekLJZeQOHrib2j+U+pz3+1WJeAKfhVccJ/Cl8mrtJaJZqPvfiyTJDG2+YUmuMnbb9537PkJk2/Sg9/oiICIiAiIgIiICIiAiIgIiICrugsj41wEs/jhmc2yN+HvbK3dw3kuTM7Hk9Zi5eyLvlmPm+UrEq7oLI+NcBLP44ZnNsjfh72yt3cN5LkzOx5PWYuXsi75Zj5vlILEiIgIiICIiAiIgIiICIiCuzSmTiFTjE+Sa2LFzuMDI/wACeXzRbOe7/wAVvIQ0f7L3+1WJV2KTm4h2mdrlfMxcR7Nzf/p/nTSdWn1zeb5w9TeT2qxICIiAiIgo8+Uy2prdt1LJSYbHV55Ksbq8Mb5pnMcWPe4yNc1recENAb6G8xceblb8fE+d99Mx8PR/wy+WiP4Ht/tXJf32dWBfZqth1TRTEWjq3RP8w1M2myE8T5330zHw9H/DJ4nzvvpmPh6P+GU2izn7seWPYuhPE+d99Mx8PR/wyeJ8776Zj4ej/hlNomfux5Y9i6E8T5330zHw9H/DJ4nzvvpmPh6P+GU2iZ+7Hlj2LoTxPnffTMfD0f8ADJ4nzvvpmPh6P+GU2iZ+7Hlj2LoTxPnffTMfD0f8Mqy3g5VZxDfrludyQ1W+j4udkuwp85g5ubl5e78u+/ytubbpvt0Wgomfux5Y9i6E8T5330zHw9H/AAyeJ8776Zj4ej/hlNomfux5Y9i6E8T5330zHw9H/DJ4nzvvpmPh6P8AhlNomfux5Y9i6E8T5330zHw9H/DJ4nzvvpmPh6P+GU2iZ+7Hlj2LoTxPnffTMfD0f8MnifO++mY+Ho/4ZTaJn7seWPYuhPE+d99Mx8PR/wAMnifO++mY+Ho/4ZTaJn7seWPYuiq2Uyum71IXsjJmcdamZVe+xDGyaF7yGscDG1rXNLiAQQNuYEHpsbws91p/B+N/bGN/vsK0Jc3SKYy01xFpm/pb3Sd1xERcKCrugsj41wEs/jhmc2yN+HvbK3dw3kuTM7Hk9Zi5eyLvlmPm+UrEq7oLI+NcBLP44ZnNsjfh72yt3cN5LkzOx5PWYuXsi75Zj5vlILEiIgIiICIiAiIgIiICIiCuVpQeImRj7fKEtxVV3YPb+AN3msecw/8AjHbZ4/2RF7VY1XK0+/EPIw95yLuXFVX92fH+Bt3msDnY71ynbZw9TWx+1WNAREQEREGeaI/ge3+1cl/fZ1YFX9EfwPb/AGrkv77OrAvsY3zKvGVnfLM9X8esVprVdrTeOwGotY5mjEya/X03RbYFFrxvGJnOexrXOG5DAS4jrtsp/EcScfl9aM0u2lkKuUdhIM64WoWxtjhlkfGI3Dm5hIHMO7dth7d+iyjgtq7BaC15xgwWqMpSwmek1PPmWuyU7IO8UJoouwkY55HMxoY5p23DSOu264svo/R3G7wk3S5OCDUmAn0HTtVSyd3YSh92xyyDlcA4gHzSeo33GxXNeUekVC6g1hitL3cJUyNgw2MzdFCiwRud2s3Zvk5dwNm+bG87nYdPaQvIWGu1uJ3DvhRpXO1MJkcg3C377s5rGxM6tDBBYEGzY2Sx9tNsGHmc8cjWl2/nFfDGUMFrrg34OuR1i2hn6kepbOJmv5HaWN1cC7GyNz3k+a4wQfjHqWN9JUz6D0VrLwgqGj9bZDTEektVahuY+lDfuT4OjFYigikLw0kGUPJ+9u6NYfR61fNH6uxOvNMY3UODttvYnIwievO0FvM0+0HqCDuCD1BBBXnmTB6pynhGavp8PNQ4fTVMaXxEbrM2ON0Nh5rIjMAEjGjlAO2/MD09i5NE+D/pTEcdWaQv1TnsTgdD48RQ5Dzo5pjetudM9n4pfzF5G4PLznZW8j1Si8PahZh3cLNa62uXR5bKeqLFelL3p3foLLLwjq1IY+bfsnQ8g5AC1zXuJ39K6OJOjcTktAeEHqixVJ1Fh9UnxbkWzPbNRIhpO3hcCOzJL3bluxd0332GzOPbKLx9xj0piuHOT4r4LTdNuJw17hlYv2KUDndlJZZNJGJiCTu8scQXek+vcqaw2B0Zh+LvC3HaHFFxzuKvN1PSx0/bRW6XdAWS2WhxBPbFjQ93V3O4bnrszDbLPF6jPoapqrT2EzesqFqy+tHBhKzDOeR8jHSFkz49mB0ZG++/UdOqr3DXwiYeKGUirY7QOsqNN1menLlMhUrMq15Yi4SNkcyw5wIcwt6NPUj9arHgW6f0rg+FMD8RSxlLUM09uHKCs1jbLuyuTtY2UDzvNaQBv6AR7VlGUyGQq8EqtKK/XxWEyfE3I0sxdutkdWZWdbs8rZ+zkjcInSiJriHtGx2J2JBmabRI9tIvGOtOG40Xwj1+aGq8DbxVi1hInYXScctavQnGRgPbNDrMxie9jm78pbvyNO2/VWW7wO0O7jfrnT40/XZhG6Qq5FmPY54gZbdNZjNhrN9hLyxs++bcw2J33J3uadB6pVbz+vMfpzVultPWYbL7uopbEVSSJrTGwwwumf2hLgQC1pA2B6+nb0ryroCrpniFqzhrLxGdQycM/C+Cd7s1OAyWUWGbvdzEBztuY7ncjqf0r78M82G5jgras5F8unIdU6ko4PIXpie1o9jYjqDtHnd24HKzc9QGgepMw9jqFwmsMVqHMZ3F0LBmuYSwyreYY3NEUj4mytaCRs7zHtO43HXb0grxvqzJUbeuMbxCxMWn9L2xr+DEbGzO/NXGtuiCx2pMoYyNzec9j2bgGEHcLQ9Dab09pzi1x2v4nEYqLXdW52+IaYmC050uNjlPZg9SJJO0cdvSS79KZh6fReMeAugW6kj4dauqa80rV1DZmhuXpK1awMzknhhdbqWHvuuEjthIHDstmlvM1rQAF7OWqZuIDWn8H439sY3++wrQlnutP4Pxv7Yxv99hWhLPSPl0eM/ZewREXAgq7oLI+NcBLP44ZnNsjfh72yt3cN5LkzOx5PWYuXsi75Zj5vlKxKvaEyQyuBlnGXbnAMhfh722t3cN7O3MzseXYf5rl7Lm+V2fN15t0FhREQEREBERAREQEREBERBXa0+/EPJQ95yDuXF1X92fH+Bt3msDnY71ynbZw9TWx+1WJV2tPvxDyUPecg7lxdV/dnx/gbd5rA52O9cp22cPU1sftViQEREBERBnmiP4Ht/tXJf32dWBQGiWluItg7bjK5HfY+j8NmU+vsY3zKvGVnfKB1LoHTGs5a8uoNOYjOyVv8w/JUYrBi/3S9p5f5FIQYHGVskMjDjqkWQFZtPvbIGiXsGuLmxc4G/ICSQ3fYEk7LuReKK3b4aaQv4yhjrWlcJZx+PeZKdSbHQuirPJ3Lo2FuzCSd9wB1XRa0Lpq9h7WJs6exVjFW5nWLFGWlE6CaUnmL3sLeVziepJG+/VTiJaBF4rSuFwNgz4zD0MdOa8dQyVKrInGGPfs4t2gHkbzO5W+gbnb0roZhsfHl5cq2jWblJYW1pLohaJnxNcXNjL9uYtBc4hu+wLifWuxEEFNoPTVjUkeoZdO4qXUEYAZlX0ojaaANgBKW8w6dPSvrY0dgLVLJ058HjZqeUl7e/XkqRujtybNHPK0jaR2zGDd2581vsCmESwpvE3hnj+I2k9SYzlrY/KZjETYfxx3Vss8MMgPm77tc5gcebk5gN13aN4d6c0HXIwuDxeMtSxsZZs0KMdd9ktG3M8sALjv16k+lWREtG8Q+N0dgMNmb2Xx+DxtHK3/wDS71apHHPY67/fJGgOf169SV+49J4OLE28WzDY9mMtvkks0m1WCGZ0ji6Rz2bbOLnEkkjqTuVKogrtHhxpPGYOXC09L4aphpZGyyY6DHwsrve1wc1xjDeUkOa0g7bgtB9SlDgsa7JT5E4+qchYgbVmtmBvayQtLi2Nz9tywFziGk7buPtK7kQZhkfB90tl9fUc3exOIuYSlghha2nrGKikrQ7TiVsjAfNbsByhoZ039PqV8uaXw2Rx1ShbxFG1RqPjkr1ZqzHxQuZ+I5jSNmlvqI9HqUmiWgVu3w00hfv371nSmEsXcg0NuWZcdC6SyAQQJHFu7wC1p679QPYuyxo7AW9RV8/Pg8bNnq7OzhyklSN1qJuxHK2UjmA2J6A+sqYRLCAo8P8AS+M1BPnqem8RUzk5JlycFCJlmQn080obzHf9JU+iIIDWn8H439sY3++wrQln2sml9HGtG25y+OOxPsuQk/8AwCtBWOkfLo8Z+y9giIuBBV3QWR8a4CWfxwzObZG/D3tlbu4byXJmdjyesxcvZF3yzHzfKViVd0FkfGuAln8cMzm2Rvw97ZW7uG8lyZnY8nrMXL2Rd8sx83ykFiREQEREBERAREQEREBERBXa0+/EPJQ95yDuXF1X92fH+Bt3msDnY71ynbZw9TWx+1WJV2tPvxDyUPecg7lxdV/dnx/gbd5rA52O9cp22cPU1sftViQEREBERBVclpO/DdsWcHfr022XmWarcrumiMhHV7C17SwnoSOoJG4ALnE8XiDWHzng/gJvtld0XVHScSIt1T/iFupHiDWHzng/gJvtk8Qaw+c8H8BN9srui1tWJpHKFupHiDWHzng/gJvtk8Qaw+c8H8BN9sruibViaRygupHiDWHzng/gJvtk8Qaw+c8H8BN9sruibViaRygupHiDWHzng/gJvtk8Qaw+c8H8BN9sruibViaRygupHiDWHzng/gJvtlX23tXO19JpjvWF52YxuS7z3ObYgyuj5OXtf/t3339a1dZ5G4f5QVhu3X7l4zv0/O3ptWJpHKC7s8Qaw+c8H8BN9sniDWHzng/gJvtld0TasTSOUF1I8Qaw+c8H8BN9sniDWHzng/gJvtld0TasTSOUF1I8Qaw+c8H8BN9sniDWHzng/gJvtld0TasTSOUF1I8Qaw+c8H8BN9sniDWHzng/gJvtld0TasTSOUF1I8Qaw+c8H8BN9sniDWHzng/gJvtld0TasTSOUF1Vxmk70l+vbzl+C6aru0gq067oYmybbc7+Z7i8jc8o6Ab77FzWuFqRFz4mJViTepL3ERF5oKu6CyPjXASz+OGZzbI34e9srd3DeS5MzseT1mLl7Iu+WY+b5SsSrugsj41wEs/jhmc2yN+HvbK3dw3kuTM7Hk9Zi5eyLvlmPm+UgsSIiAiIgIiICIiAiIgIiIK7Wn34h5KHvOQdy4uq/uz4/wADbvNYHOx3rlO2zh6mtj9qsSrtaffiHkoe85B3Li6r+7Pj/A27zWBzsd65Tts4eprY/arEgIiICIiAiIgIiICIiAiIgIiICz2Mn/KCsDm6fcvH5u//AJt/VaEs8jef8oKw31fcvGfT/wCbeg0NERAREQEREBERAREQEREBERAVd0FkfGuAln8cMzm2Rvw97ZW7uG8lyZnY8nrMXL2Rd8sx83ylYlXdBZHxrgJZ/HDM5tkb8Pe2Vu7hvJcmZ2PJ6zFy9kXfLMfN8pBYkREBERAREQEREBERAREQV2tPvxDyUPecg7lxdV/dnx/gbd5rA52O9cp22cPU1sftViVdrT78Q8lD3nIO5cXVf3Z8f4G3eawOdjvXKdtnD1NbH7VYkBERAREQEREBERAREQEREBERAWeR7f5Qdj0b/cvH7d/9Lf8AyLQ15Qh8NHg8/jrJZbq6V0L8QzFNYMRfLzbFpxMfJ2HNvsR6v0IPV6IiAiIgIiICIiAiIgIiICIiAq7oLI+NcBLP44ZnNsjfh72yt3cN5LkzOx5PWYuXsi75Zj5vlKxKu6CyPjXASz+OGZzbI34e9srd3DeS5MzseT1mLl7Iu+WY+b5SCxIiICIiAiIgIiICIiAiIgrtaffiHkoe85B3Li6r+7Pj/A27zWBzsd65Tts4eprY/arEq7Wn34h5KHvOQdy4uq/uz4/wNu81gc7HeuU7bOHqa2P2qxICIiAiIgIiICIiCHz2qKmAdFFJHPbtzAmOpUj7SVzR6XbehrRuPOcQNyBvuQofyiS+6ue/cr/bLkqvMuudUOd1dGasLT7GCLmA/wCL3H+UqYX04wsOiIiabzaJ5xdrqhxeUSX3Vz37lf7ZPKJL7q579yv9su1FcuFwes+5eNHF5RJfdXPfuV/tk8okvurnv3K/2y7UTLhcHrPuXjRxeUSX3Vz37lf7ZeVavgzVa/hev4q/czk/ucAOSjxgZB2gyZ6c23a7cgO8oO+/NsNtuq9bomXC4PWfcvGji8okvurnv3K/2yeUSX3Vz37lf7ZdqJlwuD1n3Lxo4vKJL7q579yv9snlEl91c9+5X+2XaiZcLg9Z9y8aOLyiS+6ue/cr/bJ5Q5fdXO/uV/tl2omXC4PWfcvGjswOp6moBKyJk9W1DsZaluIxysB9B29DmnY7OaSNwRvuCBLqiyvMWvdOOb0MkNuJx9reVjtv+LGn+RXpcmPhxRMTTumL+sx9kkREXMgiIgIiICrugsj41wEs/jhmc2yN+HvbK3dw3kuTM7Hk9Zi5eyLvlmPm+UrEq7oLI+NcBLP44ZnNsjfh72yt3cN5LkzOx5PWYuXsi75Zj5vlILEiIgIiICIiAiIgIiICIiCu1p9+IeSh7zkHcuLqv7s+P8DbvNYHOx3rlO2zh6mtj9qsSr1aUniBkY+9X3AYus7ur2DubPvs/nsd/wCIdtnD/ZbH7VYUBERAREQEREBERBQqP5b6s/8AVrf2DVNKFo/lvqz/ANWt/YNU0vr1/t8Kf+sNVbxF5+1Bpmlxx8IbUWmdVNkvaU0niKU0OEMz2QWrVp0pM8rWkc/I2IMaDuAXE+krl4qaRdoPVnA/B6CpUKL62XyQpQZGSV9eLnoWHPLtiXkAOeQ0Eb7BoLR1Hhdl6LRYPHxt1JX0Fq5+XtaWwWqNNZwYaxcttsOx9jmZFIx8UTSZXPcyVoEQcSXA9Vn2teN2r9ecANayVbVPC6hwGeoY+zdqVLlZlmCWau5ro4pXMmhLu2a1zX827WvA/HBCaoHrlF574iY/La64k8N+HOs7te3jLdLI5fMw4lktOtknQljYIeUyOeGN7Xnc0vIcWjfp0VY1Jf8A8mHXWssfoiJsOCOhrepYcHakkmq1rtaZrA5jS7djJGv2c1pG5YPQmYeq0WDXeNuq+GuUwkmvocJawWbxly9BZwUM0UtSStVNp8Ugle4SB0bH8rxy9W9WjdQ3D3wjtYam1Fpc3MFHaw+fmZG+rQwGWhmxTJGF0cklqeIQTNB5WuLeQedu3mATNA9JIvOWkuPGvL+ntDaty9LTo05qLOswUlOlHOLcTnzyQMnEjnlu3Owbx8p6Hfn9Q+fFTXmQqcYq2pqlx8WltA2qeMy8bT97mdkfMnLvb2DHU5P0czkzRa49Iosbx3/6wM7/APwej/frS2RaibiGs/l5pj/dt/2YV8VDs/l5pj/dt/2YV8Xl0n9nh95WewREXEgiIgIiICrugsj41wEs/jhmc2yN+HvbK3dw3kuTM7Hk9Zi5eyLvlmPm+UrEq9oTIHJ4GWY5hmd2yF+LvcdbsA3ktzM7Hl9sXL2Rd8oxl3ykFhREQEREBERAREQEREBERBXa0+/EPJQ95yDuXF1X92fH+Bt3msDnY71ynbZw9TWx+1WJV2tPvxDyUPecg7lxdV/dnx/gbd5rA52O9cp22cPU1sftViQEREBERAREQEREFCo/lvqz/wBWt/YNU0oWj+W+rP8A1a39g1TS+vX+3wp/6w1VvZhr/g5fz2t6mtNJapk0dqmOn4us2DSZdrXa3NztZLC5zd3NcSWvDgRuR1C/tfhDlrGV0HlM3rCfO5LTV+5flsT0Y4u9GevLD2bWsIETGdruN+c7N2367jTkXjaGWMZ7wdpcnfzOTpal7hl7GqYNU0J348TRVZo6ra3ZyRmQdq0tDzuCwguG34u553+Dbayen+IeOzOsZ8jY1hLUuyXY8eyF1S3AGcr2NDiDH96g2YeoDDu9xduNvRMsDJ9S8GM5q3F6cvXtZ9317p6xLPj9S0cWyJjWyN5JIn1nPcHxubsCOcHdoII2VN1/wPy+P4ZcVM7lMxc17r3NacnxkU0FAQBkDWPLK1evGXEcz3bnq4uOy9FImWBiOn+AmR1FcxOS4g6ndqmvRxM2Po4lmNbRjrtswCKd0vK9xkkMZLN/NADnbNBKn+GfC3VvD5+Mx1jiDJm9K4uE1qeNmxMUdgxBvLE2ayHEv5BtsWsYTsN91p6JlgZBjfB+8X8NdGaS8fdp9zmfgznfO57d47O2+z2XJ2nmb8/LzbnbbfY+hRUXgiaMyelc/W1PRxupNVZuS7PZ1NNjWssNksPeWujBc4sEYc0NAd8gHpv03REywM30Vwlu6a1vW1RkdQ+Ob7dMU9PT/gfZGd8Eskhsk9o7YvMnVnXbbfmO+w0hEViLCGs/l5pj/dt/2YV8VDs/l5pj/dt/2YV8Xl0n9nh95WewREXEgiIgIiICrug8gcngJJzlos0RkL8Xeoa/YNAZbmYIuX2xcvZF3yjGXfKViVd0De8ZabbY8ZwZcPt2wLVav2LCBZlAZy+1gHIXfKLC71oLEiIgIiICIiAiIgIiICIiCu1p9+IeSh7zkHcuLqv7s+P8DbvNYHOx3rlO2zh6mtj9qsSrtaffiHkoe85B3Li6r+7Pj/A27zWBzsd65Tts4eprY/arEgIiICIiAiIgIiIKNmo36Y1JkMnNBPNjci2ImatC6UwysaWkPa0FwaWhpDttgQ4Hbpvx/d/g/wA5n+Dm+otFRd1PSKbRnpvMaTbd/iVvHazr7v8AB/nM/wAHN9RPu/wf5zP8HN9RaKi1tGFwTzj8TqZ193+D/OZ/g5vqJ93+D/OZ/g5vqLRUTaMLgnnH4nUzr7v8H+cz/BzfUXy8pWne9Gt39/eQztDD3Wbn5d9ubbk3236brSlnkYA8IOc+s6Xj2/ktv+lNowuCecfidT8/d/g/zmf4Ob6ifd/g/wA5n+Dm+otFRNowuCecfidTOvu/wf5zP8HN9RPu/wAH+cz/AAc31FoqJtGFwTzj8TqZ193+D/OZ/g5vqJ93+D/OZ/g5vqLRUTaMLgnnH4nUo2Cik1LqWllooJ4MbQilayWzE6J08kgaPNY4B3K1oO7iACXDbfY7XlEXLi4nxJibWiNxIiIvFBERAREQFXOHWQbltFYm+zKRZqK3F3iPIQVu7MnY9xc1wj+SOUj9e2/rUlqPL19P6eymUuWmUalKrLZmtSNLmwsYwuc8gdSAATsPYv5puGzX07i4rlwZG2yrE2a4IBB27wwc0nZjozmO55R6N9kEkiIgIiICIiAiIgIiICIiCu1p9+IeSh7zkHcuLqv7s+P8DbvNYHOx3rlO2zh6mtj9qsSrtaffiHkoe85B3Li6r+7Pj/A27zWBzsd65Tts4eprY/arEgIiICIiAiIgIiICIiAiIgIiICz7JDuXHzASOADchpy/EHbgefDZqODdvSSRM8/+0/oWgrPeLpbgm6c1i4lkGm8h3i+/fYNoyxvgsPd0/EjEjZ3fog/kIaEiIgIiICIiAiIgIiICIiAiIgruucga2Lq0ocwcJfyduKlUstqd5cXk87mhm23WNknnO6N6uPo2ViUBFZlymsJWw2bsFTFQmKeA1w2vZmlDHNIkPVxja09G+b9+6kkbNn0BERAREQEREBERAREQEREFdrT78Q8lD3nIO5cXVf3Z8f4G3eawOdjvXKdtnD1NbH7VYlXa0+/EPJQ95yDuXF1X92fH+Bt3msDnY71ynbZw9TWx+1WJAREQEREBERAREQEREBERAREQF87FeK3XlgniZNBK0skikaHNe0jYgg9CCPUvoiDPtK25OHFujo/KyOdiXbQYDKSuJ7RgHm05nH/tmAbNJ/zjG79XtfvoK4sxhqWoMZYx+RrR26U7eWSGQbg9dwf0EEAgjqCARsQqUzL5Phb96z9qbMaSaCY89N1sY5gG/LdPy4x1/CANwNu1HR0zg0JF+IZo7ELJYntlie0OY9h3a4HqCD6wv2gIiICIiAiIgIiICjc9lLGMpg0qYyWQke1kNPt2Ql+7mhzi5x6NYCXu2DncrTytc7Zp+mYyzMPTdO6CxbfzMYyvUiMssjnPawbNHoHM5u7js1o3c4taCRz4zCOguy5HIOrXcq4yxx24qoiMNZz+ZkLSS52wDWFxLvOeC7Zo5WND74PEtweLgpNtW73Z7l1m9MZZpHElxc5x/ST0ADQNg0AAAd6IgIiICIiAiIgIiICIiAiIgrtaffiHkoe85B3Li6r+7Pj/AANu81gc7HeuU7bOHqa2P2qxKu1p9+IeSh7zkHcuLqv7s+P8DbvNYHOx3rlO2zh6mtj9qsSAiIgIiICIiAiIgIioeUP3V6ky1G2+TxbjHRQtrRSujEsro2yue8tI5gA9gDfR+MTuSNvfCw/izPXaI61iF8RZ15PdPfNkf77/AKU8nunvmyP99/0rp2fC455R+R1NFRZ15PdPfNkf77/pTye6e+bI/wB9/wBKbPhcc8o/I6mios68nunvmyP99/0p5PdPfNkf77/pTZ8LjnlH5HU0VFnXk90982R/vv8ApTye6e+bI/33/Smz4XHPKPyOp5n8N3jZN4NOAm0noPJ5DGZPUlXtRThh2rYeEvLXT1pdvvT5OV7OybuGn743sXD77t3gc8bPLnwMwuWtT9tnaA8XZTmO7nTxgbSH1nnaWu39pcPUrPNw20zZjMc2IhljPpY8uIP8hK5sfwk0diTKaOnqdMykGTu7THz7ejfY9fSf+KbPhcc8o/I6moos68nunvmyP99/0p5PdPfNkf77/pTZ8LjnlH5HU0VFnXk90982R/vv+lPJ7p75sj/ff9KbPhcc8o/I6mios68nunvmyP8Aff8ASnk90982R/vv+lNnwuOeUfkdTRVG5DNNqWq1WvXkvWZZmxPZAQe7tLXO7SXc+azZhAPpJIAB3VM8nunvmyP99/0r8R8NtMwukdHiIWOkdzvLXOBe7YDc9ep2AH8gTZ8LjnlH5HUuGFwTqskOQyT4LufdVZWsXoYjExwDnPLY4y53Izmcem5JAbzOcWgqYWdeT3T3zZH++/6U8nunvmyP99/0ps+Fxzyj8jqaKizrye6e+bI/33/Snk90982R/vv+lNnwuOeUfkdTRUWdeT3T3zZH++/6U8nunvmyP99/0ps+Fxzyj8jqaKizrye6e+bI/wB9/wBKeT3T3zZH++/6U2fC455R+R1NFRZ4zQOBjPNHQ7J3qfHNI1w/UQ7cKc0Nk7NhmWx1qZ1mTF2xWZYkO75IzFHI0vPrcO05SfXy7nqSvPEwIppmqiq9vpb7yW0WdERcaCIiAiIgrtaffiHkoe85B3Li6r+7Pj/A27zWBzsd65Tts4eprY/arEq7Wn34h5KHvOQdy4uq/uz4/wADbvNYHOx3rlO2zh6mtj9qsSAiIgIiICIiAiIgKg4r8r9Zfx6D+5wK/Kg4r8r9Zfx6D+5wLu6L+/w/9Q1G6U2iKk8bNbXuG/CXVeqMZFXnyGJoSWoI7bXOic5o6Bwa5pI/UQvTcyuyKhR8bdIx6pqaWsZYfdHK2BslWCrPIyKSVgdGx8rWFkbnA7hr3AkEFfl3HrQTNX/cydQxeNu9jHkCCU1xaPormxydkJfV2fPzb9Nt0vAv6LObfhDcPqGZsYufUAjt1r3i2ye52DDWs8/II5pRHyREuIAL3AO9RKg85xF11qziFqHTHDutp+GHTbYGZPJ6iE8jJbMrO0bBCyFzT5rC0ueSdi8ANOyl4GxIsr4bcdqOp8dUqaihZgNVnNWdNz42LnnjN+CMyvEcgb+I6Ido1ztuh23J9P44ueENguGWm9SXIGS5fKYK7SoW6EdefaKSzyOZzPbG4bdk/n3HQkBm4c4BM0WuNXRZ9lePOi8JTwNi9fv1vHrbD8dWfh7veZxAQJdoOx7RpHMDs5oJB3G46rtxHGTRufq4Gxj83HajzlyTHUeSGTmfZjY974ntLd4nNbG8kSBu223pI3t4F0RZRxc8IbBcMtN6kuQMly+UwV2lQt0I68+0Ulnkczme2Nw27J/PuOhIDNw5wCiOIXGHUlrPcOsbw/kxNZmqhkXOtaqxluPsxWYxw+9F0MjCSXDzh180jp1MzQNuRZ/pLVmaw17G4TX2XwNjUWalnOKj0/SsxQyxQxtdIHGR8gDhuTuXNBBAAJ3X2y/HHRGAhuS5DOsqx1MucDM59ebpe7Ht+wGzPOJj2II3BJDQS4gK3gXpFSsbxo0XlNK5fUcedirYjESGLITX4pKj6jwAeWSOVrXtJ5m7At3PMNt91Tta+FHpbB8MtQaswYt5t+KMMbqcuPt1XF8rtmF3PDzBhAcefblPLtvuQpeBsyLMMjxqx9rN6Dp4i42s3UV2WLssziL9eWaKOOTnbFzRNEcvMwECblDmBxG/QqQdx60EzV/3MnUMXjbvYx5AglNcWj6K5scnZCX1dnz82/TbdLwL+izm34Q3D6hmbGLn1AI7da94tsnudgw1rPPyCOaUR8kRLiAC9wDvUSpJ/GTR7NdHR4y5k1A2RsL68VWZ8ccjmc7Y3zNYY2vLevK5wO3qVvAuiLy/X8ITiRjNH3eIGUoaWvaLp56bFT0abLEGRZC28agka50j45Hb8ruXZu/XYhbHT47aGva1+5OPOcucNiSmyGWpPHFJOzfniZM5gje8crvNa4noVIqiRfUWfRcfdBzZjKYxmcLrOKlsw5BwpWOxpOga50vbS9n2cYAY8gucA7l80lfXCcc9D6g01lNQVc4IsPjGMkt2rtWaqI2v/EcBKxpcHfJLQebcAb7hW8C+Is8oeEDoHI4LO5eLOmOpg6/e8iyzSsQWK8PXaQwPjEhadjsWtIO3RWPR2vMJr6nPbwVqW7UhkEfeHVZYo5NwCHRue1olaQRs9hc0+1LxIsC4NCfw7rD9oQ/3SBd64NCfw7rD9oQ/3SBan5dfh94WO1ckRF8tBERAREQV2tY5uIWRg71kHcuLqv7q+PamzeawOdjvXKdtnD1NbH7VYlXK9j/8w78Hesg7/wClV391fH+Bt+/TDnY71yn0OHqa1ntVjQEREBERAREQEREBUHFflfrL+PQf3OBX5UHFflfrL+PQf3OBd3Rf3+H/AKhqN0ptYJ4SupM7qDSuq+HON0RqDIXs3SZVxuVp1u1oPMvmvM0o6Qdn135/SNiN91vaL0mLxZl5v1LWy2k+NNOTQmH1VBlr2Qx9bPdrjy/BZOm2NjZLPbHcRSxx+aC1zXEx7Fjwd1UJtOakZwbn4Ms0hm3amkz7njOmkfFphOS72Lxtfi7iPbzN+fmG3KvX6LOUeWNVaMz1jgNx8oRYLIy5DJanvWaFVlSQy2mF1cskiaBu8HlOzm7jzTt6FaG5LL8C+LOvLtjSeoNSaa1XNXylK3pyibskFlsLYZoZmNPM3fkY5riOXYkE9Fv6JlHk7H6H1VpyDAcQsvp3IOtW9e2tS5HC4+E2rlCnPTkqxAxx7mRzAInPDNz5x6dDt89UYDUmu8Dx7yFDSebrPyeRwl7HU71N0E92KrHVc8xtd6SRC7Zv4wJDSA7cD1qimUebeIXFCueLnB7Uw07qY1+6Z6M4/wATTC+3zKo5u7EdoR+oH2+hVqnpnUlPLU+JU+lMzWxs+vpc47BxVDJkIKT8e6oJ312bu53P2e5jQXAEHY7Fen8jpHE5XUmHz9qp2uWxEc8VKx2jx2TZgwSjlB5XcwjZ+MDtt023KmEy6jyVqjAak13gePeQoaTzdZ+TyOEvY6nepugnuxVY6rnmNrvSSIXbN/GBIaQHbgW3iBp6hx34j8IrmS0Zk7mmI/HHfq2exEsQgd2EYiMzHt8zmc3zebbcjpuvRCK5Rh3EHSkHDfV3CjL4DTNp2ldOS5GtYpafousPqtswbMe2CMFxbzg78oO3Nus7w+A1Dm8xHlH6VzePiscX48s2G5Re2RlLxYGCw4AENj5gBzb7AnlJBBC9aok0jytxL4f6lyet+JGWoafuZOpT1FprONoCIsGXgqwt7eOEu2ZI4bDpv6WAenYK48V87kON/AvXeMwGk9R0r7KkT4IM3jXUX23h4kdHE2TZznAR7egAlzdieu28ImUYfq3K2+JOe4Q5rHaez9OrT1NJJaiyeLlrS1mdwsN55GOG7Gcz2tDj0JOwPoWYTac1Izg3PwZZpDNu1NJn3PGdNI+LTCcl3sXja/F3Ee3mb8/MNuVev0SabjyxqrRmescBuPlCLBZGXIZLU96zQqsqSGW0wurlkkTQN3g8p2c3ceadvQp3NeN9O8eopdC4XVVObK5iu3UkVrHk4K7V7ICS5HOekczGhrRyuBeWbFh9K9FImUeauA/g64S9jJM7q3E5d+Vg1HkrtbHZW1ZZUjcLsphnbUc4R7lvK4O5SDuHevdUvNUNYagzWnr2fxGu8lqjFa3r3r8ccEww1PHx3C1jq0bSI5h2RjPMwPk6yFxA3XslEyxawwzh1pRtPQnGOvqDTV+3SympM3YkxrKzmz5Ks8ADsgeXn7Ro5WuBAPTYj0rJ8lpjXesNAZbFY/H6uyej9OZbD5LEVs7E7G5q1BC9zrVSN/mPd2YEbo5Ds7mGwc4gFey0SabjyfqvROJ1Vwq4m5TTmluITtRP05Ji4H6rffnnsskPOYIIrEj3kh0bSSGgbuHKTuV6kw9dtPEUYGRiFsUDGCMDbkAaBtt6tl2IrEWBcGhP4d1h+0If7pAu9cGhP4d1h+0If7pAtz8uvw+8LHauSIi+WgiIgIiIK73gs4hmA275EmL521Oy/BByzbF/P/4h5wOX/ZAPqViVcyU4ra9wXNcvsbYpXIW044+arI8OgeJJHfJe0NcG+0Pf7ArGgIiICIiAiIgIiICoWPaYdaaujf5r5LFew1p9JjNaNgd+rmjeP/aVfVEZ3TFPPuilmdPXtRAtjtVJTFI1pIJbuPS0kDzTuOg6LpwMSnDmYq3TFvWJ+yw40XH5OWe8Od+KZ9RPJyz3hzvxTPqLqz4XF6Sto1diLj8nLPeHO/FM+onk5Z7w534pn1Ez4XF6SWjV2IuPycs94c78Uz6ieTlnvDnfimfUTPhcXpJaNXYi4/Jyz3hzvxTPqJ5OWe8Od+KZ9RM+Fxeklo1diLj8nLPeHO/FM+onk5Z7w534pn1Ez4XF6SWjV2IuPycs94c78Uz6ieTlnvDnfimfUTPhcXpJaNXYi4/Jyz3hzvxTPqKEwWj2X85qOr92eXu9xtxw92jcI3U+avFJ2b3Fu0hPPz8w22Dw30tJTPhcXpJaNVnRcfk5Z7w534pn1E8nLPeHO/FM+omfC4vSS0auxFx+TlnvDnfimfUTycs94c78Uz6iZ8Li9JLRq7EXH5OWe8Od+KZ9RPJyz3hzvxTPqJnwuL0ktGrsRcfk5Z7w534pn1E8nLPeHO/FM+omfC4vSS0auxFx+TlnvDnfimfUTycs94c78Uz6iZ8Li9JLRq7EXH5OWe8Od+KZ9RPJyz3hzvxTPqJnwuL0ktGrsXDoEc+W1dM3rE/JMY13qJbVga7b9R3H6wR6l+2cOogfPzubkb62m2G7/wArWg/8CrLjcdWxFGGnThbBWhbysjb6v+pJPUk9SSSV54mLRFE00ze/vf7HVDpREXAyIiICIiCvawnOP8S5Az5JkVbJQskhx0faCcTb1wJm+nsmumbI5w/F7MOPmtcrCuLNYwZrD3sebNmkLcD4O80pTFPDzNLeeN4/FeN9wfUQF8dO358ji2Ps1bdOxG98Ekd1rRI4scW8/meaWv25gRsNnDoDuAEmiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICr2l8n4zyuqA3MjKRVskKzawq9l4vLa0BdBz/wDa7uc6Tn9Xa8nyFPySNijc97gxjQXOc47AD1klQOhLkmU0zXybsq/MQ5F8l+rZfT7oRWlkdJXj7MgOHJE6Nm7vOcWlxAJ2AWBERAREQEREBERAREQEREBERAREQEREBERAULewr4MqMti4q7chM6GG2Znva2au1x36N3HO0Oc5pLTvty7tDtxNIg4MLma+eoMt12zRtLnsdHYidFIxzXuY4Oa4AjZzXDf0HbcEggrvUVltN1cpZF1rn0srHWlq18lW5e3gbIBvy8wc12xa1wa9rm7tBIOyj5snnNO15X3aJzlGrRjebWP63LE4O0g7vsGgEeeOV5J85vL0HMFlRR9DUGNyl+3Rq3YZb9Nsb7NQP2mgEjeaMvYfObzAHbcDfY+wqQQEREBERAREQEREBERAREQEREBERARfOxYip15Z55WQQRNL5JZHBrWNA3JJPQAD1qBOUuam548Q91KjtWnjzPLHLFaif572wjm335A0c7hyjtOnMWkAPpnJZ8vaGFpyXqfM0S2MnUEfLAGvYexLnHcPkaXfitJa0OJLCYy6eXJjcVTw9Z1elWjqwulkncyNuwdJI8vkefa5z3OcT6SSSutAREQEREBERAREQEREBERAREQEREBERAREQEREBERBGZ/TmO1RjLGPyVft61gNEgY90b/NcHtIewhzS1wBBBBBG4XHaxudp2rlnHZRt0WLEL20cmxoirxAcsrInxtDwXDzgX8+ztx0aQGz64c1mK+Bxst2zzmNha1rI28z5HuIa1jR6y5xAH6/UrETVMRG8Rser2V5uyy2Pt4Z0uSdjqjpw2Vlo7c0crXRFwYx43A7TkPMC3bct5ubVXFDSeiLeBrZ3P0cbPnrXc8bHNL1sy7bkN29Q6AuOzQXNBO7mg8Ts9q6Y88ePw9dh6iKW1K9zf1kMA3/AFdP0leZPCI8DbM8ftSYzI+PcdpajQgkbFi8dE81xPJK6SawG7ACSQlnMQN3dm0kkrr2WvWOcNWe0UWP8M8dxG0PovHYLL5jE6qs0WdizKWhLFPLGPxRJsCHOA6c3QkAb7ncm0+OtY/m2D/npvqpstescyy7oqR461j+bYP+em+qnjrWP5tg/wCem+qmy16xzLLuipHjrWP5tg/56b6qeOtY/m2D/npvqpstescyy7oqR461j+bYP+em+qnjrWP5tg/56b6qbLXrHMsu6KkeOtY/m2D/AJ6b6qeOtY/m2D/npvqpstescyy7oqR461j+bYP+em+qnjrWP5tg/wCem+qmy16xzLLrLKyGN8kj2xxsBc57jsGgekkrKuFPhMaK4zVMnPpma5aNDMeJnwmAOlc4jmbY5GOcWQODZCJJOUHsnjbcbLg4s6f13xM4fZnS1bI4nTwysPdpr9YyySthd/nGtBAALm7tJO/Rx6b7EYT4P3gS5jwfOIlXVuK1WLs8UMteWk57ooLMb2EcsoazdwDuV4G/4zGn1Jstescyz15UwtzLmK1nnNDuxngfiq8naU3Me/oZA5oMjuzDWnfzd3P2HUFWBUjx1rH82wf89N9VPHWsfzbB/wA9N9VNlr1jmWXdFSPHWsfzbB/z031UGa1juN6uD2/RNN9VNlr1jmWXdFBad1I/KzTUb1ZtHK12NkkhjkMkb2OJAfG8gcw3BBBAII6jYtLp1c1dFWHOWreyIiLAIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICqPEn+DsOPUctU3H/vVuVR4k/wfhv2tV/rrp6N86nxap3utEUHrbW2G4daXvai1DcNDD0gwz2BDJKWcz2sb5kbXOO7nNHQH0rpZTiLN9N+EPoXVs92LG5HIOdTqS3pzZwl6s1sMY3e7mlhaCQD+KCSfUCr5hcxU1Dh6OUoS9vQvQR2a8vK5vPG9oc12zgCNwQdiAfal4ncOxEUPldXYnCZ7CYW7b7HJZp80dCDs3u7Z0UZkkHMAQ3ZgJ84jf0Dc9EEwiyjJ+FLw2xOZyWLnzGQku421JStNrYHIWGRzMOz2c8cDmkg+wkLV/SkTE7gREVBFHaj1Dj9JafyWcy1jumLxtaS3an5HP7OJjS57uVoLjsATsAT7AqjoPj1oTiXlfFmn88LGSMPeG0rVWepNJF/tsZMxjnt6+loIUvAv6IioIodursS/V8mlxb3zsdFuSdV7N/Su6R0Yfz7cv47XDbffpvtsphQERFQREQROPO3E2qPbh59/56H6SryqNQ/1nVP2PY/toVeV49K30+H3lZ7BERcSCIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAqjxJ/g/Dftar/XVuVR4k/wfhv2tV/rrp6N86nxap3utYx4YokPg5asERa2UupcheNwD32DbcexbOobWGj8Rr3TtrBZ2p37FWiwzV+1fHzFj2yN85hDhs5jT0Pq9i6Zi8WZZzq7F65i4Pa8+6zUdJ9yLGTWaNvSsNjGTQOijdJuX9u93VzWfikdOYHcFUDSNTK8Sdeaaw2S1bqWnjn8NsTk5Y8ZlZazpbb5ZWmdz2nmL9vSd/O2HNzbAD0nmMTUz+IvYy/F29G7A+tYi5i3nje0tc3cEEbgkbggqGwfDrT2m8tVyeOx/d71bEw4OKXtpHctOJxdHFs5xB2LieYjmO/UlZmnrHmzC6xzvFbh7wxwsdzUmT1paxVq9Zdic8cLC6GGYV+8WZ2Mc5zi4NDWNady55cNtl0cOtV5bWc/g1ZXPWjcyzreerT2XEF0roa1mEOJAAJIjBJ2G53K2qz4PWgLWIwuMdgXR1MMyWKj2N6zFJHHK7nkjMjZA97HO6ljyWn2Lpi4F6Fr4PGYeHT8MGNxeROVoV4ZpWCnZLi8uiIcDG0lzvMaQzqRy7FZyyMs8H6lrWTV3EOfHZXCQaVbrvK96pWKEr7jzzt5uSYShrd/N23YfQfTuvpUOoNH8cLTNXZnUTHagyVqLS9+vkO0wrmOgcYqc1Tp2csYa5wdy+eWb8/pCuuR8FzhvlM1kctNh8hHeyNqS7afWzuQgZJM88z38kc7Wgk+wAKar8C9D1tYTaobg+bNSyzTmaW3PJGyWUFskjInPMbHuBILmtB6nqrlkYXpfV83CrSusMRxEy+tYtZ1sILVmSPK99iusfMIG2sa53mwuMskbeRwZyFzd2kAlfDAYviK7Pa60D41zeFu2tKw5zEMualkylqpcbYe1n4SWMc1r3Ma18W7m7A7EhxC2/C+Dnw6wGPy1GrpqJ9bKVBQtMt2Z7JdXB3ELDK9xjYD1DWFoBAI6gL+43grgNAvt5vReGrxasFKSrBbymQtSCYOLSGTyOc972AsbtuHFu3m7blTLIwrVHEuzxz0BxI1JSt2quncPw8nrz49krmxOylmu6WdkjAdnOgYyNnnb8pldsujMaU4g6k0Vi9b56LE6Wp6M0jkpsT4nvSz3bE82OdG2R0nZsETWt84Bu55gOvQFbNw64I47TPDDM6UzjK2SOo57tvOCm19eGeS25xlZHs7nawNIjaebm2YDuCrzb0tjL2lptOT1efDTUnY+St2jhvAWdmWcwPN+Kdt99/07q5ZnePOl2nm9P8ADjhdXj1jqJ1/Xl/F0czmrGSkkkhY6tLM5tYOJbXdIWiPmYAdtiSXdVEax1rqThpn9X6AxGqspYx817T9WvnMpZNu1hRkJnxT7zSbl2zYw5nOTyl+++2y9J5rhxpvUWjYdKZLFR28DDFFDFVke/eMRbdmWv352ubyjZwPMNt91EY/gZoXG6SzGmY9PQTYfMO58jFblksSW3dNnSSyOdI4jlHKS7duw22TLI858TNPW+FWrOKPifUmorlyHhkbcGQyWTksW67xam6xzE87Ru3m6HoSdth0F648cSc5oTMaLyeIuWJnw6T1Bkn0hM4w2pYatZ8T5WA7P5XFxBPo3dt6VpmmeAWg9Iz5CbHYMmXIY84u267dsW+3qkk9k/tpH7jqR7duno6L86c8H/QWlMxRyuOwbhkKVeWpXntXrFkxwSNDXQ7SyOBj2AAYfNbueUDc7zLPYKJUxGQ4bcGspxJr6v1Fq7PM0xNkzHkMi6ahYnMHaiRlceYxoI6Bm3mnY7+lQ3CHTHFKTLaN1McobGHvRts5aW7qyXJRX4JYS4OhrGpGyBweWOb2bg0AFpBB3Wr6R4CaD0JlXZDB4EUpzHJC2M255YIo5Px2RwveY42nYbhjQF+tGcCNDcPc2Mrp/B+LrjWyMiAtzyRQNed3tiie8siB9jGtVyyKR4JWIv5LhfgdX5rUuez2ZyFeeN4yOSllrsj7w4NDYi7l5gIwO0IL+rhvsdhuqh9I6RxOhNOUsFg6nccVTa5sFftHycgLi4+c8lx6uJ6n1qYWoi0WETQ/1nVP2PY/toVeVRqH+s6p+x7H9tCryvPpW+nw+8rPYIiLiQREQEREBERAREQEREBERAREQEREBERAREQFUeJP8H4b9rVf66tyitTYP7oMUazZe7zskjngm25gyRjg5pI3G7dxsRuNwSNx6V74FUUYtNVW66x1S4UUM67qSA8kmlJppB0L6l6B0Z/3S9zHEfraD+hfzxnqH3Pv/GVftV9DJ3o80e62TSKF8Z6h9z7/AMZV+1TxnqH3Pv8AxlX7VMnejzR7lk0ihfGeofc+/wDGVftU8Z6h9z7/AMZV+1TJ3o80e5ZNIoXxnqH3Pv8AxlX7VPGeofc+/wDGVftUyd6PNHuWTSKF8Z6h9z7/AMZV+1TxnqH3Pv8AxlX7VMnejzR7lk0iqenda5LVWJjyWM0rkLFOR8kbZDZrM3dHI6N42dID0cxw/kUl4z1D7n3/AIyr9qmTvR5o9yyaRQvjPUPuff8AjKv2qeM9Q+59/wCMq/apk70eaPcsmkUL4z1D7n3/AIyr9qnjPUPuff8AjKv2qZO9Hmj3LJpFC+M9Q+59/wCMq/ap4z1D7n3/AIyr9qmTvR5o9yyaRQvjPUPuff8AjKv2qDJahJA+5C8N/WbdXp//AGpk70eaPdLPpQ/1nVP2PY/toVeVWdNYO43JTZnKRsr25IRXiqRSc4hj35jzO9Bc47b7dAGgdepNmXF0mqKqoiOyLEiIi5UEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREGfcBgRwxobjY98v9Ntv++z/oC0FZ7wDby8L6A6/6ZkPxhsf9NnWhICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiDPOAR5uF9Aj88yHq2/77OtDWe8BebyYUOYuJ75f/H9P+mzrQkBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBRGpdXYLRdBl7UOax2CpPkELbOTtR143PIJDQ55ALiGuO3p2B9i/WZ1XhNOFoyuXo40uG7RbssiLv1BxG6yPwhIdBcb+EuoNI2tS4htizCX05n2GfeLTOsT/wBHndD+gle9OBi1xemiZjwlbSkfBs19pbP6Iq4jE6kxGTysU1+zJRp3opZ2RG7L98MbXFwb57PO9HnN9oWwLwh/+HdoHT/BzS+b1NqvKUMbqnLSupx1rE7RJBVjd+vpzvHN+pjD617Nx/ETS2VsMr1NR4uew/8AFhZcj53fqbvuVZ6PjRF5onlJaViREXOgiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgLJuJvEqw23YwWDsGu+Ihly/HsXMdtuYoz6nbbczvk77DztyzRtTZgae03lcqWh4o1JbRafXyMLtv/AIXmWjHJFUjE8jpbDhzzSu/GkkceZ7j+kuJJ/Wv0f9H6HRj1Ti4kXindH1/+Lui7+w04YJZJWsBmkPNJM8l0kh9rnHq4/pJK+yq2veI+L4e16JuxXL12/KYaWNxsHbWbLwN3BjNx6B1JJAHTr1VZl8IbTNbStzN2KuWrGjeix93GzVOW5VlkIDeeMu9Gx33aTv6tz0X66rHw6Jmmqrrhje09fievFZjMc0bJYz6WPaHA/wAhVE09xpwWZmzUF2rktNWsRV79arZyt2DxW6/fgAXbt6be3fpsqEeOdjWfFDhxSwtLO4jB5Ca46WTI0hBDkYxXLo3RuJJc0Hr6vSD7FirpWFTETE3vNvWw9OaL15e0POxjpJruEJ++1HuL3QN/2od+o2/2PQfVsfTv9O3BkKkFqtKyetOxssUrDu17SNwQfWCDuvL613gTk5LGmL2OkO4xt10UP6IntbK0fyF7mj9DQvgf1nodGTaKItPb9fq1HW0lERfkAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERBFasxL8/pbMYyN3JJdpzV2u322L2FoO/6yvM9GwbVOGVzSx7mAuY70td6wf0g7j+RerVi/E3h3YxN61nMTA+zQsvMturCzmfBITu6VrR1c1x6uA6gknqCeX9L/RulUYVVWDXNs27x0/yu+LPLnH/AIX5LWmX0pncbi26g8TPsMsYc33UX2I5WtG7JmubyuaW7+kA/wDwazkODN6xw4sNw+iTp7O3s1SsWqL80bz3wQSbte6WR5buA5/mtPs9K9D17MVuJssMjJY3eh7Hbg/yr6L9LX0PDrrqrnfPhpbS+762YYlxK4S5rXPEXU08Mba2KyWjTiYrz5G8ot957RrHNB59tgNzttt+noovCaf4hZzWnDCXOaOhw1LS4sQ2bsOThmbKHVuza9sYPM0EtHTqevq23XoFPQk9EomrNed9+zr676agtZ4D0Xs09lMg4bMu3ndkd/xmRtbHv++16zrSOlbmvbRhoOfDj2uLLOTYAWx7elsZPR0nq6bhvpd6mu9E4zG1sPjq1GnC2CpWjbFFE3fZrQNgOvX/AIr4/wDWelURh7PTP6p3/RqOqHSiIvxoIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIKvnOGWl9RWX2buGgNqQ7vsQF0Erz7XPjLXH+UqLdwP0c5xJoXdyd+mWuD/wD1V8RddPS+k0RlpxKojxlbyoXkN0d+Y3v6Xufaroq8GdG1ZRIcMLRHybtmayw/rbI9wP8AwV1RanpvSpi04tXOfcvOr8Qwx14WRRMbFExoaxjBs1oHoAA9AX7RFxIIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiD/9k=", "text/plain": [ "" ] diff --git a/examples/hierarchical_blogging_team.py b/examples/hierarchical_blogging_team.py index 9a2e78c4..6651fbc3 100644 --- a/examples/hierarchical_blogging_team.py +++ b/examples/hierarchical_blogging_team.py @@ -27,7 +27,7 @@ job: From the documents provider by the researcher write a blog of 300 words with can be readily published, make in engaging and add reference links to original blogs tools: - name: TavilySearchResults - - name: Writing Team + - name: WritingTeam supervisor: name: supervisor agents: diff --git a/examples/planned_blogging_team.py b/examples/planned_blogging_team.py deleted file mode 100644 index e7011c51..00000000 --- a/examples/planned_blogging_team.py +++ /dev/null @@ -1,41 +0,0 @@ -from flo_ai.core import Flo -from langchain_openai import ChatOpenAI - -from flo_ai import FloSession -from langchain_community.tools.tavily_search.tool import TavilySearchResults -from dotenv import load_dotenv -load_dotenv() - -yaml_data = """ -apiVersion: flo/alpha-v1 -kind: FloRoutedTeam -name: blogging-team -team: - planner: - name: blog-planner - name: BloggingTeam - agents: - - name: Reasercher - job: Do a research on the internet and find articles of relevent to the topic asked by the user - tools: - - name: TavilySearchResults - - name: BlogWriter - job: Able to write a blog using information provided - tools: - - name: TavilySearchResults -""" - -llm = ChatOpenAI(temperature=0, model_name='gpt-4o') -session = FloSession(llm).register_tool( - name="TavilySearchResults", - tool=TavilySearchResults() -) -flo: Flo = Flo.build(llm, yaml=yaml_data) -image_data = flo.draw_to_file("examples/images/agent-planned-graph.png") - -config = {"recursion_limit": 50} -inputs = "Write a interesting blog about Sachin Tendulkar vs Brian Lara?" -for event in flo.stream(inputs, config=config): - for k, v in event.items(): - if k != "__end__": - print(v) \ No newline at end of file diff --git a/examples/tool_agent.py b/examples/tool_agent.py index abfda1b0..3f35d94a 100644 --- a/examples/tool_agent.py +++ b/examples/tool_agent.py @@ -49,6 +49,6 @@ def _run( - name: printStateTool """ -flo = Flo.build(session, simple_tool_agent) +flo = Flo.build(session, simple_tool_agent, log_level="ERROR") print(flo.invoke("Testing ....")) \ No newline at end of file diff --git a/features/flo_name.feature b/features/flo_name.feature new file mode 100644 index 00000000..b4b94689 --- /dev/null +++ b/features/flo_name.feature @@ -0,0 +1,13 @@ +Feature: While building a flo + + Scenario Outline: Flo Name Validation + When use the name, + Then it should be + + Examples: Flo Names + | flo_name | validity | + | CorrectName | True | + | Wrong Name | False | + | correct_name | True | + | correct-name | True | + | wrong/name | False | \ No newline at end of file diff --git a/features/steps/flo_name_steps.py b/features/steps/flo_name_steps.py new file mode 100644 index 00000000..81f74ea2 --- /dev/null +++ b/features/steps/flo_name_steps.py @@ -0,0 +1,15 @@ +from behave import given, when, then, step +from flo_ai.yaml.validators import raise_for_name_error + +@when('use the name, {flo_name}') +def step_impl(context, flo_name): + isException = "False" + try: + raise_for_name_error(flo_name) + except Exception as e: + isException = "True" + context.isException = isException + +@then('it should be {validity}') +def step_impl(context, validity): + assert context.isException != validity \ No newline at end of file diff --git a/flo_ai/builders/yaml_builder.py b/flo_ai/builders/yaml_builder.py index 86ad74b2..e9838a64 100644 --- a/flo_ai/builders/yaml_builder.py +++ b/flo_ai/builders/yaml_builder.py @@ -1,24 +1,32 @@ from flo_ai.models.flo_team import FloTeam -from flo_ai.models.flo_agent import FloAgent from flo_ai.yaml.config import (FloRoutedTeamConfig, TeamConfig, AgentConfig, FloAgentConfig) from flo_ai.models.flo_executable import ExecutableFlo from flo_ai.state.flo_session import FloSession from flo_ai.router.flo_router_factory import FloRouterFactory from flo_ai.factory.agent_factory import AgentFactory +from flo_ai.yaml.validators import raise_for_name_error, DuplicateStringError +from flo_ai.common.flo_logger import builder_logger def build_supervised_team(session: FloSession) -> ExecutableFlo: + name_set = set() flo_config = session.config if isinstance(flo_config, FloRoutedTeamConfig): team_config: TeamConfig = flo_config.team - team = parse_and_build_subteams(session, team_config) + team = parse_and_build_subteams(session, team_config, name_set) return team elif isinstance(flo_config, FloAgentConfig): agent_config: AgentConfig = flo_config.agent + validate_names(name_set, agent_config.name) agent = AgentFactory.create(session, agent_config) return agent + +def validate_team(name_set: set, team_config: TeamConfig): + validate_names(name_set, team_config.name) + [validate_names(name_set, agent.name) for agent in team_config.agents] -def parse_and_build_subteams(session: FloSession, team_config: TeamConfig) -> ExecutableFlo: +def parse_and_build_subteams(session: FloSession, team_config: TeamConfig, name_set = set()) -> ExecutableFlo: flo_team = None + validate_team(name_set, team_config) if team_config.agents: members = [AgentFactory.create(session, agent) for agent in team_config.agents] flo_team = FloTeam.Builder(team_config, members=members).build() @@ -27,10 +35,16 @@ def parse_and_build_subteams(session: FloSession, team_config: TeamConfig) -> Ex else: flo_teams = [] for subteam in team_config.subteams: - flo_subteam = parse_and_build_subteams(session, subteam) + flo_subteam = parse_and_build_subteams(session, subteam, name_set) flo_teams.append(flo_subteam) flo_team = FloTeam.Builder(team_config, members=flo_teams).build() router = FloRouterFactory.create(session, team_config, flo_team) flo_routed_team = router.build_routed_team() return flo_routed_team +def validate_names(name_set: set, name): + raise_for_name_error(name) + if name in name_set: + builder_logger.error(f"Duplicate name found: '{name}'") + raise DuplicateStringError(f"The name '{name}' is already in the set.") + name_set.add(name) \ No newline at end of file diff --git a/flo_ai/core.py b/flo_ai/core.py index f857bae9..801d1c9d 100644 --- a/flo_ai/core.py +++ b/flo_ai/core.py @@ -34,6 +34,7 @@ def invoke(self, query, config = None) -> Iterator[Union[dict[str, Any], Any]]: @staticmethod def build(session: FloSession, yaml: str, log_level: str = "INFO"): + set_global_log_level(log_level) builder_logger.info("Building Flo instance from YAML") return Flo(session, to_supervised_team(yaml), log_level) diff --git a/flo_ai/helpers/utils.py b/flo_ai/helpers/utils.py index 1b97bd0a..c457fa0c 100644 --- a/flo_ai/helpers/utils.py +++ b/flo_ai/helpers/utils.py @@ -4,10 +4,4 @@ def random_str(length: int = 5): letters = string.ascii_letters + string.digits result_str = ''.join(random.choice(letters) for i in range(length)) - return result_str - -def randomize_name(name: str): - return "{}-{}".format(name, random_str(5)) - -def agent_name_from_randomized_name(name: str): - return name.split("-")[0] \ No newline at end of file + return result_str \ No newline at end of file diff --git a/flo_ai/models/flo_agent.py b/flo_ai/models/flo_agent.py index abdd47d4..f1bfa3e9 100644 --- a/flo_ai/models/flo_agent.py +++ b/flo_ai/models/flo_agent.py @@ -4,7 +4,6 @@ from langchain_core.runnables import Runnable from langchain_core.language_models import BaseLanguageModel from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder -from flo_ai.helpers.utils import randomize_name from flo_ai.models.flo_executable import ExecutableFlo from flo_ai.state.flo_session import FloSession from typing import Union, Optional @@ -33,7 +32,7 @@ def __init__(self, handle_parsing_errors: bool = True) -> None: prompt: Union[ChatPromptTemplate, str] = config.job - self.name: str = randomize_name(config.name) + self.name: str = config.name self.llm = llm if llm is not None else session.llm self.config = config # TODO improve to add more context of what other agents are available diff --git a/flo_ai/models/flo_llm_agent.py b/flo_ai/models/flo_llm_agent.py index d753dd47..814db9fc 100644 --- a/flo_ai/models/flo_llm_agent.py +++ b/flo_ai/models/flo_llm_agent.py @@ -1,7 +1,6 @@ from langchain_core.runnables import Runnable from langchain_core.language_models import BaseLanguageModel from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder -from flo_ai.helpers.utils import randomize_name from flo_ai.models.flo_executable import ExecutableFlo from flo_ai.state.flo_session import FloSession from typing import Union @@ -25,7 +24,7 @@ def __init__(self, llm: Union[BaseLanguageModel, None] = None) -> None: prompt: Union[ChatPromptTemplate, str] = config.job - self.name: str = randomize_name(config.name) + self.name: str = config.name self.llm = llm if llm is not None else session.llm # TODO improve to add more context of what other agents are available system_prompts = [("system", "You are a {}".format(config.role)), ("system", prompt)] if config.role is not None else [("system", prompt)] diff --git a/flo_ai/models/flo_planner.py b/flo_ai/models/flo_planner.py deleted file mode 100644 index f7acb418..00000000 --- a/flo_ai/models/flo_planner.py +++ /dev/null @@ -1,157 +0,0 @@ -from langchain_core.language_models import BaseLanguageModel -from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder -from flo_ai.models.flo_executable import ExecutableFlo -from flo_ai.state.flo_state import TeamFloAgentStateWithPlan -from langchain_core.pydantic_v1 import BaseModel, Field -from typing import Union -from langgraph.graph.graph import CompiledGraph -from flo_ai.models.flo_routed_team import FloRoutedTeam -from langgraph.graph import StateGraph -from flo_ai.state.flo_session import FloSession -from flo_ai.helpers.utils import randomize_name - - -class Response(BaseModel): - """Response to user.""" - response: str - -class Plan(BaseModel): - """Plan to follow in future""" - - steps: list[str] = Field( - description="different steps to follow, should be in sorted order" - ) - -class Act(BaseModel): - """Action to perform.""" - action: Union[Response, Plan] = Field( - description="Action to perform. If you want to respond to user, use Response. " - "If you need to further use tools to get the answer, use Plan." - ) - -class FloPlanner(ExecutableFlo): - def __init__(self, name: str, graph: CompiledGraph) -> None: - super().__init__(name, graph) - - def draw(self, xray=True): - return self.graph.get_graph(xray=xray).draw_mermaid_png() - - def stream(self, work, config = None): - return self.graph.stream({ - "input": work - }, config) - - def invoke(self, work): - return self.graph.invoke({ - "input": work - }) - -class FloPlannerBuilder: - - def __init__(self, - session: FloSession, - name: str, - team: FloRoutedTeam, - planner_prompt: Union[ChatPromptTemplate, None] = None, - replanner_prompt: Union[ChatPromptTemplate, None] = None, - llm: Union[BaseLanguageModel, None] = None) -> None: - self.planner_name = randomize_name(name) - self.re_planner_name = randomize_name("{}-{}".format("replan", name)) - self.session = session - self.llm = llm if llm is not None else session.llm - self.team = team - planner_prompt = ChatPromptTemplate.from_messages( - [ - ( - "system", - """For the given objective, come up with a simple step by step plan. \ - This plan should involve individual tasks, that if executed correctly will yield the correct answer. Do not add any superfluous steps. \ - The result of the final step should be the final answer. Make sure that each step has all the information needed - do not skip steps.""", - ), - MessagesPlaceholder(variable_name="messages"), - ] - ) if planner_prompt is None else planner_prompt - self.planner = planner_prompt | self.llm.with_structured_output(Plan) - - self.replanner_prompt = ChatPromptTemplate.from_template( - """For the given objective, come up with a simple step by step plan. \ - This plan should involve individual tasks, that if executed correctly will yield the correct answer. Do not add any superfluous steps. \ - The result of the final step should be the final answer. Make sure that each step has all the information needed - do not skip steps. - - Your objective was this: - {input} - - Your original plan was this: - {plan} - - You have currently done the follow steps: - {past_steps} - - Update your plan accordingly. If no more steps are needed and you can return to the user, then do that. - Otherwise if there are still steps to complete, fill out the plan. Only add steps to the plan that still NEED to be done. - Do not return previously done steps as part of the plan.""" - ) if replanner_prompt is None else replanner_prompt - self.replanner = self.replanner_prompt | self.llm.with_structured_output(Act) - - def execute_step(self, state: TeamFloAgentStateWithPlan): - plan = state["plan"] - plan_str = "\n".join(f"{i+1}. {step}" for i, step in enumerate(plan)) - task = plan[0] - task_formatted = f"""For the following plan: - {plan_str}\n\nYou are tasked with executing step {1}, {task}.""" - agent_response = self.team.invoke(task_formatted) - return { - "past_steps": (task, agent_response["messages"][-1].content), - } - - def plan_step(self, state: TeamFloAgentStateWithPlan): - plan = self.planner.invoke({"messages": [("user", state["input"])]}) - if self.session is not None: - self.session.append(self.planner_name) - return {"plan": plan.steps} - - def replan_step(self, state: TeamFloAgentStateWithPlan): - output = self.replanner.invoke(state) - if self.session is not None: - self.session.append(self.re_planner_name) - if isinstance(output.action, Response): - return { "response": output.action.response } - else: - return { "plan": output.action.steps } - - def should_end(self, state: TeamFloAgentStateWithPlan): - if "response" in state and state["response"]: - return "__end__" - else: - return self.team.name - - def build(self): - workflow = StateGraph(TeamFloAgentStateWithPlan) - - # Add the plan node - workflow.add_node(self.planner_name, self.plan_step) - - # Add the execution step - workflow.add_node(self.team.name, self.execute_step) - - # Add a replan node - workflow.add_node(self.re_planner_name, self.replan_step) - - workflow.set_entry_point(self.planner_name) - - # From plan we go to agent - workflow.add_edge(self.planner_name, self.team.name) - - # From agent, we replan - workflow.add_edge(self.team.name, self.re_planner_name) - - workflow.add_conditional_edges( - self.re_planner_name, - # Next, we pass in the function that will determine which node is called next. - self.should_end, - ) - - # Finally, we compile it! - # This compiles it into a LangChain Runnable, - # meaning you can use it as you would any other runnable - return FloPlanner(self.planner_name, workflow.compile()) \ No newline at end of file diff --git a/flo_ai/models/flo_rag.py b/flo_ai/models/flo_rag.py index 7c73b261..a66576d7 100644 --- a/flo_ai/models/flo_rag.py +++ b/flo_ai/models/flo_rag.py @@ -9,7 +9,6 @@ from flo_ai.models.flo_executable import ExecutableFlo from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain import hub -from flo_ai.helpers.utils import randomize_name class FloRag(ExecutableFlo): def __init__(self, @@ -28,7 +27,7 @@ def __init__(self, tools: list[Tool], llm: BaseLanguageModel, prompt: Optional[ChatPromptTemplate] = None) -> None: - self.name = randomize_name(name) + self.name = name self.llm = llm self.tools = tools self.prompt = hub.pull("rlm/rag-prompt") if prompt is None else prompt diff --git a/flo_ai/models/flo_reflection_agent.py b/flo_ai/models/flo_reflection_agent.py index 2d531581..97b5a287 100644 --- a/flo_ai/models/flo_reflection_agent.py +++ b/flo_ai/models/flo_reflection_agent.py @@ -4,7 +4,6 @@ from flo_ai.state.flo_session import FloSession from flo_ai.models.flo_executable import ExecutableFlo from langchain_core.language_models import BaseLanguageModel -from flo_ai.helpers.utils import randomize_name from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from flo_ai.models.flo_executable import ExecutableType from langchain_core.output_parsers import StrOutputParser @@ -23,7 +22,7 @@ def __init__(self, llm: Union[BaseLanguageModel, None] = None) -> None: prompt_message: Union[ChatPromptTemplate, str] = config.job - self.name: str = randomize_name(config.name) + self.name: str = config.name self.llm = llm if llm is not None else session.llm self.config = config diff --git a/flo_ai/models/flo_team.py b/flo_ai/models/flo_team.py index e2a7313a..feb56442 100644 --- a/flo_ai/models/flo_team.py +++ b/flo_ai/models/flo_team.py @@ -1,10 +1,9 @@ from flo_ai.models.flo_member import FloMember -from flo_ai.helpers.utils import randomize_name from flo_ai.yaml.config import TeamConfig class FloTeam(): def __init__(self, team_config: TeamConfig, members: list[FloMember]) -> None: - self.name = randomize_name(team_config.name) + self.name = team_config.name self.config = team_config self.members = members diff --git a/flo_ai/models/flo_tool_agent.py b/flo_ai/models/flo_tool_agent.py index 365e2452..50ac9650 100644 --- a/flo_ai/models/flo_tool_agent.py +++ b/flo_ai/models/flo_tool_agent.py @@ -1,5 +1,4 @@ from langchain_core.runnables import Runnable -from flo_ai.helpers.utils import randomize_name from flo_ai.models.flo_executable import ExecutableFlo from flo_ai.state.flo_session import FloSession from flo_ai.yaml.config import AgentConfig diff --git a/flo_ai/router/flo_custom_router.py b/flo_ai/router/flo_custom_router.py index bea0fffa..05b5072e 100644 --- a/flo_ai/router/flo_custom_router.py +++ b/flo_ai/router/flo_custom_router.py @@ -5,7 +5,6 @@ from flo_ai.models.flo_routed_team import FloRoutedTeam from flo_ai.models.flo_team import FloTeam from flo_ai.state.flo_session import FloSession -from flo_ai.helpers.utils import agent_name_from_randomized_name, randomize_name from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.output_parsers.openai_functions import JsonOutputFunctionsParser @@ -13,7 +12,7 @@ class FloCustomRouter(FloRouter): def __init__(self, session: FloSession, config: TeamConfig, flo_team: FloTeam): self.llm = session.llm - super().__init__(session=session, name=randomize_name(config.name), + super().__init__(session=session, name=config.name, flo_team=flo_team, executor=None, config=config) self.router_config = config.router @@ -66,7 +65,7 @@ def build_agent_graph(self): workflow = StateGraph(TeamFloAgentState) for flo_agent_node in flo_agent_nodes: - agent_name = agent_name_from_randomized_name(flo_agent_node.name) + agent_name = flo_agent_node.name workflow.add_node(agent_name, flo_agent_node.func) router_config = self.router_config @@ -97,7 +96,7 @@ def build_team_graph(self): super_graph = StateGraph(TeamFloAgentState) for flo_team_chain in flo_team_entry_chains: - agent_name = agent_name_from_randomized_name(flo_team_chain.name) + agent_name = flo_team_chain.name super_graph.add_node(agent_name, flo_team_chain.func) router_config = self.router_config diff --git a/flo_ai/router/flo_linear.py b/flo_ai/router/flo_linear.py index 49add530..1d40addd 100644 --- a/flo_ai/router/flo_linear.py +++ b/flo_ai/router/flo_linear.py @@ -6,12 +6,11 @@ from flo_ai.models.flo_team import FloTeam from flo_ai.state.flo_session import FloSession from flo_ai.models.flo_executable import ExecutableType -from flo_ai.helpers.utils import agent_name_from_randomized_name, randomize_name class FloLinear(FloRouter): def __init__(self, session: FloSession, config: TeamConfig, flo_team: FloTeam): - super().__init__(session=session, name=randomize_name(config.name), + super().__init__(session=session, name=config.name, flo_team=flo_team, executor=None, config=config) self.router_config = config.router @@ -21,29 +20,32 @@ def build_agent_graph(self): workflow = StateGraph(TeamFloAgentState) for flo_node in flo_agent_nodes: - agent_name = agent_name_from_randomized_name(flo_node.name) + agent_name = flo_node.name workflow.add_node(agent_name, flo_node.func) if self.router_config.edges is None: - start_node_name = agent_name_from_randomized_name(flo_agent_nodes[0].name) - end_node_name = agent_name_from_randomized_name(flo_agent_nodes[-1].name) - workflow.add_edge(START, start_node_name) + start_node = flo_agent_nodes[0] + end_node = flo_agent_nodes[-1] + workflow.add_edge(START, start_node.name) for i in range(len(flo_agent_nodes) - 1): - agent1_name = agent_name_from_randomized_name(flo_agent_nodes[i].name) - agent2_name = agent_name_from_randomized_name(flo_agent_nodes[i+1].name) - if (flo_agent_nodes[i].kind == ExecutableType.reflection): - self.add_reflection_edge(workflow, flo_agent_nodes[i], flo_agent_nodes[i+1]) - else: - if (flo_agent_nodes[i+1].kind != ExecutableType.reflection and flo_agent_nodes[i].kind != ExecutableType.delegator): - if flo_agent_nodes[i+1].kind == ExecutableType.delegator: - self.add_delegation_edge(workflow, flo_agent_nodes[i], flo_agent_nodes[i+1], flo_agent_nodes[i+2] if (i+2) None: - self.name = randomize_name(team_config.router.name) + self.name = team_config.router.name self.session = session self.llm = llm if llm is not None else session.llm self.flo_team = flo_team diff --git a/flo_ai/router/flo_router.py b/flo_ai/router/flo_router.py index d2634fd7..4dce706d 100644 --- a/flo_ai/router/flo_router.py +++ b/flo_ai/router/flo_router.py @@ -127,6 +127,7 @@ def add_reflection_edge(self, workflow: StateGraph, reflection_node: FloNode, ne next = nextNode if isinstance(nextNode, str) else nextNode.name workflow.add_node(INTERNAL_NODE_REFLECTION_MANAGER, functools.partial(self.update_reflection_state, reflection_agent_name=reflection_agent_name)) + workflow.add_edge(to_agent_name, INTERNAL_NODE_REFLECTION_MANAGER) workflow.add_conditional_edges( INTERNAL_NODE_REFLECTION_MANAGER, diff --git a/flo_ai/router/flo_supervisor.py b/flo_ai/router/flo_supervisor.py index f1fc5577..a888f75b 100644 --- a/flo_ai/router/flo_supervisor.py +++ b/flo_ai/router/flo_supervisor.py @@ -5,7 +5,6 @@ from langchain_core.runnables import Runnable from flo_ai.state.flo_session import FloSession from flo_ai.constants.prompt_constants import FLO_FINISH -from flo_ai.helpers.utils import randomize_name from flo_ai.router.flo_llm_router import FloLLMRouter, StateUpdateComponent from flo_ai.models.flo_team import FloTeam from flo_ai.yaml.config import TeamConfig @@ -39,8 +38,7 @@ def __init__(self, team_config: TeamConfig, flo_team: FloTeam, llm: Union[BaseLanguageModel, None] = None) -> None: - # TODO add validation for reporteess - self.name = randomize_name(team_config.router.name) + self.name = team_config.router.name self.session = session self.llm = llm if llm is not None else session.llm self.flo_team = flo_team diff --git a/flo_ai/state/flo_session.py b/flo_ai/state/flo_session.py index 17c98dc0..280270cc 100644 --- a/flo_ai/state/flo_session.py +++ b/flo_ai/state/flo_session.py @@ -5,6 +5,7 @@ from flo_ai.common.flo_logger import session_logger, FloLogger from flo_ai.common.flo_langchain_logger import FloLangchainLogger from flo_ai.yaml.config import FloRoutedTeamConfig, FloAgentConfig +from flo_ai.helpers.utils import random_str from typing import Optional @@ -16,7 +17,8 @@ def __init__(self, max_loop: int = 3, log_level: Optional[str] = "INFO", custom_langchainlog_handler: Optional[FloLangchainLogger] = None) -> None: - self.session_id = str(uuid.uuid4()) + + self.session_id = str(random_str(16)) self.llm = llm self.tools = dict() self.counter = dict() diff --git a/flo_ai/yaml/validators.py b/flo_ai/yaml/validators.py new file mode 100644 index 00000000..9974b5f3 --- /dev/null +++ b/flo_ai/yaml/validators.py @@ -0,0 +1,13 @@ +import re + +name_regex = r'^[a-zA-Z0-9-_]+$' + +class DuplicateStringError(Exception): + pass + +class InvalidStringError(Exception): + pass + +def raise_for_name_error(string): + if not re.match(name_regex, string): + raise InvalidStringError("Name must contain only alphanumeric characters and hyphens.") \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 043e95d0..9d3051d4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -205,17 +205,6 @@ doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphin 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 = "appdirs" -version = "1.4.4" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = "*" -files = [ - {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, - {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, -] - [[package]] name = "appnope" version = "0.1.4" @@ -343,6 +332,26 @@ files = [ tests = ["pytest (>=3.2.1,!=3.3.0)"] typecheck = ["mypy"] +[[package]] +name = "behave" +version = "1.2.6" +description = "behave is behaviour-driven development, Python style" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "behave-1.2.6-py2.py3-none-any.whl", hash = "sha256:ebda1a6c9e5bfe95c5f9f0a2794e01c7098b3dde86c10a95d8621c5907ff6f1c"}, + {file = "behave-1.2.6.tar.gz", hash = "sha256:b9662327aa53294c1351b0a9c369093ccec1d21026f050c3bd9b3e5cccf81a86"}, +] + +[package.dependencies] +parse = ">=1.8.2" +parse-type = ">=0.4.2" +six = ">=1.11" + +[package.extras] +develop = ["coverage", "invoke (>=0.21.0)", "modernize (>=0.5)", "path.py (>=8.1.2)", "pathlib", "pycmd", "pylint", "pytest (>=3.0)", "pytest-cov", "tox"] +docs = ["sphinx (>=1.6)", "sphinx-bootstrap-theme (>=0.6)"] + [[package]] name = "build" version = "1.2.1" @@ -660,35 +669,6 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -[[package]] -name = "cmake" -version = "3.30.2" -description = "CMake is an open-source, cross-platform family of tools designed to build, test and package software" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cmake-3.30.2-py3-none-macosx_11_0_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.whl", hash = "sha256:e706eded76e0e8b09d2cf09cbab0a930f6550084a85950982b7c53f6a79a0451"}, - {file = "cmake-3.30.2-py3-none-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:48e0998068d785d3b78cc60a7e3d38fd71cfb942ce0a72ee046de38ec2bd6523"}, - {file = "cmake-3.30.2-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:709568c04f60f6dbee846a997a774ae28e12e809b4cbb12b6cd00767c111ede0"}, - {file = "cmake-3.30.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d0b29a92cf31c54ab21040e84a78420abbf59cdd73c30d05e0e70229b2e9348"}, - {file = "cmake-3.30.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6021b64ec6ddf43ff5887e510f897468a281f1822feedf48edf86926288a48a7"}, - {file = "cmake-3.30.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27f9f8b8a442d489cf4ae5dae1e475430979e9fcfbaef5fd0810aac4206548a9"}, - {file = "cmake-3.30.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe4f48bb96fadef92697ccaeb98b22ff36b3add80e45ce48e0c67462846fd242"}, - {file = "cmake-3.30.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9beca135489d56a89cf54cf3d324bcf8dd6c50cc9bdb76b9a97e8540935797b2"}, - {file = "cmake-3.30.2-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:02657456811a8dd95d07728e0878ee6e09d0466de84319513af99490beefe753"}, - {file = "cmake-3.30.2-py3-none-musllinux_1_1_i686.whl", hash = "sha256:ee421b9531279b88e54c4bd3ff41c538d1f563e75b1340a8eb2569c38949d230"}, - {file = "cmake-3.30.2-py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:806d3295c75ae4f9bd53100b4cdd17c00b41e1606a6cff6faf1f599fdace7d71"}, - {file = "cmake-3.30.2-py3-none-musllinux_1_1_s390x.whl", hash = "sha256:b58b658f3ea47b1b6deb8fab817bf68a9c7f00fde514ad344b9cef16d684206a"}, - {file = "cmake-3.30.2-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:fef0b8a18a6376ff430e86bedcccb4018b344295a17584aaebf1b7339c92f505"}, - {file = "cmake-3.30.2-py3-none-win32.whl", hash = "sha256:977acfb5256e29bc9e14004a2350a7f8bb6a2c5d42ad74183fb64275b99af2fa"}, - {file = "cmake-3.30.2-py3-none-win_amd64.whl", hash = "sha256:894214560a6d70af6e88d8506f41f6911c31757a7799eced3322ca1fc4c76e4a"}, - {file = "cmake-3.30.2-py3-none-win_arm64.whl", hash = "sha256:33e6ce72a4865b25f7f61e40e634382a7cfbe494785ce3c0aa94475b5e0f9252"}, - {file = "cmake-3.30.2.tar.gz", hash = "sha256:54dba98c12c6b77bd86b452b71c7f7f3b04027081f3451e18cdf2d926e4695e5"}, -] - -[package.extras] -test = ["coverage (>=4.2)", "pytest (>=3.0.3)", "pytest-cov (>=2.4.0)"] - [[package]] name = "colorama" version = "0.4.6" @@ -749,50 +729,6 @@ files = [ marshmallow = ">=3.18.0,<4.0.0" typing-inspect = ">=0.4.0,<1" -[[package]] -name = "datasets" -version = "2.21.0" -description = "HuggingFace community-driven open-source library of datasets" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "datasets-2.21.0-py3-none-any.whl", hash = "sha256:25e4e097110ce28824b746a107727ada94024cba11db8bc588d468414692b65a"}, - {file = "datasets-2.21.0.tar.gz", hash = "sha256:998f85a8460f1bd982e5bd058f8a0808eef424249e3df1e8cdd594ccd0dc8ba2"}, -] - -[package.dependencies] -aiohttp = "*" -dill = ">=0.3.0,<0.3.9" -filelock = "*" -fsspec = {version = ">=2023.1.0,<=2024.6.1", extras = ["http"]} -huggingface-hub = ">=0.21.2" -multiprocess = "*" -numpy = ">=1.17" -packaging = "*" -pandas = "*" -pyarrow = ">=15.0.0" -pyyaml = ">=5.1" -requests = ">=2.32.2" -tqdm = ">=4.66.3" -xxhash = "*" - -[package.extras] -apache-beam = ["apache-beam (>=2.26.0)"] -audio = ["librosa", "soundfile (>=0.12.1)", "soxr (>=0.4.0)"] -benchmarks = ["tensorflow (==2.12.0)", "torch (==2.0.1)", "transformers (==4.30.1)"] -dev = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "ruff (>=0.3.0)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tensorflow (>=2.16.0)", "tensorflow (>=2.6.0)", "tensorflow (>=2.6.0)", "tiktoken", "torch", "torch (>=2.0.0)", "transformers", "transformers (>=4.42.0)", "typing-extensions (>=4.6.1)", "zstandard"] -docs = ["s3fs", "tensorflow (>=2.6.0)", "torch", "transformers"] -jax = ["jax (>=0.3.14)", "jaxlib (>=0.3.14)"] -metrics-tests = ["Werkzeug (>=1.0.1)", "accelerate", "bert-score (>=0.3.6)", "jiwer", "langdetect", "mauve-text", "nltk (<3.8.2)", "requests-file (>=1.5.1)", "rouge-score", "sacrebleu", "sacremoses", "scikit-learn", "scipy", "sentencepiece", "seqeval", "six (>=1.15.0,<1.16.0)", "spacy (>=3.0.0)", "texttable (>=1.6.3)", "tldextract", "tldextract (>=3.1.0)", "toml (>=0.10.1)", "typer (<0.5.0)"] -quality = ["ruff (>=0.3.0)"] -s3 = ["s3fs"] -tensorflow = ["tensorflow (>=2.6.0)"] -tensorflow-gpu = ["tensorflow (>=2.6.0)"] -tests = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tensorflow (>=2.16.0)", "tensorflow (>=2.6.0)", "tiktoken", "torch (>=2.0.0)", "transformers (>=4.42.0)", "typing-extensions (>=4.6.1)", "zstandard"] -tests-numpy2 = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tiktoken", "torch (>=2.0.0)", "typing-extensions (>=4.6.1)", "zstandard"] -torch = ["torch"] -vision = ["Pillow (>=9.4.0)"] - [[package]] name = "db" version = "0.1.1" @@ -861,45 +797,6 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] -[[package]] -name = "deepeval" -version = "0.21.78" -description = "The open-source evaluation framework for LLMs." -optional = false -python-versions = "*" -files = [ - {file = "deepeval-0.21.78-py3-none-any.whl", hash = "sha256:fd947662adac13b69c7aa348da96624cac34e9c0e2ee811d08ec78fbf3dab280"}, - {file = "deepeval-0.21.78.tar.gz", hash = "sha256:bd3f7ff10c92c8bd230181c28b8313dd47093dc65b606c5f0cf760929a28f61e"}, -] - -[package.dependencies] -docx2txt = ">=0.8,<1.0" -grpcio = "1.63.0" -importlib-metadata = ">=6.0.2" -langchain = "*" -langchain-core = "*" -langchain-openai = "*" -opentelemetry-api = "1.24.0" -opentelemetry-exporter-otlp-proto-grpc = "1.24.0" -opentelemetry-sdk = "1.24.0" -portalocker = "*" -protobuf = "4.25.1" -pydantic = "*" -pytest = "*" -pytest-repeat = "*" -pytest-xdist = "*" -ragas = "*" -requests = "*" -rich = "*" -sentry-sdk = "*" -tabulate = "*" -tenacity = ">=8.4.1,<8.5.0" -tqdm = "*" -typer = "*" - -[package.extras] -dev = ["black"] - [[package]] name = "defusedxml" version = "0.7.1" @@ -928,21 +825,6 @@ wrapt = ">=1.10,<2" [package.extras] dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] -[[package]] -name = "dill" -version = "0.3.8" -description = "serialize all of Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, - {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, -] - -[package.extras] -graph = ["objgraph (>=1.7.2)"] -profile = ["gprof2dot (>=2022.7.29)"] - [[package]] name = "distro" version = "1.9.0" @@ -974,16 +856,6 @@ idna = ["idna (>=3.6)"] trio = ["trio (>=0.23)"] wmi = ["wmi (>=1.5.1)"] -[[package]] -name = "docx2txt" -version = "0.8" -description = "A pure python-based utility to extract text and images from docx files." -optional = false -python-versions = "*" -files = [ - {file = "docx2txt-0.8.tar.gz", hash = "sha256:2c06d98d7cfe2d3947e5760a57d924e3ff07745b379c8737723922e7009236e5"}, -] - [[package]] name = "exceptiongroup" version = "1.2.2" @@ -998,20 +870,6 @@ files = [ [package.extras] test = ["pytest (>=6)"] -[[package]] -name = "execnet" -version = "2.1.1" -description = "execnet: rapid multi-Python deployment" -optional = false -python-versions = ">=3.8" -files = [ - {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, - {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, -] - -[package.extras] -testing = ["hatch", "pre-commit", "pytest", "tox"] - [[package]] name = "executing" version = "2.0.1" @@ -1170,9 +1028,6 @@ files = [ {file = "fsspec-2024.6.1.tar.gz", hash = "sha256:fad7d7e209dd4c1208e3bbfda706620e0da5142bebbd9c384afb95b07e798e49"}, ] -[package.dependencies] -aiohttp = {version = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1", optional = true, markers = "extra == \"http\""} - [package.extras] abfs = ["adlfs"] adl = ["adlfs"] @@ -1571,17 +1426,6 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] type = ["pytest-mypy"] -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - [[package]] name = "ipykernel" version = "6.29.5" @@ -1672,23 +1516,6 @@ docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alab qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] -[[package]] -name = "jinja2" -version = "3.1.4" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - [[package]] name = "jiter" version = "0.5.0" @@ -1759,17 +1586,6 @@ files = [ {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, ] -[[package]] -name = "joblib" -version = "1.4.2" -description = "Lightweight pipelining with Python functions" -optional = false -python-versions = ">=3.8" -files = [ - {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, - {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, -] - [[package]] name = "jsonpatch" version = "1.33" @@ -1795,41 +1611,6 @@ files = [ {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, ] -[[package]] -name = "jsonschema" -version = "4.23.0" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, - {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -jsonschema-specifications = ">=2023.03.6" -referencing = ">=0.28.4" -rpds-py = ">=0.7.1" - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] - -[[package]] -name = "jsonschema-specifications" -version = "2023.12.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, - {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, -] - -[package.dependencies] -referencing = ">=0.31.0" - [[package]] name = "jupyter-client" version = "8.6.2" @@ -2129,34 +1910,6 @@ pydantic = [ ] requests = ">=2,<3" -[[package]] -name = "lark" -version = "1.2.2" -description = "a modern parsing library" -optional = false -python-versions = ">=3.8" -files = [ - {file = "lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c"}, - {file = "lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80"}, -] - -[package.extras] -atomic-cache = ["atomicwrites"] -interegular = ["interegular (>=0.3.1,<0.4.0)"] -nearley = ["js2py"] -regex = ["regex"] - -[[package]] -name = "lit" -version = "18.1.8" -description = "A Software Testing Tool" -optional = false -python-versions = "*" -files = [ - {file = "lit-18.1.8-py3-none-any.whl", hash = "sha256:a873ff7acd76e746368da32eb7355625e2e55a2baaab884c9cc130f2ee0300f7"}, - {file = "lit-18.1.8.tar.gz", hash = "sha256:47c174a186941ae830f04ded76a3444600be67d5e5fb8282c3783fba671c4edb"}, -] - [[package]] name = "markdown-it-py" version = "3.0.0" @@ -2181,75 +1934,6 @@ profiling = ["gprof2dot"] rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] -[[package]] -name = "markupsafe" -version = "2.1.5" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, -] - [[package]] name = "marshmallow" version = "3.22.0" @@ -2414,71 +2098,6 @@ docs = ["sphinx"] gmpy = ["gmpy2 (>=2.1.0a4)"] tests = ["pytest (>=4.6)"] -[[package]] -name = "msgpack" -version = "1.0.8" -description = "MessagePack serializer" -optional = false -python-versions = ">=3.8" -files = [ - {file = "msgpack-1.0.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:505fe3d03856ac7d215dbe005414bc28505d26f0c128906037e66d98c4e95868"}, - {file = "msgpack-1.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6b7842518a63a9f17107eb176320960ec095a8ee3b4420b5f688e24bf50c53c"}, - {file = "msgpack-1.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:376081f471a2ef24828b83a641a02c575d6103a3ad7fd7dade5486cad10ea659"}, - {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e390971d082dba073c05dbd56322427d3280b7cc8b53484c9377adfbae67dc2"}, - {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e073efcba9ea99db5acef3959efa45b52bc67b61b00823d2a1a6944bf45982"}, - {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82d92c773fbc6942a7a8b520d22c11cfc8fd83bba86116bfcf962c2f5c2ecdaa"}, - {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9ee32dcb8e531adae1f1ca568822e9b3a738369b3b686d1477cbc643c4a9c128"}, - {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e3aa7e51d738e0ec0afbed661261513b38b3014754c9459508399baf14ae0c9d"}, - {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69284049d07fce531c17404fcba2bb1df472bc2dcdac642ae71a2d079d950653"}, - {file = "msgpack-1.0.8-cp310-cp310-win32.whl", hash = "sha256:13577ec9e247f8741c84d06b9ece5f654920d8365a4b636ce0e44f15e07ec693"}, - {file = "msgpack-1.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:e532dbd6ddfe13946de050d7474e3f5fb6ec774fbb1a188aaf469b08cf04189a"}, - {file = "msgpack-1.0.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9517004e21664f2b5a5fd6333b0731b9cf0817403a941b393d89a2f1dc2bd836"}, - {file = "msgpack-1.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d16a786905034e7e34098634b184a7d81f91d4c3d246edc6bd7aefb2fd8ea6ad"}, - {file = "msgpack-1.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2872993e209f7ed04d963e4b4fbae72d034844ec66bc4ca403329db2074377b"}, - {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c330eace3dd100bdb54b5653b966de7f51c26ec4a7d4e87132d9b4f738220ba"}, - {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83b5c044f3eff2a6534768ccfd50425939e7a8b5cf9a7261c385de1e20dcfc85"}, - {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1876b0b653a808fcd50123b953af170c535027bf1d053b59790eebb0aeb38950"}, - {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dfe1f0f0ed5785c187144c46a292b8c34c1295c01da12e10ccddfc16def4448a"}, - {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3528807cbbb7f315bb81959d5961855e7ba52aa60a3097151cb21956fbc7502b"}, - {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e2f879ab92ce502a1e65fce390eab619774dda6a6ff719718069ac94084098ce"}, - {file = "msgpack-1.0.8-cp311-cp311-win32.whl", hash = "sha256:26ee97a8261e6e35885c2ecd2fd4a6d38252246f94a2aec23665a4e66d066305"}, - {file = "msgpack-1.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:eadb9f826c138e6cf3c49d6f8de88225a3c0ab181a9b4ba792e006e5292d150e"}, - {file = "msgpack-1.0.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:114be227f5213ef8b215c22dde19532f5da9652e56e8ce969bf0a26d7c419fee"}, - {file = "msgpack-1.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d661dc4785affa9d0edfdd1e59ec056a58b3dbb9f196fa43587f3ddac654ac7b"}, - {file = "msgpack-1.0.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d56fd9f1f1cdc8227d7b7918f55091349741904d9520c65f0139a9755952c9e8"}, - {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0726c282d188e204281ebd8de31724b7d749adebc086873a59efb8cf7ae27df3"}, - {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8db8e423192303ed77cff4dce3a4b88dbfaf43979d280181558af5e2c3c71afc"}, - {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99881222f4a8c2f641f25703963a5cefb076adffd959e0558dc9f803a52d6a58"}, - {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b5505774ea2a73a86ea176e8a9a4a7c8bf5d521050f0f6f8426afe798689243f"}, - {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ef254a06bcea461e65ff0373d8a0dd1ed3aa004af48839f002a0c994a6f72d04"}, - {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e1dd7839443592d00e96db831eddb4111a2a81a46b028f0facd60a09ebbdd543"}, - {file = "msgpack-1.0.8-cp312-cp312-win32.whl", hash = "sha256:64d0fcd436c5683fdd7c907eeae5e2cbb5eb872fafbc03a43609d7941840995c"}, - {file = "msgpack-1.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:74398a4cf19de42e1498368c36eed45d9528f5fd0155241e82c4082b7e16cffd"}, - {file = "msgpack-1.0.8-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0ceea77719d45c839fd73abcb190b8390412a890df2f83fb8cf49b2a4b5c2f40"}, - {file = "msgpack-1.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1ab0bbcd4d1f7b6991ee7c753655b481c50084294218de69365f8f1970d4c151"}, - {file = "msgpack-1.0.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1cce488457370ffd1f953846f82323cb6b2ad2190987cd4d70b2713e17268d24"}, - {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3923a1778f7e5ef31865893fdca12a8d7dc03a44b33e2a5f3295416314c09f5d"}, - {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22e47578b30a3e199ab067a4d43d790249b3c0587d9a771921f86250c8435db"}, - {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd739c9251d01e0279ce729e37b39d49a08c0420d3fee7f2a4968c0576678f77"}, - {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d3420522057ebab1728b21ad473aa950026d07cb09da41103f8e597dfbfaeb13"}, - {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5845fdf5e5d5b78a49b826fcdc0eb2e2aa7191980e3d2cfd2a30303a74f212e2"}, - {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a0e76621f6e1f908ae52860bdcb58e1ca85231a9b0545e64509c931dd34275a"}, - {file = "msgpack-1.0.8-cp38-cp38-win32.whl", hash = "sha256:374a8e88ddab84b9ada695d255679fb99c53513c0a51778796fcf0944d6c789c"}, - {file = "msgpack-1.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3709997b228685fe53e8c433e2df9f0cdb5f4542bd5114ed17ac3c0129b0480"}, - {file = "msgpack-1.0.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f51bab98d52739c50c56658cc303f190785f9a2cd97b823357e7aeae54c8f68a"}, - {file = "msgpack-1.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:73ee792784d48aa338bba28063e19a27e8d989344f34aad14ea6e1b9bd83f596"}, - {file = "msgpack-1.0.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f9904e24646570539a8950400602d66d2b2c492b9010ea7e965025cb71d0c86d"}, - {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e75753aeda0ddc4c28dce4c32ba2f6ec30b1b02f6c0b14e547841ba5b24f753f"}, - {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5dbf059fb4b7c240c873c1245ee112505be27497e90f7c6591261c7d3c3a8228"}, - {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4916727e31c28be8beaf11cf117d6f6f188dcc36daae4e851fee88646f5b6b18"}, - {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7938111ed1358f536daf311be244f34df7bf3cdedb3ed883787aca97778b28d8"}, - {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:493c5c5e44b06d6c9268ce21b302c9ca055c1fd3484c25ba41d34476c76ee746"}, - {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fbb160554e319f7b22ecf530a80a3ff496d38e8e07ae763b9e82fadfe96f273"}, - {file = "msgpack-1.0.8-cp39-cp39-win32.whl", hash = "sha256:f9af38a89b6a5c04b7d18c492c8ccf2aee7048aff1ce8437c4683bb5a1df893d"}, - {file = "msgpack-1.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ed59dd52075f8fc91da6053b12e8c89e37aa043f8986efd89e61fae69dc1b011"}, - {file = "msgpack-1.0.8.tar.gz", hash = "sha256:95c02b0e27e706e48d0e5426d1710ca78e0f0628d6e89d5b5a5b91a5f12274f3"}, -] - [[package]] name = "multidict" version = "6.0.5" @@ -2578,30 +2197,6 @@ files = [ {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] -[[package]] -name = "multiprocess" -version = "0.70.16" -description = "better multiprocessing and multithreading in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "multiprocess-0.70.16-pp310-pypy310_pp73-macosx_10_13_x86_64.whl", hash = "sha256:476887be10e2f59ff183c006af746cb6f1fd0eadcfd4ef49e605cbe2659920ee"}, - {file = "multiprocess-0.70.16-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d951bed82c8f73929ac82c61f01a7b5ce8f3e5ef40f5b52553b4f547ce2b08ec"}, - {file = "multiprocess-0.70.16-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37b55f71c07e2d741374998c043b9520b626a8dddc8b3129222ca4f1a06ef67a"}, - {file = "multiprocess-0.70.16-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba8c31889abf4511c7308a8c52bb4a30b9d590e7f58523302ba00237702ca054"}, - {file = "multiprocess-0.70.16-pp39-pypy39_pp73-macosx_10_13_x86_64.whl", hash = "sha256:0dfd078c306e08d46d7a8d06fb120313d87aa43af60d66da43ffff40b44d2f41"}, - {file = "multiprocess-0.70.16-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e7b9d0f307cd9bd50851afaac0dba2cb6c44449efff697df7c7645f7d3f2be3a"}, - {file = "multiprocess-0.70.16-py310-none-any.whl", hash = "sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02"}, - {file = "multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a"}, - {file = "multiprocess-0.70.16-py312-none-any.whl", hash = "sha256:fc0544c531920dde3b00c29863377f87e1632601092ea2daca74e4beb40faa2e"}, - {file = "multiprocess-0.70.16-py38-none-any.whl", hash = "sha256:a71d82033454891091a226dfc319d0cfa8019a4e888ef9ca910372a446de4435"}, - {file = "multiprocess-0.70.16-py39-none-any.whl", hash = "sha256:a0bafd3ae1b732eac64be2e72038231c1ba97724b60b09400d68f229fcc2fbf3"}, - {file = "multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1"}, -] - -[package.dependencies] -dill = ">=0.3.8" - [[package]] name = "mypy-extensions" version = "1.0.0" @@ -2624,24 +2219,6 @@ files = [ {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] -[[package]] -name = "networkx" -version = "3.3" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.10" -files = [ - {file = "networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2"}, - {file = "networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9"}, -] - -[package.extras] -default = ["matplotlib (>=3.6)", "numpy (>=1.23)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["myst-nb (>=1.0)", "numpydoc (>=1.7)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=2.0)", "pygraphviz (>=1.12)", "sympy (>=1.10)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] - [[package]] name = "numpy" version = "1.26.4" @@ -2687,166 +2264,6 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] -[[package]] -name = "nvidia-cublas-cu11" -version = "11.10.3.66" -description = "CUBLAS native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cublas_cu11-11.10.3.66-py3-none-manylinux1_x86_64.whl", hash = "sha256:d32e4d75f94ddfb93ea0a5dda08389bcc65d8916a25cb9f37ac89edaeed3bded"}, - {file = "nvidia_cublas_cu11-11.10.3.66-py3-none-win_amd64.whl", hash = "sha256:8ac17ba6ade3ed56ab898a036f9ae0756f1e81052a317bf98f8c6d18dc3ae49e"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cuda-cupti-cu11" -version = "11.7.101" -description = "CUDA profiling tools runtime libs." -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_cupti_cu11-11.7.101-py3-none-manylinux1_x86_64.whl", hash = "sha256:e0cfd9854e1f2edaa36ca20d21cd0bdd5dcfca4e3b9e130a082e05b33b6c5895"}, - {file = "nvidia_cuda_cupti_cu11-11.7.101-py3-none-win_amd64.whl", hash = "sha256:7cc5b8f91ae5e1389c3c0ad8866b3b016a175e827ea8f162a672990a402ab2b0"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cuda-nvrtc-cu11" -version = "11.7.99" -description = "NVRTC native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_nvrtc_cu11-11.7.99-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:9f1562822ea264b7e34ed5930567e89242d266448e936b85bc97a3370feabb03"}, - {file = "nvidia_cuda_nvrtc_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:f7d9610d9b7c331fa0da2d1b2858a4a8315e6d49765091d28711c8946e7425e7"}, - {file = "nvidia_cuda_nvrtc_cu11-11.7.99-py3-none-win_amd64.whl", hash = "sha256:f2effeb1309bdd1b3854fc9b17eaf997808f8b25968ce0c7070945c4265d64a3"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cuda-runtime-cu11" -version = "11.7.99" -description = "CUDA Runtime native Libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_runtime_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:cc768314ae58d2641f07eac350f40f99dcb35719c4faff4bc458a7cd2b119e31"}, - {file = "nvidia_cuda_runtime_cu11-11.7.99-py3-none-win_amd64.whl", hash = "sha256:bc77fa59a7679310df9d5c70ab13c4e34c64ae2124dd1efd7e5474b71be125c7"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cudnn-cu11" -version = "8.5.0.96" -description = "cuDNN runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cudnn_cu11-8.5.0.96-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:402f40adfc6f418f9dae9ab402e773cfed9beae52333f6d86ae3107a1b9527e7"}, - {file = "nvidia_cudnn_cu11-8.5.0.96-py3-none-manylinux1_x86_64.whl", hash = "sha256:71f8111eb830879ff2836db3cccf03bbd735df9b0d17cd93761732ac50a8a108"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cufft-cu11" -version = "10.9.0.58" -description = "CUFFT native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cufft_cu11-10.9.0.58-py3-none-manylinux1_x86_64.whl", hash = "sha256:222f9da70c80384632fd6035e4c3f16762d64ea7a843829cb278f98b3cb7dd81"}, - {file = "nvidia_cufft_cu11-10.9.0.58-py3-none-manylinux2014_aarch64.whl", hash = "sha256:34b7315104e615b230dc3c2d1861f13bff9ec465c5d3b4bb65b4986d03a1d8d4"}, - {file = "nvidia_cufft_cu11-10.9.0.58-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e21037259995243cc370dd63c430d77ae9280bedb68d5b5a18226bfc92e5d748"}, - {file = "nvidia_cufft_cu11-10.9.0.58-py3-none-win_amd64.whl", hash = "sha256:c4d316f17c745ec9c728e30409612eaf77a8404c3733cdf6c9c1569634d1ca03"}, -] - -[[package]] -name = "nvidia-curand-cu11" -version = "10.2.10.91" -description = "CURAND native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_curand_cu11-10.2.10.91-py3-none-manylinux1_x86_64.whl", hash = "sha256:eecb269c970fa599a2660c9232fa46aaccbf90d9170b96c462e13bcb4d129e2c"}, - {file = "nvidia_curand_cu11-10.2.10.91-py3-none-win_amd64.whl", hash = "sha256:f742052af0e1e75523bde18895a9ed016ecf1e5aa0ecddfcc3658fd11a1ff417"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cusolver-cu11" -version = "11.4.0.1" -description = "CUDA solver native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cusolver_cu11-11.4.0.1-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:72fa7261d755ed55c0074960df5904b65e2326f7adce364cbe4945063c1be412"}, - {file = "nvidia_cusolver_cu11-11.4.0.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:700b781bfefd57d161443aff9ace1878584b93e0b2cfef3d6e9296d96febbf99"}, - {file = "nvidia_cusolver_cu11-11.4.0.1-py3-none-win_amd64.whl", hash = "sha256:00f70b256add65f8c1eb3b6a65308795a93e7740f6df9e273eccbba770d370c4"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cusparse-cu11" -version = "11.7.4.91" -description = "CUSPARSE native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cusparse_cu11-11.7.4.91-py3-none-manylinux1_x86_64.whl", hash = "sha256:a3389de714db63321aa11fbec3919271f415ef19fda58aed7f2ede488c32733d"}, - {file = "nvidia_cusparse_cu11-11.7.4.91-py3-none-win_amd64.whl", hash = "sha256:304a01599534f5186a8ed1c3756879282c72c118bc77dd890dc1ff868cad25b9"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-nccl-cu11" -version = "2.14.3" -description = "NVIDIA Collective Communication Library (NCCL) Runtime" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_nccl_cu11-2.14.3-py3-none-manylinux1_x86_64.whl", hash = "sha256:5e5534257d1284b8e825bc3a182c6f06acd6eb405e9f89d49340e98cd8f136eb"}, -] - -[[package]] -name = "nvidia-nvtx-cu11" -version = "11.7.91" -description = "NVIDIA Tools Extension" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_nvtx_cu11-11.7.91-py3-none-manylinux1_x86_64.whl", hash = "sha256:b22c64eee426a62fc00952b507d6d29cf62b4c9df7a480fcc417e540e05fd5ac"}, - {file = "nvidia_nvtx_cu11-11.7.91-py3-none-win_amd64.whl", hash = "sha256:dfd7fcb2a91742513027d63a26b757f38dd8b07fecac282c4d132a9d373ff064"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - [[package]] name = "oauthlib" version = "3.2.2" @@ -3196,77 +2613,35 @@ files = [ ] [[package]] -name = "pandas" -version = "2.2.2" -description = "Powerful data structures for data analysis, time series, and statistics" +name = "parse" +version = "1.20.2" +description = "parse() is the opposite of format()" optional = false -python-versions = ">=3.9" +python-versions = "*" files = [ - {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"}, + {file = "parse-1.20.2-py2.py3-none-any.whl", hash = "sha256:967095588cb802add9177d0c0b6133b5ba33b1ea9007ca800e526f42a85af558"}, + {file = "parse-1.20.2.tar.gz", hash = "sha256:b41d604d16503c79d81af5165155c0b20f6c8d6c559efa66b4b695c3e5a0a0ce"}, ] -[package.dependencies] -numpy = [ - {version = ">=1.22.4", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +[[package]] +name = "parse-type" +version = "0.6.3" +description = "Simplifies to build parse types based on the parse module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,>=2.7" +files = [ + {file = "parse_type-0.6.3-py2.py3-none-any.whl", hash = "sha256:8d94a52e0197fbad63fee8f70df16e6ed689e5e4f105b705c9afa7a30397a5aa"}, + {file = "parse_type-0.6.3.tar.gz", hash = "sha256:8e99d2f52fab2f0f1f3d68ba9d026060140bf0e53680aada0111fb27b2f0e93a"}, ] -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tzdata = ">=2022.7" + +[package.dependencies] +parse = {version = ">=1.18.0", markers = "python_version >= \"3.0\""} +six = ">=1.15" [package.extras] -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.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.9.2)"] +develop = ["build (>=0.5.1)", "coverage (>=4.4)", "pylint", "pytest (<5.0)", "pytest (>=5.0)", "pytest-cov", "pytest-html (>=1.19.0)", "ruff", "setuptools", "tox (>=2.8,<4.0)", "twine (>=1.13.0)", "virtualenv (<20.22.0)", "virtualenv (>=20.0.0)"] +docs = ["Sphinx (>=1.6)", "sphinx-bootstrap-theme (>=0.6.0)"] +testing = ["pytest (<5.0)", "pytest (>=5.0)", "pytest-html (>=1.19.0)"] [[package]] name = "parso" @@ -3420,40 +2795,6 @@ docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx- test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] type = ["mypy (>=1.8)"] -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "portalocker" -version = "2.10.1" -description = "Wraps the portalocker recipe for easy usage" -optional = false -python-versions = ">=3.8" -files = [ - {file = "portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf"}, - {file = "portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f"}, -] - -[package.dependencies] -pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} - -[package.extras] -docs = ["sphinx (>=1.7.1)"] -redis = ["redis"] -tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] - [[package]] name = "posthog" version = "3.6.0" @@ -3565,57 +2906,6 @@ files = [ [package.extras] tests = ["pytest"] -[[package]] -name = "pyarrow" -version = "17.0.0" -description = "Python library for Apache Arrow" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyarrow-17.0.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a5c8b238d47e48812ee577ee20c9a2779e6a5904f1708ae240f53ecbee7c9f07"}, - {file = "pyarrow-17.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db023dc4c6cae1015de9e198d41250688383c3f9af8f565370ab2b4cb5f62655"}, - {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da1e060b3876faa11cee287839f9cc7cdc00649f475714b8680a05fd9071d545"}, - {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c06d4624c0ad6674364bb46ef38c3132768139ddec1c56582dbac54f2663e2"}, - {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:fa3c246cc58cb5a4a5cb407a18f193354ea47dd0648194e6265bd24177982fe8"}, - {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:f7ae2de664e0b158d1607699a16a488de3d008ba99b3a7aa5de1cbc13574d047"}, - {file = "pyarrow-17.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:5984f416552eea15fd9cee03da53542bf4cddaef5afecefb9aa8d1010c335087"}, - {file = "pyarrow-17.0.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:1c8856e2ef09eb87ecf937104aacfa0708f22dfeb039c363ec99735190ffb977"}, - {file = "pyarrow-17.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e19f569567efcbbd42084e87f948778eb371d308e137a0f97afe19bb860ccb3"}, - {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b244dc8e08a23b3e352899a006a26ae7b4d0da7bb636872fa8f5884e70acf15"}, - {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b72e87fe3e1db343995562f7fff8aee354b55ee83d13afba65400c178ab2597"}, - {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dc5c31c37409dfbc5d014047817cb4ccd8c1ea25d19576acf1a001fe07f5b420"}, - {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e3343cb1e88bc2ea605986d4b94948716edc7a8d14afd4e2c097232f729758b4"}, - {file = "pyarrow-17.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:a27532c38f3de9eb3e90ecab63dfda948a8ca859a66e3a47f5f42d1e403c4d03"}, - {file = "pyarrow-17.0.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9b8a823cea605221e61f34859dcc03207e52e409ccf6354634143e23af7c8d22"}, - {file = "pyarrow-17.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f1e70de6cb5790a50b01d2b686d54aaf73da01266850b05e3af2a1bc89e16053"}, - {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0071ce35788c6f9077ff9ecba4858108eebe2ea5a3f7cf2cf55ebc1dbc6ee24a"}, - {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:757074882f844411fcca735e39aae74248a1531367a7c80799b4266390ae51cc"}, - {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9ba11c4f16976e89146781a83833df7f82077cdab7dc6232c897789343f7891a"}, - {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b0c6ac301093b42d34410b187bba560b17c0330f64907bfa4f7f7f2444b0cf9b"}, - {file = "pyarrow-17.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:392bc9feabc647338e6c89267635e111d71edad5fcffba204425a7c8d13610d7"}, - {file = "pyarrow-17.0.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:af5ff82a04b2171415f1410cff7ebb79861afc5dae50be73ce06d6e870615204"}, - {file = "pyarrow-17.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:edca18eaca89cd6382dfbcff3dd2d87633433043650c07375d095cd3517561d8"}, - {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c7916bff914ac5d4a8fe25b7a25e432ff921e72f6f2b7547d1e325c1ad9d155"}, - {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f553ca691b9e94b202ff741bdd40f6ccb70cdd5fbf65c187af132f1317de6145"}, - {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0cdb0e627c86c373205a2f94a510ac4376fdc523f8bb36beab2e7f204416163c"}, - {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:d7d192305d9d8bc9082d10f361fc70a73590a4c65cf31c3e6926cd72b76bc35c"}, - {file = "pyarrow-17.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:02dae06ce212d8b3244dd3e7d12d9c4d3046945a5933d28026598e9dbbda1fca"}, - {file = "pyarrow-17.0.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:13d7a460b412f31e4c0efa1148e1d29bdf18ad1411eb6757d38f8fbdcc8645fb"}, - {file = "pyarrow-17.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b564a51fbccfab5a04a80453e5ac6c9954a9c5ef2890d1bcf63741909c3f8df"}, - {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32503827abbc5aadedfa235f5ece8c4f8f8b0a3cf01066bc8d29de7539532687"}, - {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a155acc7f154b9ffcc85497509bcd0d43efb80d6f733b0dc3bb14e281f131c8b"}, - {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:dec8d129254d0188a49f8a1fc99e0560dc1b85f60af729f47de4046015f9b0a5"}, - {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a48ddf5c3c6a6c505904545c25a4ae13646ae1f8ba703c4df4a1bfe4f4006bda"}, - {file = "pyarrow-17.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:42bf93249a083aca230ba7e2786c5f673507fa97bbd9725a1e2754715151a204"}, - {file = "pyarrow-17.0.0.tar.gz", hash = "sha256:4beca9521ed2c0921c1023e68d097d0299b62c362639ea315572a58f3f50fd28"}, -] - -[package.dependencies] -numpy = ">=1.16.6" - -[package.extras] -test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] - [[package]] name = "pyasn1" version = "0.6.0" @@ -3654,119 +2944,120 @@ files = [ [[package]] name = "pydantic" -version = "2.8.2" +version = "2.9.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, - {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, + {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, + {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.20.1" +annotated-types = ">=0.6.0" +pydantic-core = "2.23.4" typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""} [package.extras] email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.20.1" +version = "2.23.4" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {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"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, + {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, + {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, + {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, + {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, + {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, + {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, + {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, + {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, + {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, + {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, + {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, + {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, + {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, ] [package.dependencies] @@ -3911,72 +3202,6 @@ files = [ {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, ] -[[package]] -name = "pysbd" -version = "0.3.4" -description = "pysbd (Python Sentence Boundary Disambiguation) is a rule-based sentence boundary detection that works out-of-the-box across many languages." -optional = false -python-versions = ">=3" -files = [ - {file = "pysbd-0.3.4-py3-none-any.whl", hash = "sha256:cd838939b7b0b185fcf86b0baf6636667dfb6e474743beeff878e9f42e022953"}, -] - -[[package]] -name = "pytest" -version = "8.3.2" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, - {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=1.5,<2" -tomli = {version = ">=1", markers = "python_version < \"3.11\""} - -[package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-repeat" -version = "0.9.3" -description = "pytest plugin for repeating tests" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest_repeat-0.9.3-py3-none-any.whl", hash = "sha256:26ab2df18226af9d5ce441c858f273121e92ff55f5bb311d25755b8d7abdd8ed"}, - {file = "pytest_repeat-0.9.3.tar.gz", hash = "sha256:ffd3836dfcd67bb270bec648b330e20be37d2966448c4148c4092d1e8aba8185"}, -] - -[package.dependencies] -pytest = "*" - -[[package]] -name = "pytest-xdist" -version = "3.6.1" -description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, - {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, -] - -[package.dependencies] -execnet = ">=2.1" -pytest = ">=7.0.0" - -[package.extras] -psutil = ["psutil (>=3.0)"] -setproctitle = ["setproctitle"] -testing = ["filelock"] - [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -4005,17 +3230,6 @@ files = [ [package.extras] cli = ["click (>=5.0)"] -[[package]] -name = "pytz" -version = "2024.1" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, -] - [[package]] name = "pywin32" version = "306" @@ -4222,90 +3436,6 @@ files = [ [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} -[[package]] -name = "ragas" -version = "0.1.15" -description = "" -optional = false -python-versions = "*" -files = [ - {file = "ragas-0.1.15-py3-none-any.whl", hash = "sha256:31fce3944c7440d8799d2a1d2a074832c13a0dc108d71e698bd23c6eb99fbeb4"}, - {file = "ragas-0.1.15.tar.gz", hash = "sha256:87fe96ecf2833db17bb1256b0bbd0f4e680fdf502bf6a6673b0985f0e84bb0f4"}, -] - -[package.dependencies] -appdirs = "*" -datasets = "*" -langchain = "*" -langchain-community = "*" -langchain-core = "*" -langchain-openai = "*" -nest-asyncio = "*" -numpy = "*" -openai = ">1" -pysbd = ">=0.3.4" -tiktoken = "*" - -[package.extras] -all = ["sentence-transformers", "transformers"] - -[[package]] -name = "ray" -version = "2.35.0" -description = "Ray provides a simple, universal API for building distributed applications." -optional = false -python-versions = ">=3.8" -files = [ - {file = "ray-2.35.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:1e7e2d2e987be728a81821b6fd2bccb23e4d8a6cca8417db08b24f06a08d8476"}, - {file = "ray-2.35.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8bd48be4c362004d31e5df072fd58b929efc67adfefc0adece41483b15f84539"}, - {file = "ray-2.35.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:ef41e9254f3e18a90a8cf13fac9e35ac086eb778079ab6c76a37d3a6059186c5"}, - {file = "ray-2.35.0-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:1994aaf9996ffc45019856545e817d527ad572762f1af76ad669ae4e786fcfd6"}, - {file = "ray-2.35.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3b7a7d73f818e249064460ffa95402ebd852bf97d9ec6167b8b0d95be03da9f"}, - {file = "ray-2.35.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:e29754fac4b69a9cb0d089841af59ec6fb10b5d4a248b7c579d319ca2ed1c96f"}, - {file = "ray-2.35.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7a606c8ca53c64fc496703e9fd15d1a1ffb50e6b457a33d3622be2f13fc30a5"}, - {file = "ray-2.35.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:ac561e20a62ce941b74d02a0b92b7765c6ba87cc22e24f34f64ded2c454ba64e"}, - {file = "ray-2.35.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:587af570cbe5f6cedca854f15107740e63c67207bee900713cb2ee38f6ebf20f"}, - {file = "ray-2.35.0-cp311-cp311-win_amd64.whl", hash = "sha256:8e406cce41679790146d4d2b1b0cb0b413ca35276e43b68ee796366169c1dbde"}, - {file = "ray-2.35.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:eb86355a3a0e794e2f1dbd5a84805dddfca64921ad0999b7fa5276e40d243692"}, - {file = "ray-2.35.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b746913268d5ea5e19bff0eb6bdc7e0538036892a8b57c08411787481195df2"}, - {file = "ray-2.35.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:e2ccfd144180f03d38b02a81afdac2b437f27e46736bf2653a1f0e8d67ea56cd"}, - {file = "ray-2.35.0-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:2ca1a0de41d4462fd764598a5981cf55fc955599f38f9a1ae10868e94c6dd80d"}, - {file = "ray-2.35.0-cp312-cp312-win_amd64.whl", hash = "sha256:c5600f745bb0e4df840a5cd51e82b1acf517f73505df9869fe3e369966956129"}, - {file = "ray-2.35.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5e98d2bac394b806109782f316740c5b3c3f10a50117c8e28200a528df734928"}, - {file = "ray-2.35.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c395b46efd0dd871424b1b8d6baf99f91983946fbe351ff66ea34e8919daff29"}, - {file = "ray-2.35.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:4e6314bfdb8c73abcac13f41cc3d935dd1a8ad94c65005a4bfdc4861dc8b070d"}, - {file = "ray-2.35.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:70a154e3071cbb4d7a9b68f2dcf491b96b760be0ec6e2ef11a766071ac6acfef"}, - {file = "ray-2.35.0-cp39-cp39-win_amd64.whl", hash = "sha256:dd8bdf9d16989684486db9ebcd23679140e2d6769fcdaadc05e8cac6b373023e"}, -] - -[package.dependencies] -aiosignal = "*" -click = ">=7.0" -filelock = "*" -frozenlist = "*" -jsonschema = "*" -msgpack = ">=1.0.0,<2.0.0" -packaging = "*" -protobuf = ">=3.15.3,<3.19.5 || >3.19.5" -pyyaml = "*" -requests = "*" - -[package.extras] -adag = ["cupy-cuda12x"] -air = ["aiohttp (>=3.7)", "aiohttp-cors", "colorful", "fastapi", "fsspec", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "memray", "numpy (>=1.20)", "opencensus", "pandas", "pandas (>=1.3)", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2.0.dev0 || >=2.5.dev0,<3)", "requests", "smart-open", "starlette", "tensorboardX (>=1.9)", "uvicorn[standard]", "virtualenv (>=20.0.24,!=20.21.1)", "watchfiles"] -all = ["aiohttp (>=3.7)", "aiohttp-cors", "colorful", "cupy-cuda12x", "dm-tree", "fastapi", "fsspec", "grpcio (!=1.56.0)", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "gymnasium (==0.28.1)", "lz4", "memray", "numpy (>=1.20)", "opencensus", "opentelemetry-api", "opentelemetry-exporter-otlp", "opentelemetry-sdk", "pandas", "pandas (>=1.3)", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2.0.dev0 || >=2.5.dev0,<3)", "pyyaml", "requests", "rich", "scikit-image", "scipy", "smart-open", "starlette", "tensorboardX (>=1.9)", "typer", "uvicorn[standard]", "virtualenv (>=20.0.24,!=20.21.1)", "watchfiles"] -all-cpp = ["aiohttp (>=3.7)", "aiohttp-cors", "colorful", "cupy-cuda12x", "dm-tree", "fastapi", "fsspec", "grpcio (!=1.56.0)", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "gymnasium (==0.28.1)", "lz4", "memray", "numpy (>=1.20)", "opencensus", "opentelemetry-api", "opentelemetry-exporter-otlp", "opentelemetry-sdk", "pandas", "pandas (>=1.3)", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2.0.dev0 || >=2.5.dev0,<3)", "pyyaml", "ray-cpp (==2.35.0)", "requests", "rich", "scikit-image", "scipy", "smart-open", "starlette", "tensorboardX (>=1.9)", "typer", "uvicorn[standard]", "virtualenv (>=20.0.24,!=20.21.1)", "watchfiles"] -client = ["grpcio (!=1.56.0)"] -cpp = ["ray-cpp (==2.35.0)"] -data = ["fsspec", "numpy (>=1.20)", "pandas (>=1.3)", "pyarrow (>=6.0.1)"] -default = ["aiohttp (>=3.7)", "aiohttp-cors", "colorful", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "memray", "opencensus", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pydantic (<2.0.dev0 || >=2.5.dev0,<3)", "requests", "smart-open", "virtualenv (>=20.0.24,!=20.21.1)"] -observability = ["opentelemetry-api", "opentelemetry-exporter-otlp", "opentelemetry-sdk"] -rllib = ["dm-tree", "fsspec", "gymnasium (==0.28.1)", "lz4", "pandas", "pyarrow (>=6.0.1)", "pyyaml", "requests", "rich", "scikit-image", "scipy", "tensorboardX (>=1.9)", "typer"] -serve = ["aiohttp (>=3.7)", "aiohttp-cors", "colorful", "fastapi", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "memray", "opencensus", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pydantic (<2.0.dev0 || >=2.5.dev0,<3)", "requests", "smart-open", "starlette", "uvicorn[standard]", "virtualenv (>=20.0.24,!=20.21.1)", "watchfiles"] -serve-grpc = ["aiohttp (>=3.7)", "aiohttp-cors", "colorful", "fastapi", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "memray", "opencensus", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pydantic (<2.0.dev0 || >=2.5.dev0,<3)", "requests", "smart-open", "starlette", "uvicorn[standard]", "virtualenv (>=20.0.24,!=20.21.1)", "watchfiles"] -train = ["fsspec", "pandas", "pyarrow (>=6.0.1)", "requests", "tensorboardX (>=1.9)"] -tune = ["fsspec", "pandas", "pyarrow (>=6.0.1)", "requests", "tensorboardX (>=1.9)"] - [[package]] name = "redis" version = "5.0.8" @@ -4324,21 +3454,6 @@ async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\ hiredis = ["hiredis (>1.0.0)"] ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] -[[package]] -name = "referencing" -version = "0.35.1" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, - {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" - [[package]] name = "regex" version = "2024.7.24" @@ -4484,118 +3599,6 @@ pygments = ">=2.13.0,<3.0.0" [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] -[[package]] -name = "rpds-py" -version = "0.20.0" -description = "Python bindings to Rust's persistent data structures (rpds)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, - {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, - {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, - {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, - {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, - {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, - {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, - {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, - {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, - {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, - {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, - {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, - {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, - {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, - {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, -] - [[package]] name = "rsa" version = "4.9" @@ -4610,309 +3613,6 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" -[[package]] -name = "safetensors" -version = "0.4.4" -description = "" -optional = false -python-versions = ">=3.7" -files = [ - {file = "safetensors-0.4.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2adb497ada13097f30e386e88c959c0fda855a5f6f98845710f5bb2c57e14f12"}, - {file = "safetensors-0.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7db7fdc2d71fd1444d85ca3f3d682ba2df7d61a637dfc6d80793f439eae264ab"}, - {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d4f0eed76b430f009fbefca1a0028ddb112891b03cb556d7440d5cd68eb89a9"}, - {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:57d216fab0b5c432aabf7170883d7c11671622bde8bd1436c46d633163a703f6"}, - {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d9b76322e49c056bcc819f8bdca37a2daa5a6d42c07f30927b501088db03309"}, - {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32f0d1f6243e90ee43bc6ee3e8c30ac5b09ca63f5dd35dbc985a1fc5208c451a"}, - {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d464bdc384874601a177375028012a5f177f1505279f9456fea84bbc575c7f"}, - {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63144e36209ad8e4e65384dbf2d52dd5b1866986079c00a72335402a38aacdc5"}, - {file = "safetensors-0.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:051d5ecd490af7245258000304b812825974d5e56f14a3ff7e1b8b2ba6dc2ed4"}, - {file = "safetensors-0.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51bc8429d9376224cd3cf7e8ce4f208b4c930cd10e515b6ac6a72cbc3370f0d9"}, - {file = "safetensors-0.4.4-cp310-none-win32.whl", hash = "sha256:fb7b54830cee8cf9923d969e2df87ce20e625b1af2fd194222ab902d3adcc29c"}, - {file = "safetensors-0.4.4-cp310-none-win_amd64.whl", hash = "sha256:4b3e8aa8226d6560de8c2b9d5ff8555ea482599c670610758afdc97f3e021e9c"}, - {file = "safetensors-0.4.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:bbaa31f2cb49013818bde319232ccd72da62ee40f7d2aa532083eda5664e85ff"}, - {file = "safetensors-0.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9fdcb80f4e9fbb33b58e9bf95e7dbbedff505d1bcd1c05f7c7ce883632710006"}, - {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55c14c20be247b8a1aeaf3ab4476265e3ca83096bb8e09bb1a7aa806088def4f"}, - {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:949aaa1118660f992dbf0968487b3e3cfdad67f948658ab08c6b5762e90cc8b6"}, - {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c11a4ab7debc456326a2bac67f35ee0ac792bcf812c7562a4a28559a5c795e27"}, - {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0cea44bba5c5601b297bc8307e4075535b95163402e4906b2e9b82788a2a6df"}, - {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9d752c97f6bbe327352f76e5b86442d776abc789249fc5e72eacb49e6916482"}, - {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03f2bb92e61b055ef6cc22883ad1ae898010a95730fa988c60a23800eb742c2c"}, - {file = "safetensors-0.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:87bf3f91a9328a941acc44eceffd4e1f5f89b030985b2966637e582157173b98"}, - {file = "safetensors-0.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:20d218ec2b6899d29d6895419a58b6e44cc5ff8f0cc29fac8d236a8978ab702e"}, - {file = "safetensors-0.4.4-cp311-none-win32.whl", hash = "sha256:8079486118919f600c603536e2490ca37b3dbd3280e3ad6eaacfe6264605ac8a"}, - {file = "safetensors-0.4.4-cp311-none-win_amd64.whl", hash = "sha256:2f8c2eb0615e2e64ee27d478c7c13f51e5329d7972d9e15528d3e4cfc4a08f0d"}, - {file = "safetensors-0.4.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:baec5675944b4a47749c93c01c73d826ef7d42d36ba8d0dba36336fa80c76426"}, - {file = "safetensors-0.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f15117b96866401825f3e94543145028a2947d19974429246ce59403f49e77c6"}, - {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a13a9caea485df164c51be4eb0c87f97f790b7c3213d635eba2314d959fe929"}, - {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b54bc4ca5f9b9bba8cd4fb91c24b2446a86b5ae7f8975cf3b7a277353c3127c"}, - {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08332c22e03b651c8eb7bf5fc2de90044f3672f43403b3d9ac7e7e0f4f76495e"}, - {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb62841e839ee992c37bb75e75891c7f4904e772db3691c59daaca5b4ab960e1"}, - {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e5b927acc5f2f59547270b0309a46d983edc44be64e1ca27a7fcb0474d6cd67"}, - {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a69c71b1ae98a8021a09a0b43363b0143b0ce74e7c0e83cacba691b62655fb8"}, - {file = "safetensors-0.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23654ad162c02a5636f0cd520a0310902c4421aab1d91a0b667722a4937cc445"}, - {file = "safetensors-0.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0677c109d949cf53756859160b955b2e75b0eefe952189c184d7be30ecf7e858"}, - {file = "safetensors-0.4.4-cp312-none-win32.whl", hash = "sha256:a51d0ddd4deb8871c6de15a772ef40b3dbd26a3c0451bb9e66bc76fc5a784e5b"}, - {file = "safetensors-0.4.4-cp312-none-win_amd64.whl", hash = "sha256:2d065059e75a798bc1933c293b68d04d79b586bb7f8c921e0ca1e82759d0dbb1"}, - {file = "safetensors-0.4.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:9d625692578dd40a112df30c02a1adf068027566abd8e6a74893bb13d441c150"}, - {file = "safetensors-0.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7cabcf39c81e5b988d0adefdaea2eb9b4fd9bd62d5ed6559988c62f36bfa9a89"}, - {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8359bef65f49d51476e9811d59c015f0ddae618ee0e44144f5595278c9f8268c"}, - {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1a32c662e7df9226fd850f054a3ead0e4213a96a70b5ce37b2d26ba27004e013"}, - {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c329a4dcc395364a1c0d2d1574d725fe81a840783dda64c31c5a60fc7d41472c"}, - {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:239ee093b1db877c9f8fe2d71331a97f3b9c7c0d3ab9f09c4851004a11f44b65"}, - {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd574145d930cf9405a64f9923600879a5ce51d9f315443a5f706374841327b6"}, - {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f6784eed29f9e036acb0b7769d9e78a0dc2c72c2d8ba7903005350d817e287a4"}, - {file = "safetensors-0.4.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:65a4a6072436bf0a4825b1c295d248cc17e5f4651e60ee62427a5bcaa8622a7a"}, - {file = "safetensors-0.4.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:df81e3407630de060ae8313da49509c3caa33b1a9415562284eaf3d0c7705f9f"}, - {file = "safetensors-0.4.4-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:e4a0f374200e8443d9746e947ebb346c40f83a3970e75a685ade0adbba5c48d9"}, - {file = "safetensors-0.4.4-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:181fb5f3dee78dae7fd7ec57d02e58f7936498d587c6b7c1c8049ef448c8d285"}, - {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb4ac1d8f6b65ec84ddfacd275079e89d9df7c92f95675ba96c4f790a64df6e"}, - {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76897944cd9239e8a70955679b531b9a0619f76e25476e57ed373322d9c2075d"}, - {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a9e9d1a27e51a0f69e761a3d581c3af46729ec1c988fa1f839e04743026ae35"}, - {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:005ef9fc0f47cb9821c40793eb029f712e97278dae84de91cb2b4809b856685d"}, - {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26987dac3752688c696c77c3576f951dbbdb8c57f0957a41fb6f933cf84c0b62"}, - {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c05270b290acd8d249739f40d272a64dd597d5a4b90f27d830e538bc2549303c"}, - {file = "safetensors-0.4.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:068d3a33711fc4d93659c825a04480ff5a3854e1d78632cdc8f37fee917e8a60"}, - {file = "safetensors-0.4.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:063421ef08ca1021feea8b46951251b90ae91f899234dd78297cbe7c1db73b99"}, - {file = "safetensors-0.4.4-cp37-none-win32.whl", hash = "sha256:d52f5d0615ea83fd853d4e1d8acf93cc2e0223ad4568ba1e1f6ca72e94ea7b9d"}, - {file = "safetensors-0.4.4-cp37-none-win_amd64.whl", hash = "sha256:88a5ac3280232d4ed8e994cbc03b46a1807ce0aa123867b40c4a41f226c61f94"}, - {file = "safetensors-0.4.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3467ab511bfe3360967d7dc53b49f272d59309e57a067dd2405b4d35e7dcf9dc"}, - {file = "safetensors-0.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2ab4c96d922e53670ce25fbb9b63d5ea972e244de4fa1dd97b590d9fd66aacef"}, - {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87df18fce4440477c3ef1fd7ae17c704a69a74a77e705a12be135ee0651a0c2d"}, - {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e5fe345b2bc7d88587149ac11def1f629d2671c4c34f5df38aed0ba59dc37f8"}, - {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9f1a3e01dce3cd54060791e7e24588417c98b941baa5974700eeb0b8eb65b0a0"}, - {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c6bf35e9a8998d8339fd9a05ac4ce465a4d2a2956cc0d837b67c4642ed9e947"}, - {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:166c0c52f6488b8538b2a9f3fbc6aad61a7261e170698779b371e81b45f0440d"}, - {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87e9903b8668a16ef02c08ba4ebc91e57a49c481e9b5866e31d798632805014b"}, - {file = "safetensors-0.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9c421153aa23c323bd8483d4155b4eee82c9a50ac11cccd83539104a8279c64"}, - {file = "safetensors-0.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a4b8617499b2371c7353302c5116a7e0a3a12da66389ce53140e607d3bf7b3d3"}, - {file = "safetensors-0.4.4-cp38-none-win32.whl", hash = "sha256:c6280f5aeafa1731f0a3709463ab33d8e0624321593951aefada5472f0b313fd"}, - {file = "safetensors-0.4.4-cp38-none-win_amd64.whl", hash = "sha256:6ceed6247fc2d33b2a7b7d25d8a0fe645b68798856e0bc7a9800c5fd945eb80f"}, - {file = "safetensors-0.4.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5cf6c6f6193797372adf50c91d0171743d16299491c75acad8650107dffa9269"}, - {file = "safetensors-0.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:419010156b914a3e5da4e4adf992bee050924d0fe423c4b329e523e2c14c3547"}, - {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88f6fd5a5c1302ce79993cc5feeadcc795a70f953c762544d01fb02b2db4ea33"}, - {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d468cffb82d90789696d5b4d8b6ab8843052cba58a15296691a7a3df55143cd2"}, - {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9353c2af2dd467333d4850a16edb66855e795561cd170685178f706c80d2c71e"}, - {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83c155b4a33368d9b9c2543e78f2452090fb030c52401ca608ef16fa58c98353"}, - {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9850754c434e636ce3dc586f534bb23bcbd78940c304775bee9005bf610e98f1"}, - {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:275f500b4d26f67b6ec05629a4600645231bd75e4ed42087a7c1801bff04f4b3"}, - {file = "safetensors-0.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5c2308de665b7130cd0e40a2329278226e4cf083f7400c51ca7e19ccfb3886f3"}, - {file = "safetensors-0.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e06a9ebc8656e030ccfe44634f2a541b4b1801cd52e390a53ad8bacbd65f8518"}, - {file = "safetensors-0.4.4-cp39-none-win32.whl", hash = "sha256:ef73df487b7c14b477016947c92708c2d929e1dee2bacdd6fff5a82ed4539537"}, - {file = "safetensors-0.4.4-cp39-none-win_amd64.whl", hash = "sha256:83d054818a8d1198d8bd8bc3ea2aac112a2c19def2bf73758321976788706398"}, - {file = "safetensors-0.4.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1d1f34c71371f0e034004a0b583284b45d233dd0b5f64a9125e16b8a01d15067"}, - {file = "safetensors-0.4.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a8043a33d58bc9b30dfac90f75712134ca34733ec3d8267b1bd682afe7194f5"}, - {file = "safetensors-0.4.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8db8f0c59c84792c12661f8efa85de160f80efe16b87a9d5de91b93f9e0bce3c"}, - {file = "safetensors-0.4.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfc1fc38e37630dd12d519bdec9dcd4b345aec9930bb9ce0ed04461f49e58b52"}, - {file = "safetensors-0.4.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5c9d86d9b13b18aafa88303e2cd21e677f5da2a14c828d2c460fe513af2e9a5"}, - {file = "safetensors-0.4.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:43251d7f29a59120a26f5a0d9583b9e112999e500afabcfdcb91606d3c5c89e3"}, - {file = "safetensors-0.4.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:2c42e9b277513b81cf507e6121c7b432b3235f980cac04f39f435b7902857f91"}, - {file = "safetensors-0.4.4-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3daacc9a4e3f428a84dd56bf31f20b768eb0b204af891ed68e1f06db9edf546f"}, - {file = "safetensors-0.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:218bbb9b883596715fc9997bb42470bf9f21bb832c3b34c2bf744d6fa8f2bbba"}, - {file = "safetensors-0.4.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bd5efc26b39f7fc82d4ab1d86a7f0644c8e34f3699c33f85bfa9a717a030e1b"}, - {file = "safetensors-0.4.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56ad9776b65d8743f86698a1973292c966cf3abff627efc44ed60e66cc538ddd"}, - {file = "safetensors-0.4.4-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:30f23e6253c5f43a809dea02dc28a9f5fa747735dc819f10c073fe1b605e97d4"}, - {file = "safetensors-0.4.4-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5512078d00263de6cb04e9d26c9ae17611098f52357fea856213e38dc462f81f"}, - {file = "safetensors-0.4.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b96c3d9266439d17f35fc2173111d93afc1162f168e95aed122c1ca517b1f8f1"}, - {file = "safetensors-0.4.4-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:08d464aa72a9a13826946b4fb9094bb4b16554bbea2e069e20bd903289b6ced9"}, - {file = "safetensors-0.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:210160816d5a36cf41f48f38473b6f70d7bcb4b0527bedf0889cc0b4c3bb07db"}, - {file = "safetensors-0.4.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb276a53717f2bcfb6df0bcf284d8a12069002508d4c1ca715799226024ccd45"}, - {file = "safetensors-0.4.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a2c28c6487f17d8db0089e8b2cdc13de859366b94cc6cdc50e1b0a4147b56551"}, - {file = "safetensors-0.4.4-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7915f0c60e4e6e65d90f136d85dd3b429ae9191c36b380e626064694563dbd9f"}, - {file = "safetensors-0.4.4-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:00eea99ae422fbfa0b46065acbc58b46bfafadfcec179d4b4a32d5c45006af6c"}, - {file = "safetensors-0.4.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb1ed4fcb0b3c2f3ea2c5767434622fe5d660e5752f21ac2e8d737b1e5e480bb"}, - {file = "safetensors-0.4.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:73fc9a0a4343188bdb421783e600bfaf81d0793cd4cce6bafb3c2ed567a74cd5"}, - {file = "safetensors-0.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c37e6b714200824c73ca6eaf007382de76f39466a46e97558b8dc4cf643cfbf"}, - {file = "safetensors-0.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f75698c5c5c542417ac4956acfc420f7d4a2396adca63a015fd66641ea751759"}, - {file = "safetensors-0.4.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca1a209157f242eb183e209040097118472e169f2e069bfbd40c303e24866543"}, - {file = "safetensors-0.4.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:177f2b60a058f92a3cec7a1786c9106c29eca8987ecdfb79ee88126e5f47fa31"}, - {file = "safetensors-0.4.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ee9622e84fe6e4cd4f020e5fda70d6206feff3157731df7151d457fdae18e541"}, - {file = "safetensors-0.4.4.tar.gz", hash = "sha256:5fe3e9b705250d0172ed4e100a811543108653fb2b66b9e702a088ad03772a07"}, -] - -[package.extras] -all = ["safetensors[jax]", "safetensors[numpy]", "safetensors[paddlepaddle]", "safetensors[pinned-tf]", "safetensors[quality]", "safetensors[testing]", "safetensors[torch]"] -dev = ["safetensors[all]"] -jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "safetensors[numpy]"] -mlx = ["mlx (>=0.0.9)"] -numpy = ["numpy (>=1.21.6)"] -paddlepaddle = ["paddlepaddle (>=2.4.1)", "safetensors[numpy]"] -pinned-tf = ["safetensors[numpy]", "tensorflow (==2.11.0)"] -quality = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"] -tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"] -testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"] -torch = ["safetensors[numpy]", "torch (>=1.10)"] - -[[package]] -name = "scikit-learn" -version = "1.5.1" -description = "A set of python modules for machine learning and data mining" -optional = false -python-versions = ">=3.9" -files = [ - {file = "scikit_learn-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:781586c414f8cc58e71da4f3d7af311e0505a683e112f2f62919e3019abd3745"}, - {file = "scikit_learn-1.5.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5b213bc29cc30a89a3130393b0e39c847a15d769d6e59539cd86b75d276b1a7"}, - {file = "scikit_learn-1.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ff4ba34c2abff5ec59c803ed1d97d61b036f659a17f55be102679e88f926fac"}, - {file = "scikit_learn-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:161808750c267b77b4a9603cf9c93579c7a74ba8486b1336034c2f1579546d21"}, - {file = "scikit_learn-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:10e49170691514a94bb2e03787aa921b82dbc507a4ea1f20fd95557862c98dc1"}, - {file = "scikit_learn-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:154297ee43c0b83af12464adeab378dee2d0a700ccd03979e2b821e7dd7cc1c2"}, - {file = "scikit_learn-1.5.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b5e865e9bd59396220de49cb4a57b17016256637c61b4c5cc81aaf16bc123bbe"}, - {file = "scikit_learn-1.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:909144d50f367a513cee6090873ae582dba019cb3fca063b38054fa42704c3a4"}, - {file = "scikit_learn-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689b6f74b2c880276e365fe84fe4f1befd6a774f016339c65655eaff12e10cbf"}, - {file = "scikit_learn-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:9a07f90846313a7639af6a019d849ff72baadfa4c74c778821ae0fad07b7275b"}, - {file = "scikit_learn-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5944ce1faada31c55fb2ba20a5346b88e36811aab504ccafb9f0339e9f780395"}, - {file = "scikit_learn-1.5.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0828673c5b520e879f2af6a9e99eee0eefea69a2188be1ca68a6121b809055c1"}, - {file = "scikit_learn-1.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:508907e5f81390e16d754e8815f7497e52139162fd69c4fdbd2dfa5d6cc88915"}, - {file = "scikit_learn-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97625f217c5c0c5d0505fa2af28ae424bd37949bb2f16ace3ff5f2f81fb4498b"}, - {file = "scikit_learn-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:da3f404e9e284d2b0a157e1b56b6566a34eb2798205cba35a211df3296ab7a74"}, - {file = "scikit_learn-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:88e0672c7ac21eb149d409c74cc29f1d611d5158175846e7a9c2427bd12b3956"}, - {file = "scikit_learn-1.5.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:7b073a27797a283187a4ef4ee149959defc350b46cbf63a84d8514fe16b69855"}, - {file = "scikit_learn-1.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b59e3e62d2be870e5c74af4e793293753565c7383ae82943b83383fdcf5cc5c1"}, - {file = "scikit_learn-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd8d3a19d4bd6dc5a7d4f358c8c3a60934dc058f363c34c0ac1e9e12a31421d"}, - {file = "scikit_learn-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:5f57428de0c900a98389c4a433d4a3cf89de979b3aa24d1c1d251802aa15e44d"}, - {file = "scikit_learn-1.5.1.tar.gz", hash = "sha256:0ea5d40c0e3951df445721927448755d3fe1d80833b0b7308ebff5d2a45e6414"}, -] - -[package.dependencies] -joblib = ">=1.2.0" -numpy = ">=1.19.5" -scipy = ">=1.6.0" -threadpoolctl = ">=3.1.0" - -[package.extras] -benchmark = ["matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "pandas (>=1.1.5)"] -build = ["cython (>=3.0.10)", "meson-python (>=0.16.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.23)", "pooch (>=1.6.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.5.0)", "sphinx-gallery (>=0.16.0)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)"] -examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"] -install = ["joblib (>=1.2.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)", "threadpoolctl (>=3.1.0)"] -maintenance = ["conda-lock (==2.5.6)"] -tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.20.23)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.2.1)", "scikit-image (>=0.17.2)"] - -[[package]] -name = "scipy" -version = "1.14.1" -description = "Fundamental algorithms for scientific computing in Python" -optional = false -python-versions = ">=3.10" -files = [ - {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"}, - {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"}, - {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0"}, - {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3"}, - {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d"}, - {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69"}, - {file = "scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad"}, - {file = "scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8"}, - {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37"}, - {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2"}, - {file = "scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2"}, - {file = "scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc"}, - {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310"}, - {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066"}, - {file = "scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1"}, - {file = "scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e"}, - {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d"}, - {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e"}, - {file = "scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06"}, - {file = "scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84"}, - {file = "scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417"}, -] - -[package.dependencies] -numpy = ">=1.23.5,<2.3" - -[package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<=7.3.7)", "sphinx-design (>=0.4.0)"] -test = ["Cython", "array-api-strict (>=2.0)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] - -[[package]] -name = "sentence-transformers" -version = "3.0.1" -description = "Multilingual text embeddings" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "sentence_transformers-3.0.1-py3-none-any.whl", hash = "sha256:01050cc4053c49b9f5b78f6980b5a72db3fd3a0abb9169b1792ac83875505ee6"}, - {file = "sentence_transformers-3.0.1.tar.gz", hash = "sha256:8a3d2c537cc4d1014ccc20ac92be3d6135420a3bc60ae29a3a8a9b4bb35fbff6"}, -] - -[package.dependencies] -huggingface-hub = ">=0.15.1" -numpy = "*" -Pillow = "*" -scikit-learn = "*" -scipy = "*" -torch = ">=1.11.0" -tqdm = "*" -transformers = ">=4.34.0,<5.0.0" - -[package.extras] -dev = ["accelerate (>=0.20.3)", "datasets", "pre-commit", "pytest", "ruff (>=0.3.0)"] -train = ["accelerate (>=0.20.3)", "datasets"] - -[[package]] -name = "sentry-sdk" -version = "2.13.0" -description = "Python client for Sentry (https://sentry.io)" -optional = false -python-versions = ">=3.6" -files = [ - {file = "sentry_sdk-2.13.0-py2.py3-none-any.whl", hash = "sha256:6beede8fc2ab4043da7f69d95534e320944690680dd9a963178a49de71d726c6"}, - {file = "sentry_sdk-2.13.0.tar.gz", hash = "sha256:8d4a576f7a98eb2fdb40e13106e41f330e5c79d72a68be1316e7852cf4995260"}, -] - -[package.dependencies] -certifi = "*" -urllib3 = ">=1.26.11" - -[package.extras] -aiohttp = ["aiohttp (>=3.5)"] -anthropic = ["anthropic (>=0.16)"] -arq = ["arq (>=0.23)"] -asyncpg = ["asyncpg (>=0.23)"] -beam = ["apache-beam (>=2.12)"] -bottle = ["bottle (>=0.12.13)"] -celery = ["celery (>=3)"] -celery-redbeat = ["celery-redbeat (>=2)"] -chalice = ["chalice (>=1.16.0)"] -clickhouse-driver = ["clickhouse-driver (>=0.2.0)"] -django = ["django (>=1.8)"] -falcon = ["falcon (>=1.4)"] -fastapi = ["fastapi (>=0.79.0)"] -flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"] -grpcio = ["grpcio (>=1.21.1)", "protobuf (>=3.8.0)"] -httpx = ["httpx (>=0.16.0)"] -huey = ["huey (>=2)"] -huggingface-hub = ["huggingface-hub (>=0.22)"] -langchain = ["langchain (>=0.0.210)"] -litestar = ["litestar (>=2.0.0)"] -loguru = ["loguru (>=0.5)"] -openai = ["openai (>=1.0.0)", "tiktoken (>=0.3.0)"] -opentelemetry = ["opentelemetry-distro (>=0.35b0)"] -opentelemetry-experimental = ["opentelemetry-distro"] -pure-eval = ["asttokens", "executing", "pure-eval"] -pymongo = ["pymongo (>=3.1)"] -pyspark = ["pyspark (>=2.4.4)"] -quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] -rq = ["rq (>=0.6)"] -sanic = ["sanic (>=0.8)"] -sqlalchemy = ["sqlalchemy (>=1.2)"] -starlette = ["starlette (>=0.19.1)"] -starlite = ["starlite (>=1.48)"] -tornado = ["tornado (>=6)"] - [[package]] name = "setuptools" version = "74.0.0" @@ -5106,20 +3806,6 @@ mpmath = ">=1.1.0,<1.4" [package.extras] dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] -[[package]] -name = "tabulate" -version = "0.9.0" -description = "Pretty-print tabular data" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, - {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, -] - -[package.extras] -widechars = ["wcwidth"] - [[package]] name = "tenacity" version = "8.4.2" @@ -5135,17 +3821,6 @@ files = [ doc = ["reno", "sphinx"] test = ["pytest", "tornado (>=4.5)", "typeguard"] -[[package]] -name = "threadpoolctl" -version = "3.5.0" -description = "threadpoolctl" -optional = false -python-versions = ">=3.8" -files = [ - {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, - {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, -] - [[package]] name = "tiktoken" version = "0.7.0" @@ -5326,61 +4001,6 @@ files = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -[[package]] -name = "torch" -version = "2.0.0" -description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "torch-2.0.0-1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:c9090bda7d2eeeecd74f51b721420dbeb44f838d4536cc1b284e879417e3064a"}, - {file = "torch-2.0.0-1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:bd42db2a48a20574d2c33489e120e9f32789c4dc13c514b0c44272972d14a2d7"}, - {file = "torch-2.0.0-1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8969aa8375bcbc0c2993e7ede0a7f889df9515f18b9b548433f412affed478d9"}, - {file = "torch-2.0.0-1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ab2da16567cb55b67ae39e32d520d68ec736191d88ac79526ca5874754c32203"}, - {file = "torch-2.0.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:7a9319a67294ef02459a19738bbfa8727bb5307b822dadd708bc2ccf6c901aca"}, - {file = "torch-2.0.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:9f01fe1f6263f31bd04e1757946fd63ad531ae37f28bb2dbf66f5c826ee089f4"}, - {file = "torch-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:527f4ae68df7b8301ee6b1158ca56350282ea633686537b30dbb5d7b4a52622a"}, - {file = "torch-2.0.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:ce9b5a49bd513dff7950a5a07d6e26594dd51989cee05ba388b03e8e366fd5d5"}, - {file = "torch-2.0.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:53e1c33c6896583cdb9a583693e22e99266444c4a43392dddc562640d39e542b"}, - {file = "torch-2.0.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:09651bff72e439d004c991f15add0c397c66f98ab36fe60d5514b44e4da722e8"}, - {file = "torch-2.0.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d439aec349c98f12819e8564b8c54008e4613dd4428582af0e6e14c24ca85870"}, - {file = "torch-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:2802f84f021907deee7e9470ed10c0e78af7457ac9a08a6cd7d55adef835fede"}, - {file = "torch-2.0.0-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:01858620f25f25e7a9ec4b547ff38e5e27c92d38ec4ccba9cfbfb31d7071ed9c"}, - {file = "torch-2.0.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:9a2e53b5783ef5896a6af338b36d782f28e83c8ddfc2ac44b67b066d9d76f498"}, - {file = "torch-2.0.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ec5fff2447663e369682838ff0f82187b4d846057ef4d119a8dea7772a0b17dd"}, - {file = "torch-2.0.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:11b0384fe3c18c01b8fc5992e70fc519cde65e44c51cc87be1838c1803daf42f"}, - {file = "torch-2.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:e54846aa63855298cfb1195487f032e413e7ac9cbfa978fda32354cc39551475"}, - {file = "torch-2.0.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:cc788cbbbbc6eb4c90e52c550efd067586c2693092cf367c135b34893a64ae78"}, - {file = "torch-2.0.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:d292640f0fd72b7a31b2a6e3b635eb5065fcbedd4478f9cad1a1e7a9ec861d35"}, - {file = "torch-2.0.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6befaad784004b7af357e3d87fa0863c1f642866291f12a4c2af2de435e8ac5c"}, - {file = "torch-2.0.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a83b26bd6ae36fbf5fee3d56973d9816e2002e8a3b7d9205531167c28aaa38a7"}, - {file = "torch-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:c7e67195e1c3e33da53954b026e89a8e1ff3bc1aeb9eb32b677172d4a9b5dcbf"}, - {file = "torch-2.0.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:6e0b97beb037a165669c312591f242382e9109a240e20054d5a5782d9236cad0"}, - {file = "torch-2.0.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:297a4919aff1c0f98a58ebe969200f71350a1d4d4f986dbfd60c02ffce780e99"}, -] - -[package.dependencies] -filelock = "*" -jinja2 = "*" -networkx = "*" -nvidia-cublas-cu11 = {version = "11.10.3.66", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-cupti-cu11 = {version = "11.7.101", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-nvrtc-cu11 = {version = "11.7.99", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-runtime-cu11 = {version = "11.7.99", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cudnn-cu11 = {version = "8.5.0.96", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cufft-cu11 = {version = "10.9.0.58", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-curand-cu11 = {version = "10.2.10.91", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cusolver-cu11 = {version = "11.4.0.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cusparse-cu11 = {version = "11.7.4.91", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nccl-cu11 = {version = "2.14.3", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nvtx-cu11 = {version = "11.7.91", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -sympy = "*" -triton = {version = "2.0.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -typing-extensions = "*" - -[package.extras] -opt-einsum = ["opt-einsum (>=3.3)"] - [[package]] name = "tornado" version = "6.4.1" @@ -5436,102 +4056,6 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] -[[package]] -name = "transformers" -version = "4.44.2" -description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "transformers-4.44.2-py3-none-any.whl", hash = "sha256:1c02c65e7bfa5e52a634aff3da52138b583fc6f263c1f28d547dc144ba3d412d"}, - {file = "transformers-4.44.2.tar.gz", hash = "sha256:36aa17cc92ee154058e426d951684a2dab48751b35b49437896f898931270826"}, -] - -[package.dependencies] -filelock = "*" -huggingface-hub = ">=0.23.2,<1.0" -numpy = ">=1.17" -packaging = ">=20.0" -pyyaml = ">=5.1" -regex = "!=2019.12.17" -requests = "*" -safetensors = ">=0.4.1" -tokenizers = ">=0.19,<0.20" -tqdm = ">=4.27" - -[package.extras] -accelerate = ["accelerate (>=0.21.0)"] -agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] -all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] -audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] -benchmark = ["optimum-benchmark (>=0.2.0)"] -codecarbon = ["codecarbon (==1.2.0)"] -deepspeed = ["accelerate (>=0.21.0)", "deepspeed (>=0.9.3)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"] -flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] -ftfy = ["ftfy"] -integrations = ["optuna", "ray[tune] (>=2.7.0)", "sigopt"] -ja = ["fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "rhoknp (>=1.1.0,<1.3.1)", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"] -modelcreation = ["cookiecutter (==1.7.3)"] -natten = ["natten (>=0.14.6,<0.15.0)"] -onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"] -onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] -optuna = ["optuna"] -quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.5.1)", "urllib3 (<2.0.0)"] -ray = ["ray[tune] (>=2.7.0)"] -retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] -ruff = ["ruff (==0.5.1)"] -sagemaker = ["sagemaker (>=2.31.0)"] -sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"] -serving = ["fastapi", "pydantic", "starlette", "uvicorn"] -sigopt = ["sigopt"] -sklearn = ["scikit-learn"] -speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -tf = ["keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] -tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"] -tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] -timm = ["timm (<=0.9.16)"] -tokenizers = ["tokenizers (>=0.19,<0.20)"] -torch = ["accelerate (>=0.21.0)", "torch"] -torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"] -video = ["av (==9.2.0)", "decord (==0.6.0)"] -vision = ["Pillow (>=10.0.1,<=15.0)"] - -[[package]] -name = "triton" -version = "2.0.0" -description = "A language and compiler for custom Deep Learning operations" -optional = false -python-versions = "*" -files = [ - {file = "triton-2.0.0-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:38806ee9663f4b0f7cd64790e96c579374089e58f49aac4a6608121aa55e2505"}, - {file = "triton-2.0.0-1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:226941c7b8595219ddef59a1fdb821e8c744289a132415ddd584facedeb475b1"}, - {file = "triton-2.0.0-1-cp36-cp36m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4c9fc8c89874bc48eb7e7b2107a9b8d2c0bf139778637be5bfccb09191685cfd"}, - {file = "triton-2.0.0-1-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d2684b6a60b9f174f447f36f933e9a45f31db96cb723723ecd2dcfd1c57b778b"}, - {file = "triton-2.0.0-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9d4978298b74fcf59a75fe71e535c092b023088933b2f1df933ec32615e4beef"}, - {file = "triton-2.0.0-1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:74f118c12b437fb2ca25e1a04759173b517582fcf4c7be11913316c764213656"}, - {file = "triton-2.0.0-1-pp37-pypy37_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9618815a8da1d9157514f08f855d9e9ff92e329cd81c0305003eb9ec25cc5add"}, - {file = "triton-2.0.0-1-pp38-pypy38_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1aca3303629cd3136375b82cb9921727f804e47ebee27b2677fef23005c3851a"}, - {file = "triton-2.0.0-1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e3e13aa8b527c9b642e3a9defcc0fbd8ffbe1c80d8ac8c15a01692478dc64d8a"}, -] - -[package.dependencies] -cmake = "*" -filelock = "*" -lit = "*" -torch = "*" - -[package.extras] -tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)"] -tutorials = ["matplotlib", "pandas", "tabulate"] - [[package]] name = "typer" version = "0.12.5" @@ -5589,17 +4113,6 @@ files = [ mypy-extensions = ">=0.3.0" typing-extensions = ">=3.7.4" -[[package]] -name = "tzdata" -version = "2024.1" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {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.2.2" @@ -5915,20 +4428,6 @@ files = [ {file = "websockets-13.0.1.tar.gz", hash = "sha256:4d6ece65099411cfd9a48d13701d7438d9c34f479046b34c50ff60bb8834e43e"}, ] -[[package]] -name = "wheel" -version = "0.44.0" -description = "A built-package format for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "wheel-0.44.0-py3-none-any.whl", hash = "sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f"}, - {file = "wheel-0.44.0.tar.gz", hash = "sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49"}, -] - -[package.extras] -test = ["pytest (>=6.0.0)", "setuptools (>=65)"] - [[package]] name = "wrapt" version = "1.16.0" @@ -6008,138 +4507,6 @@ files = [ {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] -[[package]] -name = "xxhash" -version = "3.5.0" -description = "Python binding for xxHash" -optional = false -python-versions = ">=3.7" -files = [ - {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"}, - {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"}, - {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680"}, - {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da"}, - {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23"}, - {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196"}, - {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c"}, - {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482"}, - {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296"}, - {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415"}, - {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198"}, - {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442"}, - {file = "xxhash-3.5.0-cp310-cp310-win32.whl", hash = "sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da"}, - {file = "xxhash-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9"}, - {file = "xxhash-3.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6"}, - {file = "xxhash-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1"}, - {file = "xxhash-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8"}, - {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166"}, - {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7"}, - {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623"}, - {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a"}, - {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88"}, - {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c"}, - {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2"}, - {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084"}, - {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d"}, - {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839"}, - {file = "xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da"}, - {file = "xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58"}, - {file = "xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3"}, - {file = "xxhash-3.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14470ace8bd3b5d51318782cd94e6f94431974f16cb3b8dc15d52f3b69df8e00"}, - {file = "xxhash-3.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59aa1203de1cb96dbeab595ded0ad0c0056bb2245ae11fac11c0ceea861382b9"}, - {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84"}, - {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793"}, - {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be"}, - {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6"}, - {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90"}, - {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27"}, - {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2"}, - {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d"}, - {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab"}, - {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e"}, - {file = "xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8"}, - {file = "xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e"}, - {file = "xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2"}, - {file = "xxhash-3.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37889a0d13b0b7d739cfc128b1c902f04e32de17b33d74b637ad42f1c55101f6"}, - {file = "xxhash-3.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97a662338797c660178e682f3bc180277b9569a59abfb5925e8620fba00b9fc5"}, - {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc"}, - {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3"}, - {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c"}, - {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb"}, - {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f"}, - {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7"}, - {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326"}, - {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf"}, - {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7"}, - {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c"}, - {file = "xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637"}, - {file = "xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43"}, - {file = "xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b"}, - {file = "xxhash-3.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6e5f70f6dca1d3b09bccb7daf4e087075ff776e3da9ac870f86ca316736bb4aa"}, - {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e76e83efc7b443052dd1e585a76201e40b3411fe3da7af4fe434ec51b2f163b"}, - {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33eac61d0796ca0591f94548dcfe37bb193671e0c9bcf065789b5792f2eda644"}, - {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ec70a89be933ea49222fafc3999987d7899fc676f688dd12252509434636622"}, - {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86b8e7f703ec6ff4f351cfdb9f428955859537125904aa8c963604f2e9d3e7"}, - {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0adfbd36003d9f86c8c97110039f7539b379f28656a04097e7434d3eaf9aa131"}, - {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:63107013578c8a730419adc05608756c3fa640bdc6abe806c3123a49fb829f43"}, - {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:683b94dbd1ca67557850b86423318a2e323511648f9f3f7b1840408a02b9a48c"}, - {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5d2a01dcce81789cf4b12d478b5464632204f4c834dc2d064902ee27d2d1f0ee"}, - {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:a9d360a792cbcce2fe7b66b8d51274ec297c53cbc423401480e53b26161a290d"}, - {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:f0b48edbebea1b7421a9c687c304f7b44d0677c46498a046079d445454504737"}, - {file = "xxhash-3.5.0-cp37-cp37m-win32.whl", hash = "sha256:7ccb800c9418e438b44b060a32adeb8393764da7441eb52aa2aa195448935306"}, - {file = "xxhash-3.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c3bc7bf8cb8806f8d1c9bf149c18708cb1c406520097d6b0a73977460ea03602"}, - {file = "xxhash-3.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:74752ecaa544657d88b1d1c94ae68031e364a4d47005a90288f3bab3da3c970f"}, - {file = "xxhash-3.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dee1316133c9b463aa81aca676bc506d3f80d8f65aeb0bba2b78d0b30c51d7bd"}, - {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:602d339548d35a8579c6b013339fb34aee2df9b4e105f985443d2860e4d7ffaa"}, - {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:695735deeddfb35da1677dbc16a083445360e37ff46d8ac5c6fcd64917ff9ade"}, - {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1030a39ba01b0c519b1a82f80e8802630d16ab95dc3f2b2386a0b5c8ed5cbb10"}, - {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5bc08f33c4966f4eb6590d6ff3ceae76151ad744576b5fc6c4ba8edd459fdec"}, - {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160e0c19ee500482ddfb5d5570a0415f565d8ae2b3fd69c5dcfce8a58107b1c3"}, - {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f1abffa122452481a61c3551ab3c89d72238e279e517705b8b03847b1d93d738"}, - {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:d5e9db7ef3ecbfc0b4733579cea45713a76852b002cf605420b12ef3ef1ec148"}, - {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:23241ff6423378a731d84864bf923a41649dc67b144debd1077f02e6249a0d54"}, - {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:82b833d5563fefd6fceafb1aed2f3f3ebe19f84760fdd289f8b926731c2e6e91"}, - {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a80ad0ffd78bef9509eee27b4a29e56f5414b87fb01a888353e3d5bda7038bd"}, - {file = "xxhash-3.5.0-cp38-cp38-win32.whl", hash = "sha256:50ac2184ffb1b999e11e27c7e3e70cc1139047e7ebc1aa95ed12f4269abe98d4"}, - {file = "xxhash-3.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:392f52ebbb932db566973693de48f15ce787cabd15cf6334e855ed22ea0be5b3"}, - {file = "xxhash-3.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc8cdd7f33d57f0468b0614ae634cc38ab9202c6957a60e31d285a71ebe0301"}, - {file = "xxhash-3.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0c48b6300cd0b0106bf49169c3e0536408dfbeb1ccb53180068a18b03c662ab"}, - {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f"}, - {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd"}, - {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc"}, - {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a606c8070ada8aa2a88e181773fa1ef17ba65ce5dd168b9d08038e2a61b33754"}, - {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42eca420c8fa072cc1dd62597635d140e78e384a79bb4944f825fbef8bfeeef6"}, - {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:604253b2143e13218ff1ef0b59ce67f18b8bd1c4205d2ffda22b09b426386898"}, - {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6e93a5ad22f434d7876665444a97e713a8f60b5b1a3521e8df11b98309bff833"}, - {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7a46e1d6d2817ba8024de44c4fd79913a90e5f7265434cef97026215b7d30df6"}, - {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30eb2efe6503c379b7ab99c81ba4a779748e3830241f032ab46bd182bf5873af"}, - {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c8aa771ff2c13dd9cda8166d685d7333d389fae30a4d2bb39d63ab5775de8606"}, - {file = "xxhash-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4"}, - {file = "xxhash-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558"}, - {file = "xxhash-3.5.0-cp39-cp39-win_arm64.whl", hash = "sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e"}, - {file = "xxhash-3.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2014c5b3ff15e64feecb6b713af12093f75b7926049e26a580e94dcad3c73d8c"}, - {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986"}, - {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6"}, - {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b"}, - {file = "xxhash-3.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da"}, - {file = "xxhash-3.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b4154c00eb22e4d543f472cfca430e7962a0f1d0f3778334f2e08a7ba59363c"}, - {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d30bbc1644f726b825b3278764240f449d75f1a8bdda892e641d4a688b1494ae"}, - {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa0b72f2423e2aa53077e54a61c28e181d23effeaafd73fcb9c494e60930c8e"}, - {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13de2b76c1835399b2e419a296d5b38dc4855385d9e96916299170085ef72f57"}, - {file = "xxhash-3.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0691bfcc4f9c656bcb96cc5db94b4d75980b9d5589f2e59de790091028580837"}, - {file = "xxhash-3.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:297595fe6138d4da2c8ce9e72a04d73e58725bb60f3a19048bc96ab2ff31c692"}, - {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1276d369452040cbb943300dc8abeedab14245ea44056a2943183822513a18"}, - {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2061188a1ba352fc699c82bff722f4baacb4b4b8b2f0c745d2001e56d0dfb514"}, - {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c384c434021e4f62b8d9ba0bc9467e14d394893077e2c66d826243025e1f81"}, - {file = "xxhash-3.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e6a4dd644d72ab316b580a1c120b375890e4c52ec392d4aef3c63361ec4d77d1"}, - {file = "xxhash-3.5.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:531af8845aaadcadf951b7e0c1345c6b9c68a990eeb74ff9acd8501a0ad6a1c9"}, - {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1"}, - {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f"}, - {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0"}, - {file = "xxhash-3.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b150b8467852e1bd844387459aa6fbe11d7f38b56e901f9f3b3e6aba0d660240"}, - {file = "xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f"}, -] - [[package]] name = "yarl" version = "1.9.6" @@ -6267,4 +4634,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "075546648313f58b4aff34614023fecf8b88554814494216e30772b09837cd92" +content-hash = "b59070159c750fac77ee0236f0f42c8ebeecdeb42933952cf567062fab076566" diff --git a/pyproject.toml b/pyproject.toml index a6ef2896..239b32e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,7 @@ httpx = "0.27.0" langchain-community = "0.2.0" langchain-experimental = "0.0.59" pillow = "^10.3.0" +pydantic = "^2.9.2" [tool.poetry.group.dev.dependencies] @@ -29,6 +30,7 @@ langchain-anthropic = "^0.1.22" db-sqlite3 = "^0.0.1" peewee = "^3.17.6" python-dotenv = "^1.0.1" +behave = "^1.2.6" [build-system] requires = ["poetry-core"]