├── .gitignore ├── .python-version ├── LICENSE ├── Pipfile ├── Pipfile.lock ├── README.md ├── Topics.ipynb ├── bookmark_search.py ├── bookmark_search_app.py ├── ingest_bookmarks.py ├── pyproject.toml ├── requirements-dev.lock ├── requirements.lock └── uv.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # python generated files 2 | __pycache__/ 3 | *.py[oc] 4 | build/ 5 | dist/ 6 | wheels/ 7 | *.egg-info 8 | 9 | # venv 10 | .venv 11 | -------------------------------------------------------------------------------- /.python-version: -------------------------------------------------------------------------------- 1 | 3.10 -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU AFFERO GENERAL PUBLIC LICENSE 2 | Version 3, 19 November 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU Affero General Public License is a free, copyleft license for 11 | software and other kinds of works, specifically designed to ensure 12 | cooperation with the community in the case of network server software. 13 | 14 | The licenses for most software and other practical works are designed 15 | to take away your freedom to share and change the works. By contrast, 16 | our General Public Licenses are intended to guarantee your freedom to 17 | share and change all versions of a program--to make sure it remains free 18 | software for all its users. 19 | 20 | When we speak of free software, we are referring to freedom, not 21 | price. Our General Public Licenses are designed to make sure that you 22 | have the freedom to distribute copies of free software (and charge for 23 | them if you wish), that you receive source code or can get it if you 24 | want it, that you can change the software or use pieces of it in new 25 | free programs, and that you know you can do these things. 26 | 27 | Developers that use our General Public Licenses protect your rights 28 | with two steps: (1) assert copyright on the software, and (2) offer 29 | you this License which gives you legal permission to copy, distribute 30 | and/or modify the software. 31 | 32 | A secondary benefit of defending all users' freedom is that 33 | improvements made in alternate versions of the program, if they 34 | receive widespread use, become available for other developers to 35 | incorporate. Many developers of free software are heartened and 36 | encouraged by the resulting cooperation. However, in the case of 37 | software used on network servers, this result may fail to come about. 38 | The GNU General Public License permits making a modified version and 39 | letting the public access it on a server without ever releasing its 40 | source code to the public. 41 | 42 | The GNU Affero General Public License is designed specifically to 43 | ensure that, in such cases, the modified source code becomes available 44 | to the community. It requires the operator of a network server to 45 | provide the source code of the modified version running there to the 46 | users of that server. Therefore, public use of a modified version, on 47 | a publicly accessible server, gives the public access to the source 48 | code of the modified version. 49 | 50 | An older license, called the Affero General Public License and 51 | published by Affero, was designed to accomplish similar goals. This is 52 | a different license, not a version of the Affero GPL, but Affero has 53 | released a new version of the Affero GPL which permits relicensing under 54 | this license. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | TERMS AND CONDITIONS 60 | 61 | 0. Definitions. 62 | 63 | "This License" refers to version 3 of the GNU Affero General Public License. 64 | 65 | "Copyright" also means copyright-like laws that apply to other kinds of 66 | works, such as semiconductor masks. 67 | 68 | "The Program" refers to any copyrightable work licensed under this 69 | License. Each licensee is addressed as "you". "Licensees" and 70 | "recipients" may be individuals or organizations. 71 | 72 | To "modify" a work means to copy from or adapt all or part of the work 73 | in a fashion requiring copyright permission, other than the making of an 74 | exact copy. The resulting work is called a "modified version" of the 75 | earlier work or a work "based on" the earlier work. 76 | 77 | A "covered work" means either the unmodified Program or a work based 78 | on the Program. 79 | 80 | To "propagate" a work means to do anything with it that, without 81 | permission, would make you directly or secondarily liable for 82 | infringement under applicable copyright law, except executing it on a 83 | computer or modifying a private copy. Propagation includes copying, 84 | distribution (with or without modification), making available to the 85 | public, and in some countries other activities as well. 86 | 87 | To "convey" a work means any kind of propagation that enables other 88 | parties to make or receive copies. Mere interaction with a user through 89 | a computer network, with no transfer of a copy, is not conveying. 90 | 91 | An interactive user interface displays "Appropriate Legal Notices" 92 | to the extent that it includes a convenient and prominently visible 93 | feature that (1) displays an appropriate copyright notice, and (2) 94 | tells the user that there is no warranty for the work (except to the 95 | extent that warranties are provided), that licensees may convey the 96 | work under this License, and how to view a copy of this License. If 97 | the interface presents a list of user commands or options, such as a 98 | menu, a prominent item in the list meets this criterion. 99 | 100 | 1. Source Code. 101 | 102 | The "source code" for a work means the preferred form of the work 103 | for making modifications to it. "Object code" means any non-source 104 | form of a work. 105 | 106 | A "Standard Interface" means an interface that either is an official 107 | standard defined by a recognized standards body, or, in the case of 108 | interfaces specified for a particular programming language, one that 109 | is widely used among developers working in that language. 110 | 111 | The "System Libraries" of an executable work include anything, other 112 | than the work as a whole, that (a) is included in the normal form of 113 | packaging a Major Component, but which is not part of that Major 114 | Component, and (b) serves only to enable use of the work with that 115 | Major Component, or to implement a Standard Interface for which an 116 | implementation is available to the public in source code form. A 117 | "Major Component", in this context, means a major essential component 118 | (kernel, window system, and so on) of the specific operating system 119 | (if any) on which the executable work runs, or a compiler used to 120 | produce the work, or an object code interpreter used to run it. 121 | 122 | The "Corresponding Source" for a work in object code form means all 123 | the source code needed to generate, install, and (for an executable 124 | work) run the object code and to modify the work, including scripts to 125 | control those activities. However, it does not include the work's 126 | System Libraries, or general-purpose tools or generally available free 127 | programs which are used unmodified in performing those activities but 128 | which are not part of the work. For example, Corresponding Source 129 | includes interface definition files associated with source files for 130 | the work, and the source code for shared libraries and dynamically 131 | linked subprograms that the work is specifically designed to require, 132 | such as by intimate data communication or control flow between those 133 | subprograms and other parts of the work. 134 | 135 | The Corresponding Source need not include anything that users 136 | can regenerate automatically from other parts of the Corresponding 137 | Source. 138 | 139 | The Corresponding Source for a work in source code form is that 140 | same work. 141 | 142 | 2. Basic Permissions. 143 | 144 | All rights granted under this License are granted for the term of 145 | copyright on the Program, and are irrevocable provided the stated 146 | conditions are met. This License explicitly affirms your unlimited 147 | permission to run the unmodified Program. The output from running a 148 | covered work is covered by this License only if the output, given its 149 | content, constitutes a covered work. This License acknowledges your 150 | rights of fair use or other equivalent, as provided by copyright law. 151 | 152 | You may make, run and propagate covered works that you do not 153 | convey, without conditions so long as your license otherwise remains 154 | in force. You may convey covered works to others for the sole purpose 155 | of having them make modifications exclusively for you, or provide you 156 | with facilities for running those works, provided that you comply with 157 | the terms of this License in conveying all material for which you do 158 | not control copyright. Those thus making or running the covered works 159 | for you must do so exclusively on your behalf, under your direction 160 | and control, on terms that prohibit them from making any copies of 161 | your copyrighted material outside their relationship with you. 162 | 163 | Conveying under any other circumstances is permitted solely under 164 | the conditions stated below. Sublicensing is not allowed; section 10 165 | makes it unnecessary. 166 | 167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 | 169 | No covered work shall be deemed part of an effective technological 170 | measure under any applicable law fulfilling obligations under article 171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 | similar laws prohibiting or restricting circumvention of such 173 | measures. 174 | 175 | When you convey a covered work, you waive any legal power to forbid 176 | circumvention of technological measures to the extent such circumvention 177 | is effected by exercising rights under this License with respect to 178 | the covered work, and you disclaim any intention to limit operation or 179 | modification of the work as a means of enforcing, against the work's 180 | users, your or third parties' legal rights to forbid circumvention of 181 | technological measures. 182 | 183 | 4. Conveying Verbatim Copies. 184 | 185 | You may convey verbatim copies of the Program's source code as you 186 | receive it, in any medium, provided that you conspicuously and 187 | appropriately publish on each copy an appropriate copyright notice; 188 | keep intact all notices stating that this License and any 189 | non-permissive terms added in accord with section 7 apply to the code; 190 | keep intact all notices of the absence of any warranty; and give all 191 | recipients a copy of this License along with the Program. 192 | 193 | You may charge any price or no price for each copy that you convey, 194 | and you may offer support or warranty protection for a fee. 195 | 196 | 5. Conveying Modified Source Versions. 197 | 198 | You may convey a work based on the Program, or the modifications to 199 | produce it from the Program, in the form of source code under the 200 | terms of section 4, provided that you also meet all of these conditions: 201 | 202 | a) The work must carry prominent notices stating that you modified 203 | it, and giving a relevant date. 204 | 205 | b) The work must carry prominent notices stating that it is 206 | released under this License and any conditions added under section 207 | 7. This requirement modifies the requirement in section 4 to 208 | "keep intact all notices". 209 | 210 | c) You must license the entire work, as a whole, under this 211 | License to anyone who comes into possession of a copy. This 212 | License will therefore apply, along with any applicable section 7 213 | additional terms, to the whole of the work, and all its parts, 214 | regardless of how they are packaged. This License gives no 215 | permission to license the work in any other way, but it does not 216 | invalidate such permission if you have separately received it. 217 | 218 | d) If the work has interactive user interfaces, each must display 219 | Appropriate Legal Notices; however, if the Program has interactive 220 | interfaces that do not display Appropriate Legal Notices, your 221 | work need not make them do so. 222 | 223 | A compilation of a covered work with other separate and independent 224 | works, which are not by their nature extensions of the covered work, 225 | and which are not combined with it such as to form a larger program, 226 | in or on a volume of a storage or distribution medium, is called an 227 | "aggregate" if the compilation and its resulting copyright are not 228 | used to limit the access or legal rights of the compilation's users 229 | beyond what the individual works permit. Inclusion of a covered work 230 | in an aggregate does not cause this License to apply to the other 231 | parts of the aggregate. 232 | 233 | 6. Conveying Non-Source Forms. 234 | 235 | You may convey a covered work in object code form under the terms 236 | of sections 4 and 5, provided that you also convey the 237 | machine-readable Corresponding Source under the terms of this License, 238 | in one of these ways: 239 | 240 | a) Convey the object code in, or embodied in, a physical product 241 | (including a physical distribution medium), accompanied by the 242 | Corresponding Source fixed on a durable physical medium 243 | customarily used for software interchange. 244 | 245 | b) Convey the object code in, or embodied in, a physical product 246 | (including a physical distribution medium), accompanied by a 247 | written offer, valid for at least three years and valid for as 248 | long as you offer spare parts or customer support for that product 249 | model, to give anyone who possesses the object code either (1) a 250 | copy of the Corresponding Source for all the software in the 251 | product that is covered by this License, on a durable physical 252 | medium customarily used for software interchange, for a price no 253 | more than your reasonable cost of physically performing this 254 | conveying of source, or (2) access to copy the 255 | Corresponding Source from a network server at no charge. 256 | 257 | c) Convey individual copies of the object code with a copy of the 258 | written offer to provide the Corresponding Source. This 259 | alternative is allowed only occasionally and noncommercially, and 260 | only if you received the object code with such an offer, in accord 261 | with subsection 6b. 262 | 263 | d) Convey the object code by offering access from a designated 264 | place (gratis or for a charge), and offer equivalent access to the 265 | Corresponding Source in the same way through the same place at no 266 | further charge. You need not require recipients to copy the 267 | Corresponding Source along with the object code. If the place to 268 | copy the object code is a network server, the Corresponding Source 269 | may be on a different server (operated by you or a third party) 270 | that supports equivalent copying facilities, provided you maintain 271 | clear directions next to the object code saying where to find the 272 | Corresponding Source. Regardless of what server hosts the 273 | Corresponding Source, you remain obligated to ensure that it is 274 | available for as long as needed to satisfy these requirements. 275 | 276 | e) Convey the object code using peer-to-peer transmission, provided 277 | you inform other peers where the object code and Corresponding 278 | Source of the work are being offered to the general public at no 279 | charge under subsection 6d. 280 | 281 | A separable portion of the object code, whose source code is excluded 282 | from the Corresponding Source as a System Library, need not be 283 | included in conveying the object code work. 284 | 285 | A "User Product" is either (1) a "consumer product", which means any 286 | tangible personal property which is normally used for personal, family, 287 | or household purposes, or (2) anything designed or sold for incorporation 288 | into a dwelling. In determining whether a product is a consumer product, 289 | doubtful cases shall be resolved in favor of coverage. For a particular 290 | product received by a particular user, "normally used" refers to a 291 | typical or common use of that class of product, regardless of the status 292 | of the particular user or of the way in which the particular user 293 | actually uses, or expects or is expected to use, the product. A product 294 | is a consumer product regardless of whether the product has substantial 295 | commercial, industrial or non-consumer uses, unless such uses represent 296 | the only significant mode of use of the product. 297 | 298 | "Installation Information" for a User Product means any methods, 299 | procedures, authorization keys, or other information required to install 300 | and execute modified versions of a covered work in that User Product from 301 | a modified version of its Corresponding Source. The information must 302 | suffice to ensure that the continued functioning of the modified object 303 | code is in no case prevented or interfered with solely because 304 | modification has been made. 305 | 306 | If you convey an object code work under this section in, or with, or 307 | specifically for use in, a User Product, and the conveying occurs as 308 | part of a transaction in which the right of possession and use of the 309 | User Product is transferred to the recipient in perpetuity or for a 310 | fixed term (regardless of how the transaction is characterized), the 311 | Corresponding Source conveyed under this section must be accompanied 312 | by the Installation Information. But this requirement does not apply 313 | if neither you nor any third party retains the ability to install 314 | modified object code on the User Product (for example, the work has 315 | been installed in ROM). 316 | 317 | The requirement to provide Installation Information does not include a 318 | requirement to continue to provide support service, warranty, or updates 319 | for a work that has been modified or installed by the recipient, or for 320 | the User Product in which it has been modified or installed. Access to a 321 | network may be denied when the modification itself materially and 322 | adversely affects the operation of the network or violates the rules and 323 | protocols for communication across the network. 324 | 325 | Corresponding Source conveyed, and Installation Information provided, 326 | in accord with this section must be in a format that is publicly 327 | documented (and with an implementation available to the public in 328 | source code form), and must require no special password or key for 329 | unpacking, reading or copying. 330 | 331 | 7. Additional Terms. 332 | 333 | "Additional permissions" are terms that supplement the terms of this 334 | License by making exceptions from one or more of its conditions. 335 | Additional permissions that are applicable to the entire Program shall 336 | be treated as though they were included in this License, to the extent 337 | that they are valid under applicable law. If additional permissions 338 | apply only to part of the Program, that part may be used separately 339 | under those permissions, but the entire Program remains governed by 340 | this License without regard to the additional permissions. 341 | 342 | When you convey a copy of a covered work, you may at your option 343 | remove any additional permissions from that copy, or from any part of 344 | it. (Additional permissions may be written to require their own 345 | removal in certain cases when you modify the work.) You may place 346 | additional permissions on material, added by you to a covered work, 347 | for which you have or can give appropriate copyright permission. 348 | 349 | Notwithstanding any other provision of this License, for material you 350 | add to a covered work, you may (if authorized by the copyright holders of 351 | that material) supplement the terms of this License with terms: 352 | 353 | a) Disclaiming warranty or limiting liability differently from the 354 | terms of sections 15 and 16 of this License; or 355 | 356 | b) Requiring preservation of specified reasonable legal notices or 357 | author attributions in that material or in the Appropriate Legal 358 | Notices displayed by works containing it; or 359 | 360 | c) Prohibiting misrepresentation of the origin of that material, or 361 | requiring that modified versions of such material be marked in 362 | reasonable ways as different from the original version; or 363 | 364 | d) Limiting the use for publicity purposes of names of licensors or 365 | authors of the material; or 366 | 367 | e) Declining to grant rights under trademark law for use of some 368 | trade names, trademarks, or service marks; or 369 | 370 | f) Requiring indemnification of licensors and authors of that 371 | material by anyone who conveys the material (or modified versions of 372 | it) with contractual assumptions of liability to the recipient, for 373 | any liability that these contractual assumptions directly impose on 374 | those licensors and authors. 375 | 376 | All other non-permissive additional terms are considered "further 377 | restrictions" within the meaning of section 10. If the Program as you 378 | received it, or any part of it, contains a notice stating that it is 379 | governed by this License along with a term that is a further 380 | restriction, you may remove that term. If a license document contains 381 | a further restriction but permits relicensing or conveying under this 382 | License, you may add to a covered work material governed by the terms 383 | of that license document, provided that the further restriction does 384 | not survive such relicensing or conveying. 385 | 386 | If you add terms to a covered work in accord with this section, you 387 | must place, in the relevant source files, a statement of the 388 | additional terms that apply to those files, or a notice indicating 389 | where to find the applicable terms. 390 | 391 | Additional terms, permissive or non-permissive, may be stated in the 392 | form of a separately written license, or stated as exceptions; 393 | the above requirements apply either way. 394 | 395 | 8. Termination. 396 | 397 | You may not propagate or modify a covered work except as expressly 398 | provided under this License. Any attempt otherwise to propagate or 399 | modify it is void, and will automatically terminate your rights under 400 | this License (including any patent licenses granted under the third 401 | paragraph of section 11). 402 | 403 | However, if you cease all violation of this License, then your 404 | license from a particular copyright holder is reinstated (a) 405 | provisionally, unless and until the copyright holder explicitly and 406 | finally terminates your license, and (b) permanently, if the copyright 407 | holder fails to notify you of the violation by some reasonable means 408 | prior to 60 days after the cessation. 409 | 410 | Moreover, your license from a particular copyright holder is 411 | reinstated permanently if the copyright holder notifies you of the 412 | violation by some reasonable means, this is the first time you have 413 | received notice of violation of this License (for any work) from that 414 | copyright holder, and you cure the violation prior to 30 days after 415 | your receipt of the notice. 416 | 417 | Termination of your rights under this section does not terminate the 418 | licenses of parties who have received copies or rights from you under 419 | this License. If your rights have been terminated and not permanently 420 | reinstated, you do not qualify to receive new licenses for the same 421 | material under section 10. 422 | 423 | 9. Acceptance Not Required for Having Copies. 424 | 425 | You are not required to accept this License in order to receive or 426 | run a copy of the Program. Ancillary propagation of a covered work 427 | occurring solely as a consequence of using peer-to-peer transmission 428 | to receive a copy likewise does not require acceptance. However, 429 | nothing other than this License grants you permission to propagate or 430 | modify any covered work. These actions infringe copyright if you do 431 | not accept this License. Therefore, by modifying or propagating a 432 | covered work, you indicate your acceptance of this License to do so. 433 | 434 | 10. Automatic Licensing of Downstream Recipients. 435 | 436 | Each time you convey a covered work, the recipient automatically 437 | receives a license from the original licensors, to run, modify and 438 | propagate that work, subject to this License. You are not responsible 439 | for enforcing compliance by third parties with this License. 440 | 441 | An "entity transaction" is a transaction transferring control of an 442 | organization, or substantially all assets of one, or subdividing an 443 | organization, or merging organizations. If propagation of a covered 444 | work results from an entity transaction, each party to that 445 | transaction who receives a copy of the work also receives whatever 446 | licenses to the work the party's predecessor in interest had or could 447 | give under the previous paragraph, plus a right to possession of the 448 | Corresponding Source of the work from the predecessor in interest, if 449 | the predecessor has it or can get it with reasonable efforts. 450 | 451 | You may not impose any further restrictions on the exercise of the 452 | rights granted or affirmed under this License. For example, you may 453 | not impose a license fee, royalty, or other charge for exercise of 454 | rights granted under this License, and you may not initiate litigation 455 | (including a cross-claim or counterclaim in a lawsuit) alleging that 456 | any patent claim is infringed by making, using, selling, offering for 457 | sale, or importing the Program or any portion of it. 458 | 459 | 11. Patents. 460 | 461 | A "contributor" is a copyright holder who authorizes use under this 462 | License of the Program or a work on which the Program is based. The 463 | work thus licensed is called the contributor's "contributor version". 464 | 465 | A contributor's "essential patent claims" are all patent claims 466 | owned or controlled by the contributor, whether already acquired or 467 | hereafter acquired, that would be infringed by some manner, permitted 468 | by this License, of making, using, or selling its contributor version, 469 | but do not include claims that would be infringed only as a 470 | consequence of further modification of the contributor version. For 471 | purposes of this definition, "control" includes the right to grant 472 | patent sublicenses in a manner consistent with the requirements of 473 | this License. 474 | 475 | Each contributor grants you a non-exclusive, worldwide, royalty-free 476 | patent license under the contributor's essential patent claims, to 477 | make, use, sell, offer for sale, import and otherwise run, modify and 478 | propagate the contents of its contributor version. 479 | 480 | In the following three paragraphs, a "patent license" is any express 481 | agreement or commitment, however denominated, not to enforce a patent 482 | (such as an express permission to practice a patent or covenant not to 483 | sue for patent infringement). To "grant" such a patent license to a 484 | party means to make such an agreement or commitment not to enforce a 485 | patent against the party. 486 | 487 | If you convey a covered work, knowingly relying on a patent license, 488 | and the Corresponding Source of the work is not available for anyone 489 | to copy, free of charge and under the terms of this License, through a 490 | publicly available network server or other readily accessible means, 491 | then you must either (1) cause the Corresponding Source to be so 492 | available, or (2) arrange to deprive yourself of the benefit of the 493 | patent license for this particular work, or (3) arrange, in a manner 494 | consistent with the requirements of this License, to extend the patent 495 | license to downstream recipients. "Knowingly relying" means you have 496 | actual knowledge that, but for the patent license, your conveying the 497 | covered work in a country, or your recipient's use of the covered work 498 | in a country, would infringe one or more identifiable patents in that 499 | country that you have reason to believe are valid. 500 | 501 | If, pursuant to or in connection with a single transaction or 502 | arrangement, you convey, or propagate by procuring conveyance of, a 503 | covered work, and grant a patent license to some of the parties 504 | receiving the covered work authorizing them to use, propagate, modify 505 | or convey a specific copy of the covered work, then the patent license 506 | you grant is automatically extended to all recipients of the covered 507 | work and works based on it. 508 | 509 | A patent license is "discriminatory" if it does not include within 510 | the scope of its coverage, prohibits the exercise of, or is 511 | conditioned on the non-exercise of one or more of the rights that are 512 | specifically granted under this License. You may not convey a covered 513 | work if you are a party to an arrangement with a third party that is 514 | in the business of distributing software, under which you make payment 515 | to the third party based on the extent of your activity of conveying 516 | the work, and under which the third party grants, to any of the 517 | parties who would receive the covered work from you, a discriminatory 518 | patent license (a) in connection with copies of the covered work 519 | conveyed by you (or copies made from those copies), or (b) primarily 520 | for and in connection with specific products or compilations that 521 | contain the covered work, unless you entered into that arrangement, 522 | or that patent license was granted, prior to 28 March 2007. 523 | 524 | Nothing in this License shall be construed as excluding or limiting 525 | any implied license or other defenses to infringement that may 526 | otherwise be available to you under applicable patent law. 527 | 528 | 12. No Surrender of Others' Freedom. 529 | 530 | If conditions are imposed on you (whether by court order, agreement or 531 | otherwise) that contradict the conditions of this License, they do not 532 | excuse you from the conditions of this License. If you cannot convey a 533 | covered work so as to satisfy simultaneously your obligations under this 534 | License and any other pertinent obligations, then as a consequence you may 535 | not convey it at all. For example, if you agree to terms that obligate you 536 | to collect a royalty for further conveying from those to whom you convey 537 | the Program, the only way you could satisfy both those terms and this 538 | License would be to refrain entirely from conveying the Program. 539 | 540 | 13. Remote Network Interaction; Use with the GNU General Public License. 541 | 542 | Notwithstanding any other provision of this License, if you modify the 543 | Program, your modified version must prominently offer all users 544 | interacting with it remotely through a computer network (if your version 545 | supports such interaction) an opportunity to receive the Corresponding 546 | Source of your version by providing access to the Corresponding Source 547 | from a network server at no charge, through some standard or customary 548 | means of facilitating copying of software. This Corresponding Source 549 | shall include the Corresponding Source for any work covered by version 3 550 | of the GNU General Public License that is incorporated pursuant to the 551 | following paragraph. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the work with which it is combined will remain governed by version 559 | 3 of the GNU General Public License. 560 | 561 | 14. Revised Versions of this License. 562 | 563 | The Free Software Foundation may publish revised and/or new versions of 564 | the GNU Affero General Public License from time to time. Such new versions 565 | will be similar in spirit to the present version, but may differ in detail to 566 | address new problems or concerns. 567 | 568 | Each version is given a distinguishing version number. If the 569 | Program specifies that a certain numbered version of the GNU Affero General 570 | Public License "or any later version" applies to it, you have the 571 | option of following the terms and conditions either of that numbered 572 | version or of any later version published by the Free Software 573 | Foundation. If the Program does not specify a version number of the 574 | GNU Affero General Public License, you may choose any version ever published 575 | by the Free Software Foundation. 576 | 577 | If the Program specifies that a proxy can decide which future 578 | versions of the GNU Affero General Public License can be used, that proxy's 579 | public statement of acceptance of a version permanently authorizes you 580 | to choose that version for the Program. 581 | 582 | Later license versions may give you additional or different 583 | permissions. However, no additional obligations are imposed on any 584 | author or copyright holder as a result of your choosing to follow a 585 | later version. 586 | 587 | 15. Disclaimer of Warranty. 588 | 589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 | 598 | 16. Limitation of Liability. 599 | 600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 | SUCH DAMAGES. 609 | 610 | 17. Interpretation of Sections 15 and 16. 611 | 612 | If the disclaimer of warranty and limitation of liability provided 613 | above cannot be given local legal effect according to their terms, 614 | reviewing courts shall apply local law that most closely approximates 615 | an absolute waiver of all civil liability in connection with the 616 | Program, unless a warranty or assumption of liability accompanies a 617 | copy of the Program in return for a fee. 618 | 619 | END OF TERMS AND CONDITIONS 620 | 621 | How to Apply These Terms to Your New Programs 622 | 623 | If you develop a new program, and you want it to be of the greatest 624 | possible use to the public, the best way to achieve this is to make it 625 | free software which everyone can redistribute and change under these terms. 626 | 627 | To do so, attach the following notices to the program. It is safest 628 | to attach them to the start of each source file to most effectively 629 | state the exclusion of warranty; and each file should have at least 630 | the "copyright" line and a pointer to where the full notice is found. 631 | 632 | 633 | Copyright (C) 634 | 635 | This program is free software: you can redistribute it and/or modify 636 | it under the terms of the GNU Affero General Public License as published 637 | by the Free Software Foundation, either version 3 of the License, or 638 | (at your option) any later version. 639 | 640 | This program is distributed in the hope that it will be useful, 641 | but WITHOUT ANY WARRANTY; without even the implied warranty of 642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 | GNU Affero General Public License for more details. 644 | 645 | You should have received a copy of the GNU Affero General Public License 646 | along with this program. If not, see . 647 | 648 | Also add information on how to contact you by electronic and paper mail. 649 | 650 | If your software can interact with users remotely through a computer 651 | network, you should also make sure that it provides a way for users to 652 | get its source. For example, if your program is a web application, its 653 | interface could display a "Source" link that leads users to an archive 654 | of the code. There are many ways you could offer source, and different 655 | solutions will be better for different programs; see section 13 for the 656 | specific requirements. 657 | 658 | You should also get your employer (if you work as a programmer) or school, 659 | if any, to sign a "copyright disclaimer" for the program, if necessary. 660 | For more information on this, and how to apply and follow the GNU AGPL, see 661 | . 662 | -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | url = "https://pypi.org/simple" 3 | verify_ssl = true 4 | name = "pypi" 5 | 6 | [packages] 7 | "mastodon.py" = "*" 8 | polars = "*" 9 | streamlit = "*" 10 | bleach = "*" 11 | bertopic = "*" 12 | 13 | [dev-packages] 14 | 15 | [requires] 16 | python_version = "3.10" 17 | -------------------------------------------------------------------------------- /Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "1f9a1ca77f1d575aa6785d61f9c16a4f6f7f10bfcd367a22e22896e4f70d2aa8" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.10" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "altair": { 20 | "hashes": [ 21 | "sha256:5a268b1a0983b23d8f9129f819f956174aa7aea2719ed55a52eba9979b9f6675", 22 | "sha256:7084a1dab4d83c5e7e5246b92dc1b4451a6c68fd057f3716ee9d315c8980e59a" 23 | ], 24 | "markers": "python_version >= '3.8'", 25 | "version": "==5.3.0" 26 | }, 27 | "attrs": { 28 | "hashes": [ 29 | "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30", 30 | "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1" 31 | ], 32 | "markers": "python_version >= '3.7'", 33 | "version": "==23.2.0" 34 | }, 35 | "bertopic": { 36 | "hashes": [ 37 | "sha256:7b550f8fcb50fabbebb51625b9fd3a31b4d86aa758c2591cd68899eb22d5c34c", 38 | "sha256:b5edc46f068a40535b7ef69814523636adb5153258ddda0b8d0136304b87aa2d" 39 | ], 40 | "index": "pypi", 41 | "version": "==0.16.2" 42 | }, 43 | "bleach": { 44 | "hashes": [ 45 | "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe", 46 | "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6" 47 | ], 48 | "index": "pypi", 49 | "version": "==6.1.0" 50 | }, 51 | "blinker": { 52 | "hashes": [ 53 | "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01", 54 | "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83" 55 | ], 56 | "markers": "python_version >= '3.8'", 57 | "version": "==1.8.2" 58 | }, 59 | "blurhash": { 60 | "hashes": [ 61 | "sha256:7611c1bc41383d2349b6129208587b5d61e8792ce953893cb49c38beeb400d1d", 62 | "sha256:da56b163e5a816e4ad07172f5639287698e09d7f3dc38d18d9726d9c1dbc4cee" 63 | ], 64 | "version": "==1.1.4" 65 | }, 66 | "cachetools": { 67 | "hashes": [ 68 | "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945", 69 | "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105" 70 | ], 71 | "markers": "python_version >= '3.7'", 72 | "version": "==5.3.3" 73 | }, 74 | "certifi": { 75 | "hashes": [ 76 | "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516", 77 | "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56" 78 | ], 79 | "markers": "python_version >= '3.6'", 80 | "version": "==2024.6.2" 81 | }, 82 | "charset-normalizer": { 83 | "hashes": [ 84 | "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", 85 | "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", 86 | "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", 87 | "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", 88 | "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", 89 | "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", 90 | "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", 91 | "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", 92 | "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", 93 | "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", 94 | "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", 95 | "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", 96 | "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", 97 | "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", 98 | "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", 99 | "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", 100 | "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", 101 | "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", 102 | "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", 103 | "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", 104 | "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", 105 | "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", 106 | "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", 107 | "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", 108 | "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", 109 | "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", 110 | "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", 111 | "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", 112 | "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", 113 | "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", 114 | "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", 115 | "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", 116 | "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", 117 | "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", 118 | "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", 119 | "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", 120 | "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", 121 | "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", 122 | "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", 123 | "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", 124 | "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", 125 | "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", 126 | "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", 127 | "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", 128 | "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", 129 | "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", 130 | "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", 131 | "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", 132 | "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", 133 | "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", 134 | "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", 135 | "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", 136 | "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", 137 | "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", 138 | "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", 139 | "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", 140 | "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", 141 | "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", 142 | "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", 143 | "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", 144 | "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", 145 | "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", 146 | "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", 147 | "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", 148 | "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", 149 | "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", 150 | "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", 151 | "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", 152 | "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", 153 | "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", 154 | "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", 155 | "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", 156 | "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", 157 | "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", 158 | "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", 159 | "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", 160 | "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", 161 | "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", 162 | "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", 163 | "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", 164 | "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", 165 | "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", 166 | "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", 167 | "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", 168 | "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", 169 | "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", 170 | "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", 171 | "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", 172 | "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", 173 | "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" 174 | ], 175 | "markers": "python_full_version >= '3.7.0'", 176 | "version": "==3.3.2" 177 | }, 178 | "click": { 179 | "hashes": [ 180 | "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", 181 | "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" 182 | ], 183 | "markers": "python_version >= '3.7'", 184 | "version": "==8.1.7" 185 | }, 186 | "cython": { 187 | "hashes": [ 188 | "sha256:0301d4739c6894e012f1d410052082fdda9e63888c815d9e23e0f7f82fff7d79", 189 | "sha256:0544f7a3e4437b89b356baa15387494c18214e03f2ffaddada5a2c71c3dfd24b", 190 | "sha256:0a0a6d5972bb3b8c7363cf19a42a988bb0c0bb5ebd9c736c84eca85113ccfdbe", 191 | "sha256:12192ab269e7185720f2d2f8894587bf1da4276db1b9b869e4622a093f18cae6", 192 | "sha256:177481b0a7e003e5c49e2bf0dda1d6fe610c239f17642a5da9f18c2ad0c5f6b6", 193 | "sha256:2618af0b8df26d32ee4e8858d4ad8167546596762620aeade84954ae37194a0e", 194 | "sha256:29415d8eb2fdc1ea518ca4810c50a2d062b387d4c9fbcfb3352346e93db22c6d", 195 | "sha256:2ad634dc77a6a74022881826099eccac19c9b79153942cc82e754ffac2bec116", 196 | "sha256:2de3e729d25f041036e81e2f15683dd129f977dfb5b06267e30e8d7acec43225", 197 | "sha256:3f87bef1808d255cf13be378c7ad27ae7c6db6df7732217d32428d1daf4109be", 198 | "sha256:4658499a41255431f6bbdca7e634e9c8d3a4c190bf24b4aa1646dac751d3da4d", 199 | "sha256:562f8f911dbd6f1a1b9be8f6cba097125700355688f613994ccd4406f220557a", 200 | "sha256:6c672089fba6a8f6690b8d7924a58c04477771401ad101d53171a13405ee12cb", 201 | "sha256:6cddb567dadb3aa3e280a8a35e5126030915ea744c2812206e9c194b8881475d", 202 | "sha256:79ecfc48694e156402c05561e0adb0e25a6e9d35ac0b41693733a08219d38c58", 203 | "sha256:852cd4378cbc9ade02f53709107ff9fdad55019a3a636e8a27663ba6cfce10b6", 204 | "sha256:8bf38373773f967cfd793997a6fb96cf972d41a9fce987ace5767349d6f15572", 205 | "sha256:8c39c2f5a0fe29bb01de9b1fb449bf65bed6f192317c677f181732791c63fe28", 206 | "sha256:9450e0766ab65947f8a2a36f9e59079fc879c3807ec936c61725a48c97741a52", 207 | "sha256:95f1d6a83ef2729e67b3fa7318c829ce5b07ac64c084cd6af11c228e0364662c", 208 | "sha256:9a455347e20ddfad0c5dfee32a3e855ee96811269e5fd86be622ddc4cb326404", 209 | "sha256:9e68bafeeb97d5a403fb1f7700bd4a55a1f8989824c323ae02ae8a4fcd88f6a1", 210 | "sha256:a6164a05440dcd9daa760c6488bc91bdac1380c7b4b3aca38cf307ba66042d54", 211 | "sha256:ac910a28a2fd3d280faf3077b6fe63b97a4b93994ff05647581846f0e4b2f8d1", 212 | "sha256:af03854571738307a5f30cc6b724081d72db12f907699e7fdfc04c12c839158e", 213 | "sha256:af8e7b4397620e2d18259a11f3bfa026eff9846657e397d02616962dd5dd035a", 214 | "sha256:b048354fd380278f2fa096e7526973beb6e0491a9d44d7e4e29df52612d25776", 215 | "sha256:b225d5e2091c224d4ab328165fef224ba3919b3ed44bd9b3241416f523b4d51a", 216 | "sha256:b6c48f1032b379135a5b4a31976d6c468e02490688acf9254c6c8ed27bd4cbd4", 217 | "sha256:b82584836e9e7c0d6effee976595e5cd7fa88dbef3e96e900187983c1d4637d1", 218 | "sha256:bbce388431a2608a81c8ab13cb14c50611473843ca766031b8b24bb1723faf79", 219 | "sha256:c33508ede9172a6f6f99d5a6dadc7fee23c840423b411ef8b5a403c04e530297", 220 | "sha256:cc1b9ce2b73b9ee8c305e06173b35c7c202d4b82d084a0cd73dcedfd6d310aec", 221 | "sha256:d94caf90ae9cb56116ca6d54cdcbccd3c4df6b0cb7233922b2233ee7fe81d05b", 222 | "sha256:e14cd44c830e53cf9d7269c87a6bcc638bb065ec07e24990e338162c7001d3c3", 223 | "sha256:e841a8b4f9ceefb2916e32dac4f28a895cd519e8ece71505144da1ee355c548a", 224 | "sha256:e8af5975ecfae254d8c0051204fca995dda8f93cf9f0bbf7571e3cda2b0cef4d", 225 | "sha256:ea6d208be1906c5df25b674777d5905c6d8e9ef0b201b830849e0729ba08caba", 226 | "sha256:f2d621fe4cb50007446742134a890500b34e3f50abaf7993baaca02634af7e15", 227 | "sha256:f813d4a6dd94adee5d4ff266191d1d95bf6d4164a4facc535422c021b2504cfb", 228 | "sha256:fa5b6a0f69bf1823c9fd038fa77a2568b78fda2de045a95b48a71dee4d0d578f", 229 | "sha256:fe0eaf6b1e9ee97c5ee7bfc943f00e36cf59d929db16886cb018352bff8208da" 230 | ], 231 | "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'", 232 | "version": "==0.29.37" 233 | }, 234 | "decorator": { 235 | "hashes": [ 236 | "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", 237 | "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" 238 | ], 239 | "markers": "python_version >= '3.5'", 240 | "version": "==5.1.1" 241 | }, 242 | "filelock": { 243 | "hashes": [ 244 | "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f", 245 | "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a" 246 | ], 247 | "markers": "python_version >= '3.8'", 248 | "version": "==3.14.0" 249 | }, 250 | "fsspec": { 251 | "hashes": [ 252 | "sha256:58d7122eb8a1a46f7f13453187bfea4972d66bf01618d37366521b1998034cee", 253 | "sha256:f579960a56e6d8038a9efc8f9c77279ec12e6299aa86b0769a7e9c46b94527c2" 254 | ], 255 | "markers": "python_version >= '3.8'", 256 | "version": "==2024.6.0" 257 | }, 258 | "gitdb": { 259 | "hashes": [ 260 | "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4", 261 | "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b" 262 | ], 263 | "markers": "python_version >= '3.7'", 264 | "version": "==4.0.11" 265 | }, 266 | "gitpython": { 267 | "hashes": [ 268 | "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c", 269 | "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff" 270 | ], 271 | "markers": "python_version >= '3.7'", 272 | "version": "==3.1.43" 273 | }, 274 | "hdbscan": { 275 | "hashes": [ 276 | "sha256:10cf38b695a4c00055f341fd0d056c07649672caf463ff8546e64400cdf8f086", 277 | "sha256:1ac23d444114436fcf65bca66048fd5643ee4c055b092187acdb25596d6974a7", 278 | "sha256:3d14da55161d8a7e0a936a0fd0d1c141a37a310145e503346d6fcc960b1fb306", 279 | "sha256:40071b1a07cd3be1b0fb953a92e06617e47086e10838c95caeb63095074acd8e", 280 | "sha256:62553fe08934b950ec828693d79d370547d55f0525e3b88625fb613ad84be27b", 281 | "sha256:641d749450683c52f9ca4b3eefc0400a97dcdcd2df39756757a0c07a874e977d", 282 | "sha256:797a52cbf91c0a5cfa859b56524b6cf96ab4b4c87d02f8a95b3380c0d58d6c90", 283 | "sha256:923b0f59c111320e16090c2b677417631ded5655b97d73364161de02f939a634", 284 | "sha256:9ac2d994038ab972b62c0804bfc1974342ee39962f1d0df928161f2b7588faa3", 285 | "sha256:a82f7d51c8988fa3c5002fda36454a61ba0d83c3f53e1a011380465cbb5c0514", 286 | "sha256:cd7e483f510689a43d432721aa29b59a0afb249ad0e5c2fad80669938713efc4", 287 | "sha256:d386f8e3371c536b6a140d61cd07756b618db148829ab8db1c3a01141ff5c042", 288 | "sha256:d398acb69e0c4ebdf539c2ba5839c523360ec814f300faa7f2f87de8f257af58", 289 | "sha256:e7f609df241155c1ebaa89ac83d52f06e525735f8744338c2bb8e2c6d9e37b25", 290 | "sha256:f91ad59590863dd77841b49c73b4f2fdc836dbf698b21df191d8374af19b28ed" 291 | ], 292 | "version": "==0.8.36" 293 | }, 294 | "huggingface-hub": { 295 | "hashes": [ 296 | "sha256:48727a16e704d409c4bb5913613308499664f22a99743435dc3a13b23c485827", 297 | "sha256:f6829b62d5fdecb452a76fdbec620cba4c1573655a8d710c1df71735fd9edbd2" 298 | ], 299 | "markers": "python_full_version >= '3.8.0'", 300 | "version": "==0.23.2" 301 | }, 302 | "idna": { 303 | "hashes": [ 304 | "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", 305 | "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" 306 | ], 307 | "markers": "python_version >= '3.5'", 308 | "version": "==3.7" 309 | }, 310 | "jinja2": { 311 | "hashes": [ 312 | "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", 313 | "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d" 314 | ], 315 | "markers": "python_version >= '3.7'", 316 | "version": "==3.1.4" 317 | }, 318 | "joblib": { 319 | "hashes": [ 320 | "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", 321 | "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e" 322 | ], 323 | "markers": "python_version >= '3.8'", 324 | "version": "==1.4.2" 325 | }, 326 | "jsonschema": { 327 | "hashes": [ 328 | "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7", 329 | "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802" 330 | ], 331 | "markers": "python_version >= '3.8'", 332 | "version": "==4.22.0" 333 | }, 334 | "jsonschema-specifications": { 335 | "hashes": [ 336 | "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc", 337 | "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c" 338 | ], 339 | "markers": "python_version >= '3.8'", 340 | "version": "==2023.12.1" 341 | }, 342 | "llvmlite": { 343 | "hashes": [ 344 | "sha256:05cb7e9b6ce69165ce4d1b994fbdedca0c62492e537b0cc86141b6e2c78d5888", 345 | "sha256:08fa9ab02b0d0179c688a4216b8939138266519aaa0aa94f1195a8542faedb56", 346 | "sha256:3366938e1bf63d26c34fbfb4c8e8d2ded57d11e0567d5bb243d89aab1eb56098", 347 | "sha256:43d65cc4e206c2e902c1004dd5418417c4efa6c1d04df05c6c5675a27e8ca90e", 348 | "sha256:70f44ccc3c6220bd23e0ba698a63ec2a7d3205da0d848804807f37fc243e3f77", 349 | "sha256:763f8d8717a9073b9e0246998de89929071d15b47f254c10eef2310b9aac033d", 350 | "sha256:7e0c4c11c8c2aa9b0701f91b799cb9134a6a6de51444eff5a9087fc7c1384275", 351 | "sha256:81e674c2fe85576e6c4474e8c7e7aba7901ac0196e864fe7985492b737dbab65", 352 | "sha256:8d90edf400b4ceb3a0e776b6c6e4656d05c7187c439587e06f86afceb66d2be5", 353 | "sha256:a78ab89f1924fc11482209f6799a7a3fc74ddc80425a7a3e0e8174af0e9e2301", 354 | "sha256:ae511caed28beaf1252dbaf5f40e663f533b79ceb408c874c01754cafabb9cbf", 355 | "sha256:b2fce7d355068494d1e42202c7aff25d50c462584233013eb4470c33b995e3ee", 356 | "sha256:bb3975787f13eb97629052edb5017f6c170eebc1c14a0433e8089e5db43bcce6", 357 | "sha256:bdd3888544538a94d7ec99e7c62a0cdd8833609c85f0c23fcb6c5c591aec60ad", 358 | "sha256:c35da49666a21185d21b551fc3caf46a935d54d66969d32d72af109b5e7d2b6f", 359 | "sha256:c5bece0cdf77f22379f19b1959ccd7aee518afa4afbd3656c6365865f84903f9", 360 | "sha256:d0936c2067a67fb8816c908d5457d63eba3e2b17e515c5fe00e5ee2bace06040", 361 | "sha256:d47494552559e00d81bfb836cf1c4d5a5062e54102cc5767d5aa1e77ccd2505c", 362 | "sha256:d7599b65c7af7abbc978dbf345712c60fd596aa5670496561cc10e8a71cebfb2", 363 | "sha256:ebe66a86dc44634b59a3bc860c7b20d26d9aaffcd30364ebe8ba79161a9121f4", 364 | "sha256:f92b09243c0cc3f457da8b983f67bd8e1295d0f5b3746c7a1861d7a99403854a" 365 | ], 366 | "markers": "python_version >= '3.9'", 367 | "version": "==0.42.0" 368 | }, 369 | "markdown-it-py": { 370 | "hashes": [ 371 | "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", 372 | "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb" 373 | ], 374 | "markers": "python_version >= '3.8'", 375 | "version": "==3.0.0" 376 | }, 377 | "markupsafe": { 378 | "hashes": [ 379 | "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", 380 | "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", 381 | "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", 382 | "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", 383 | "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532", 384 | "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", 385 | "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", 386 | "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df", 387 | "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4", 388 | "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", 389 | "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", 390 | "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", 391 | "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", 392 | "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371", 393 | "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2", 394 | "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", 395 | "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52", 396 | "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", 397 | "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", 398 | "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", 399 | "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", 400 | "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0", 401 | "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029", 402 | "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", 403 | "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a", 404 | "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", 405 | "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", 406 | "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", 407 | "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", 408 | "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9", 409 | "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", 410 | "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", 411 | "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3", 412 | "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", 413 | "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46", 414 | "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", 415 | "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a", 416 | "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", 417 | "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", 418 | "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", 419 | "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", 420 | "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", 421 | "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", 422 | "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", 423 | "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", 424 | "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f", 425 | "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50", 426 | "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", 427 | "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", 428 | "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", 429 | "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff", 430 | "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", 431 | "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", 432 | "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", 433 | "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf", 434 | "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", 435 | "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", 436 | "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab", 437 | "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", 438 | "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" 439 | ], 440 | "markers": "python_version >= '3.7'", 441 | "version": "==2.1.5" 442 | }, 443 | "mastodon.py": { 444 | "hashes": [ 445 | "sha256:22bc7e060518ef2eaa69d911cde6e4baf56bed5ea0dd407392c49051a7ac526a", 446 | "sha256:4a64cb94abadd6add73e4b8eafdb5c466048fa5f638284fd2189034104d4687e" 447 | ], 448 | "index": "pypi", 449 | "version": "==1.8.1" 450 | }, 451 | "mdurl": { 452 | "hashes": [ 453 | "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", 454 | "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" 455 | ], 456 | "markers": "python_version >= '3.7'", 457 | "version": "==0.1.2" 458 | }, 459 | "mpmath": { 460 | "hashes": [ 461 | "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", 462 | "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" 463 | ], 464 | "version": "==1.3.0" 465 | }, 466 | "networkx": { 467 | "hashes": [ 468 | "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9", 469 | "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2" 470 | ], 471 | "markers": "python_version >= '3.10'", 472 | "version": "==3.3" 473 | }, 474 | "numba": { 475 | "hashes": [ 476 | "sha256:0594b3dfb369fada1f8bb2e3045cd6c61a564c62e50cf1f86b4666bc721b3450", 477 | "sha256:0b77aecf52040de2a1eb1d7e314497b9e56fba17466c80b457b971a25bb1576d", 478 | "sha256:0f68589740a8c38bb7dc1b938b55d1145244c8353078eea23895d4f82c8b9ec1", 479 | "sha256:1cce206a3b92836cdf26ef39d3a3242fec25e07f020cc4feec4c4a865e340569", 480 | "sha256:2801003caa263d1e8497fb84829a7ecfb61738a95f62bc05693fcf1733e978e4", 481 | "sha256:3476a4f641bfd58f35ead42f4dcaf5f132569c4647c6f1360ccf18ee4cda3990", 482 | "sha256:411df625372c77959570050e861981e9d196cc1da9aa62c3d6a836b5cc338966", 483 | "sha256:43727e7ad20b3ec23ee4fc642f5b61845c71f75dd2825b3c234390c6d8d64051", 484 | "sha256:4e0318ae729de6e5dbe64c75ead1a95eb01fabfe0e2ebed81ebf0344d32db0ae", 485 | "sha256:525ef3f820931bdae95ee5379c670d5c97289c6520726bc6937a4a7d4230ba24", 486 | "sha256:5bf68f4d69dd3a9f26a9b23548fa23e3bcb9042e2935257b471d2a8d3c424b7f", 487 | "sha256:649913a3758891c77c32e2d2a3bcbedf4a69f5fea276d11f9119677c45a422e8", 488 | "sha256:76f69132b96028d2774ed20415e8c528a34e3299a40581bae178f0994a2f370b", 489 | "sha256:7d80bce4ef7e65bf895c29e3889ca75a29ee01da80266a01d34815918e365835", 490 | "sha256:8c8b4477763cb1fbd86a3be7050500229417bf60867c93e131fd2626edb02238", 491 | "sha256:8d51ccd7008a83105ad6a0082b6a2b70f1142dc7cfd76deb8c5a862367eb8c86", 492 | "sha256:9712808e4545270291d76b9a264839ac878c5eb7d8b6e02c970dc0ac29bc8187", 493 | "sha256:97385a7f12212c4f4bc28f648720a92514bee79d7063e40ef66c2d30600fd18e", 494 | "sha256:990e395e44d192a12105eca3083b61307db7da10e093972ca285c85bef0963d6", 495 | "sha256:dd2842fac03be4e5324ebbbd4d2d0c8c0fc6e0df75c09477dd45b288a0777389", 496 | "sha256:f7ad1d217773e89a9845886401eaaab0a156a90aa2f179fdc125261fd1105096" 497 | ], 498 | "markers": "python_version >= '3.9'", 499 | "version": "==0.59.1" 500 | }, 501 | "numpy": { 502 | "hashes": [ 503 | "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", 504 | "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", 505 | "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", 506 | "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", 507 | "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", 508 | "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", 509 | "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea", 510 | "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c", 511 | "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", 512 | "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", 513 | "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be", 514 | "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", 515 | "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", 516 | "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", 517 | "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", 518 | "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd", 519 | "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c", 520 | "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", 521 | "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0", 522 | "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c", 523 | "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", 524 | "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", 525 | "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", 526 | "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6", 527 | "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", 528 | "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", 529 | "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30", 530 | "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", 531 | "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", 532 | "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", 533 | "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", 534 | "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", 535 | "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764", 536 | "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", 537 | "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3", 538 | "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f" 539 | ], 540 | "markers": "python_version >= '3.9'", 541 | "version": "==1.26.4" 542 | }, 543 | "nvidia-cublas-cu12": { 544 | "hashes": [ 545 | "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906", 546 | "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728" 547 | ], 548 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 549 | "version": "==12.1.3.1" 550 | }, 551 | "nvidia-cuda-cupti-cu12": { 552 | "hashes": [ 553 | "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4", 554 | "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e" 555 | ], 556 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 557 | "version": "==12.1.105" 558 | }, 559 | "nvidia-cuda-nvrtc-cu12": { 560 | "hashes": [ 561 | "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed", 562 | "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2" 563 | ], 564 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 565 | "version": "==12.1.105" 566 | }, 567 | "nvidia-cuda-runtime-cu12": { 568 | "hashes": [ 569 | "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40", 570 | "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344" 571 | ], 572 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 573 | "version": "==12.1.105" 574 | }, 575 | "nvidia-cudnn-cu12": { 576 | "hashes": [ 577 | "sha256:5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9" 578 | ], 579 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 580 | "version": "==8.9.2.26" 581 | }, 582 | "nvidia-cufft-cu12": { 583 | "hashes": [ 584 | "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56", 585 | "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253" 586 | ], 587 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 588 | "version": "==11.0.2.54" 589 | }, 590 | "nvidia-curand-cu12": { 591 | "hashes": [ 592 | "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a", 593 | "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0" 594 | ], 595 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 596 | "version": "==10.3.2.106" 597 | }, 598 | "nvidia-cusolver-cu12": { 599 | "hashes": [ 600 | "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5", 601 | "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd" 602 | ], 603 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 604 | "version": "==11.4.5.107" 605 | }, 606 | "nvidia-cusparse-cu12": { 607 | "hashes": [ 608 | "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a", 609 | "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c" 610 | ], 611 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 612 | "version": "==12.1.0.106" 613 | }, 614 | "nvidia-nccl-cu12": { 615 | "hashes": [ 616 | "sha256:057f6bf9685f75215d0c53bf3ac4a10b3e6578351de307abad9e18a99182af56", 617 | "sha256:1fc150d5c3250b170b29410ba682384b14581db722b2531b0d8d33c595f33d01" 618 | ], 619 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 620 | "version": "==2.20.5" 621 | }, 622 | "nvidia-nvjitlink-cu12": { 623 | "hashes": [ 624 | "sha256:c3401dc8543b52d3a8158007a0c1ab4e9c768fcbd24153a48c86972102197ddd", 625 | "sha256:d9714f27c1d0f0895cd8915c07a87a1d0029a0aa36acaf9156952ec2a8a12189" 626 | ], 627 | "markers": "python_version >= '3'", 628 | "version": "==12.5.40" 629 | }, 630 | "nvidia-nvtx-cu12": { 631 | "hashes": [ 632 | "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82", 633 | "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5" 634 | ], 635 | "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'", 636 | "version": "==12.1.105" 637 | }, 638 | "packaging": { 639 | "hashes": [ 640 | "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", 641 | "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" 642 | ], 643 | "markers": "python_version >= '3.7'", 644 | "version": "==24.0" 645 | }, 646 | "pandas": { 647 | "hashes": [ 648 | "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863", 649 | "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2", 650 | "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1", 651 | "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad", 652 | "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db", 653 | "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76", 654 | "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51", 655 | "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32", 656 | "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08", 657 | "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b", 658 | "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4", 659 | "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921", 660 | "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288", 661 | "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee", 662 | "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0", 663 | "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24", 664 | "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99", 665 | "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151", 666 | "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd", 667 | "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce", 668 | "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57", 669 | "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef", 670 | "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54", 671 | "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a", 672 | "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238", 673 | "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23", 674 | "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772", 675 | "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce", 676 | "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad" 677 | ], 678 | "markers": "python_version >= '3.9'", 679 | "version": "==2.2.2" 680 | }, 681 | "pillow": { 682 | "hashes": [ 683 | "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c", 684 | "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2", 685 | "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb", 686 | "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d", 687 | "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa", 688 | "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3", 689 | "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1", 690 | "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a", 691 | "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd", 692 | "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8", 693 | "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999", 694 | "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599", 695 | "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936", 696 | "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375", 697 | "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d", 698 | "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b", 699 | "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60", 700 | "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572", 701 | "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3", 702 | "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced", 703 | "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f", 704 | "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b", 705 | "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19", 706 | "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f", 707 | "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d", 708 | "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383", 709 | "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795", 710 | "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355", 711 | "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57", 712 | "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09", 713 | "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b", 714 | "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462", 715 | "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf", 716 | "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f", 717 | "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a", 718 | "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad", 719 | "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9", 720 | "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d", 721 | "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45", 722 | "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994", 723 | "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d", 724 | "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338", 725 | "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463", 726 | "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451", 727 | "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591", 728 | "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c", 729 | "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd", 730 | "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32", 731 | "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9", 732 | "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf", 733 | "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5", 734 | "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828", 735 | "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3", 736 | "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5", 737 | "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2", 738 | "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b", 739 | "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2", 740 | "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475", 741 | "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3", 742 | "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb", 743 | "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef", 744 | "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015", 745 | "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002", 746 | "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170", 747 | "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84", 748 | "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57", 749 | "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f", 750 | "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27", 751 | "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a" 752 | ], 753 | "markers": "python_version >= '3.8'", 754 | "version": "==10.3.0" 755 | }, 756 | "plotly": { 757 | "hashes": [ 758 | "sha256:68fc1901f098daeb233cc3dd44ec9dc31fb3ca4f4e53189344199c43496ed006", 759 | "sha256:859fdadbd86b5770ae2466e542b761b247d1c6b49daed765b95bb8c7063e7469" 760 | ], 761 | "markers": "python_version >= '3.8'", 762 | "version": "==5.22.0" 763 | }, 764 | "polars": { 765 | "hashes": [ 766 | "sha256:00f62dec6bf43a4e2a5db58b99bf0e79699fe761c80ae665868eaea5168f3bbb", 767 | "sha256:24b82441f93409e0e8abd6f427b029db102f02b8de328cee9a680f84b84e3736", 768 | "sha256:2d7567c9fd9d3b9aa93387ca9880d9e8f7acea3c0a0555c03d8c0c2f0715d43c", 769 | "sha256:67f2fe842262b7e1b9371edad21b760f6734d28b74c78dda88dff1bf031b9499", 770 | "sha256:86454ade5ed302bbf87f145cfcb1b14f7a5765a9440e448659e1f3dba6ac4e79", 771 | "sha256:87f43bce4d41abf8c8c5658d881e4b8378e5c61010a696bfea8b4106b908e916" 772 | ], 773 | "index": "pypi", 774 | "version": "==0.20.31" 775 | }, 776 | "protobuf": { 777 | "hashes": [ 778 | "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4", 779 | "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8", 780 | "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c", 781 | "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d", 782 | "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4", 783 | "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa", 784 | "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c", 785 | "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019", 786 | "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9", 787 | "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c", 788 | "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2" 789 | ], 790 | "markers": "python_version >= '3.8'", 791 | "version": "==4.25.3" 792 | }, 793 | "pyarrow": { 794 | "hashes": [ 795 | "sha256:06ebccb6f8cb7357de85f60d5da50e83507954af617d7b05f48af1621d331c9a", 796 | "sha256:0d07de3ee730647a600037bc1d7b7994067ed64d0eba797ac74b2bc77384f4c2", 797 | "sha256:0d27bf89dfc2576f6206e9cd6cf7a107c9c06dc13d53bbc25b0bd4556f19cf5f", 798 | "sha256:0d32000693deff8dc5df444b032b5985a48592c0697cb6e3071a5d59888714e2", 799 | "sha256:15fbb22ea96d11f0b5768504a3f961edab25eaf4197c341720c4a387f6c60315", 800 | "sha256:17e23b9a65a70cc733d8b738baa6ad3722298fa0c81d88f63ff94bf25eaa77b9", 801 | "sha256:185d121b50836379fe012753cf15c4ba9638bda9645183ab36246923875f8d1b", 802 | "sha256:18da9b76a36a954665ccca8aa6bd9f46c1145f79c0bb8f4f244f5f8e799bca55", 803 | "sha256:19741c4dbbbc986d38856ee7ddfdd6a00fc3b0fc2d928795b95410d38bb97d15", 804 | "sha256:25233642583bf658f629eb230b9bb79d9af4d9f9229890b3c878699c82f7d11e", 805 | "sha256:2e51ca1d6ed7f2e9d5c3c83decf27b0d17bb207a7dea986e8dc3e24f80ff7d6f", 806 | "sha256:2e73cfc4a99e796727919c5541c65bb88b973377501e39b9842ea71401ca6c1c", 807 | "sha256:31a1851751433d89a986616015841977e0a188662fcffd1a5677453f1df2de0a", 808 | "sha256:3b20bd67c94b3a2ea0a749d2a5712fc845a69cb5d52e78e6449bbd295611f3aa", 809 | "sha256:4740cc41e2ba5d641071d0ab5e9ef9b5e6e8c7611351a5cb7c1d175eaf43674a", 810 | "sha256:48be160782c0556156d91adbdd5a4a7e719f8d407cb46ae3bb4eaee09b3111bd", 811 | "sha256:8785bb10d5d6fd5e15d718ee1d1f914fe768bf8b4d1e5e9bf253de8a26cb1628", 812 | "sha256:98100e0268d04e0eec47b73f20b39c45b4006f3c4233719c3848aa27a03c1aef", 813 | "sha256:99f7549779b6e434467d2aa43ab2b7224dd9e41bdde486020bae198978c9e05e", 814 | "sha256:9cf389d444b0f41d9fe1444b70650fea31e9d52cfcb5f818b7888b91b586efff", 815 | "sha256:a33a64576fddfbec0a44112eaf844c20853647ca833e9a647bfae0582b2ff94b", 816 | "sha256:a8914cd176f448e09746037b0c6b3a9d7688cef451ec5735094055116857580c", 817 | "sha256:b04707f1979815f5e49824ce52d1dceb46e2f12909a48a6a753fe7cafbc44a0c", 818 | "sha256:b5f5705ab977947a43ac83b52ade3b881eb6e95fcc02d76f501d549a210ba77f", 819 | "sha256:ba8ac20693c0bb0bf4b238751d4409e62852004a8cf031c73b0e0962b03e45e3", 820 | "sha256:bf9251264247ecfe93e5f5a0cd43b8ae834f1e61d1abca22da55b20c788417f6", 821 | "sha256:d0ebea336b535b37eee9eee31761813086d33ed06de9ab6fc6aaa0bace7b250c", 822 | "sha256:ddf5aace92d520d3d2a20031d8b0ec27b4395cab9f74e07cc95edf42a5cc0147", 823 | "sha256:ddfe389a08ea374972bd4065d5f25d14e36b43ebc22fc75f7b951f24378bf0b5", 824 | "sha256:e1369af39587b794873b8a307cc6623a3b1194e69399af0efd05bb202195a5a7", 825 | "sha256:e6b6d3cd35fbb93b70ade1336022cc1147b95ec6af7d36906ca7fe432eb09710", 826 | "sha256:f07fdffe4fd5b15f5ec15c8b64584868d063bc22b86b46c9695624ca3505b7b4", 827 | "sha256:f2c5fb249caa17b94e2b9278b36a05ce03d3180e6da0c4c3b3ce5b2788f30eed", 828 | "sha256:f68f409e7b283c085f2da014f9ef81e885d90dcd733bd648cfba3ef265961848", 829 | "sha256:fbef391b63f708e103df99fbaa3acf9f671d77a183a07546ba2f2c297b361e83", 830 | "sha256:febde33305f1498f6df85e8020bca496d0e9ebf2093bab9e0f65e2b4ae2b3444" 831 | ], 832 | "markers": "python_version >= '3.8'", 833 | "version": "==16.1.0" 834 | }, 835 | "pydeck": { 836 | "hashes": [ 837 | "sha256:b3f75ba0d273fc917094fa61224f3f6076ca8752b93d46faf3bcfd9f9d59b038", 838 | "sha256:f74475ae637951d63f2ee58326757f8d4f9cd9f2a457cf42950715003e2cb605" 839 | ], 840 | "markers": "python_version >= '3.8'", 841 | "version": "==0.9.1" 842 | }, 843 | "pygments": { 844 | "hashes": [ 845 | "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", 846 | "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a" 847 | ], 848 | "markers": "python_version >= '3.8'", 849 | "version": "==2.18.0" 850 | }, 851 | "pynndescent": { 852 | "hashes": [ 853 | "sha256:0736291fcbbedfd5e0a3a280f71a63f8eb2f8bd9670d4c0b51ac1b4d081adf70", 854 | "sha256:9023dc5fea520a4e84d0633ae735db97d2509da927bfa86c897e61f3315473c7" 855 | ], 856 | "version": "==0.5.12" 857 | }, 858 | "python-dateutil": { 859 | "hashes": [ 860 | "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", 861 | "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" 862 | ], 863 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", 864 | "version": "==2.9.0.post0" 865 | }, 866 | "python-magic": { 867 | "hashes": [ 868 | "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b", 869 | "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3" 870 | ], 871 | "markers": "platform_system != 'Windows'", 872 | "version": "==0.4.27" 873 | }, 874 | "pytz": { 875 | "hashes": [ 876 | "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812", 877 | "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319" 878 | ], 879 | "version": "==2024.1" 880 | }, 881 | "pyyaml": { 882 | "hashes": [ 883 | "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", 884 | "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", 885 | "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", 886 | "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", 887 | "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", 888 | "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", 889 | "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", 890 | "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", 891 | "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", 892 | "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", 893 | "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", 894 | "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", 895 | "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", 896 | "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", 897 | "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", 898 | "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", 899 | "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", 900 | "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", 901 | "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", 902 | "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", 903 | "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", 904 | "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", 905 | "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", 906 | "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", 907 | "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", 908 | "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", 909 | "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", 910 | "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", 911 | "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", 912 | "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef", 913 | "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", 914 | "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", 915 | "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", 916 | "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", 917 | "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", 918 | "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", 919 | "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", 920 | "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", 921 | "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", 922 | "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", 923 | "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", 924 | "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", 925 | "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", 926 | "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", 927 | "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", 928 | "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", 929 | "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", 930 | "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", 931 | "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", 932 | "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", 933 | "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" 934 | ], 935 | "markers": "python_version >= '3.6'", 936 | "version": "==6.0.1" 937 | }, 938 | "referencing": { 939 | "hashes": [ 940 | "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c", 941 | "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de" 942 | ], 943 | "markers": "python_version >= '3.8'", 944 | "version": "==0.35.1" 945 | }, 946 | "regex": { 947 | "hashes": [ 948 | "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649", 949 | "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35", 950 | "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb", 951 | "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68", 952 | "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5", 953 | "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133", 954 | "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0", 955 | "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d", 956 | "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da", 957 | "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f", 958 | "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d", 959 | "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53", 960 | "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa", 961 | "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a", 962 | "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890", 963 | "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67", 964 | "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c", 965 | "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2", 966 | "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced", 967 | "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741", 968 | "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f", 969 | "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa", 970 | "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf", 971 | "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4", 972 | "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5", 973 | "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2", 974 | "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384", 975 | "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7", 976 | "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014", 977 | "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704", 978 | "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5", 979 | "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2", 980 | "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49", 981 | "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1", 982 | "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694", 983 | "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629", 984 | "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6", 985 | "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435", 986 | "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c", 987 | "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835", 988 | "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e", 989 | "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201", 990 | "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62", 991 | "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5", 992 | "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16", 993 | "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f", 994 | "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1", 995 | "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f", 996 | "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f", 997 | "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145", 998 | "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3", 999 | "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed", 1000 | "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143", 1001 | "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca", 1002 | "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9", 1003 | "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa", 1004 | "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850", 1005 | "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80", 1006 | "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe", 1007 | "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656", 1008 | "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388", 1009 | "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1", 1010 | "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294", 1011 | "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3", 1012 | "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d", 1013 | "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b", 1014 | "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40", 1015 | "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600", 1016 | "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c", 1017 | "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569", 1018 | "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456", 1019 | "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9", 1020 | "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb", 1021 | "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e", 1022 | "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f", 1023 | "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d", 1024 | "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a", 1025 | "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a", 1026 | "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796" 1027 | ], 1028 | "markers": "python_version >= '3.8'", 1029 | "version": "==2024.5.15" 1030 | }, 1031 | "requests": { 1032 | "hashes": [ 1033 | "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", 1034 | "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" 1035 | ], 1036 | "markers": "python_version >= '3.8'", 1037 | "version": "==2.32.3" 1038 | }, 1039 | "rich": { 1040 | "hashes": [ 1041 | "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222", 1042 | "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432" 1043 | ], 1044 | "markers": "python_full_version >= '3.7.0'", 1045 | "version": "==13.7.1" 1046 | }, 1047 | "rpds-py": { 1048 | "hashes": [ 1049 | "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee", 1050 | "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc", 1051 | "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc", 1052 | "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944", 1053 | "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20", 1054 | "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7", 1055 | "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4", 1056 | "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6", 1057 | "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6", 1058 | "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93", 1059 | "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633", 1060 | "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0", 1061 | "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360", 1062 | "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8", 1063 | "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139", 1064 | "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7", 1065 | "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a", 1066 | "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9", 1067 | "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26", 1068 | "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724", 1069 | "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72", 1070 | "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b", 1071 | "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09", 1072 | "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100", 1073 | "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3", 1074 | "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261", 1075 | "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3", 1076 | "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9", 1077 | "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b", 1078 | "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3", 1079 | "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de", 1080 | "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d", 1081 | "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e", 1082 | "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8", 1083 | "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff", 1084 | "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5", 1085 | "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c", 1086 | "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e", 1087 | "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e", 1088 | "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4", 1089 | "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8", 1090 | "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922", 1091 | "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338", 1092 | "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d", 1093 | "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8", 1094 | "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2", 1095 | "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72", 1096 | "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80", 1097 | "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644", 1098 | "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae", 1099 | "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163", 1100 | "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104", 1101 | "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d", 1102 | "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60", 1103 | "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a", 1104 | "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d", 1105 | "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07", 1106 | "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49", 1107 | "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10", 1108 | "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f", 1109 | "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2", 1110 | "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8", 1111 | "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7", 1112 | "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88", 1113 | "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65", 1114 | "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0", 1115 | "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909", 1116 | "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8", 1117 | "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c", 1118 | "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184", 1119 | "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397", 1120 | "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a", 1121 | "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346", 1122 | "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590", 1123 | "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333", 1124 | "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb", 1125 | "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74", 1126 | "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e", 1127 | "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d", 1128 | "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa", 1129 | "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f", 1130 | "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53", 1131 | "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1", 1132 | "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac", 1133 | "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0", 1134 | "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd", 1135 | "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611", 1136 | "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f", 1137 | "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c", 1138 | "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5", 1139 | "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab", 1140 | "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc", 1141 | "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43", 1142 | "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da", 1143 | "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac", 1144 | "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843", 1145 | "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e", 1146 | "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89", 1147 | "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64" 1148 | ], 1149 | "markers": "python_version >= '3.8'", 1150 | "version": "==0.18.1" 1151 | }, 1152 | "safetensors": { 1153 | "hashes": [ 1154 | "sha256:018b691383026a2436a22b648873ed11444a364324e7088b99cd2503dd828400", 1155 | "sha256:01e4b22e3284cd866edeabe4f4d896229495da457229408d2e1e4810c5187121", 1156 | "sha256:01feb3089e5932d7e662eda77c3ecc389f97c0883c4a12b5cfdc32b589a811c3", 1157 | "sha256:02318f01e332cc23ffb4f6716e05a492c5f18b1d13e343c49265149396284a44", 1158 | "sha256:02ef3a24face643456020536591fbd3c717c5abaa2737ec428ccbbc86dffa7a4", 1159 | "sha256:03a4447c784917c9bf01d8f2ac5080bc15c41692202cd5f406afba16629e84d6", 1160 | "sha256:084fc436e317f83f7071fc6a62ca1c513b2103db325cd09952914b50f51cf78f", 1161 | "sha256:0bf4f9d6323d9f86eef5567eabd88f070691cf031d4c0df27a40d3b4aaee755b", 1162 | "sha256:0d52c958dc210265157573f81d34adf54e255bc2b59ded6218500c9b15a750eb", 1163 | "sha256:0d5ffc6a80f715c30af253e0e288ad1cd97a3d0086c9c87995e5093ebc075e50", 1164 | "sha256:0d9cd8e1560dfc514b6d7859247dc6a86ad2f83151a62c577428d5102d872721", 1165 | "sha256:0dd37306546b58d3043eb044c8103a02792cc024b51d1dd16bd3dd1f334cb3ed", 1166 | "sha256:1139eb436fd201c133d03c81209d39ac57e129f5e74e34bb9ab60f8d9b726270", 1167 | "sha256:19bbdf95de2cf64f25cd614c5236c8b06eb2cfa47cbf64311f4b5d80224623a3", 1168 | "sha256:1ab6527a20586d94291c96e00a668fa03f86189b8a9defa2cdd34a1a01acc7d5", 1169 | "sha256:1b89381517891a7bb7d1405d828b2bf5d75528299f8231e9346b8eba092227f9", 1170 | "sha256:1f598b713cc1a4eb31d3b3203557ac308acf21c8f41104cdd74bf640c6e538e3", 1171 | "sha256:22d21760dc6ebae42e9c058d75aa9907d9f35e38f896e3c69ba0e7b213033856", 1172 | "sha256:22f3b5d65e440cec0de8edaa672efa888030802e11c09b3d6203bff60ebff05a", 1173 | "sha256:2a0deb16a1d3ea90c244ceb42d2c6c276059616be21a19ac7101aa97da448faf", 1174 | "sha256:2a1f4430cc0c9d6afa01214a4b3919d0a029637df8e09675ceef1ca3f0dfa0df", 1175 | "sha256:2d603846a8585b9432a0fd415db1d4c57c0f860eb4aea21f92559ff9902bae4d", 1176 | "sha256:2f85fc50c4e07a21e95c24e07460fe6f7e2859d0ce88092838352b798ce711c2", 1177 | "sha256:309b10dbcab63269ecbf0e2ca10ce59223bb756ca5d431ce9c9eeabd446569da", 1178 | "sha256:3615a96dd2dcc30eb66d82bc76cda2565f4f7bfa89fcb0e31ba3cea8a1a9ecbb", 1179 | "sha256:38e2a8666178224a51cca61d3cb4c88704f696eac8f72a49a598a93bbd8a4af9", 1180 | "sha256:393e6e391467d1b2b829c77e47d726f3b9b93630e6a045b1d1fca67dc78bf632", 1181 | "sha256:3f9cdca09052f585e62328c1c2923c70f46814715c795be65f0b93f57ec98a02", 1182 | "sha256:41a727a7f5e6ad9f1db6951adee21bbdadc632363d79dc434876369a17de6ad6", 1183 | "sha256:420a98f593ff9930f5822560d14c395ccbc57342ddff3b463bc0b3d6b1951550", 1184 | "sha256:446e9fe52c051aeab12aac63d1017e0f68a02a92a027b901c4f8e931b24e5397", 1185 | "sha256:455d538aa1aae4a8b279344a08136d3f16334247907b18a5c3c7fa88ef0d3c46", 1186 | "sha256:4f9bac020faba7f5dc481e881b14b6425265feabb5bfc552551d21189c0eddc3", 1187 | "sha256:53c4879b9c6bd7cd25d114ee0ef95420e2812e676314300624594940a8d6a91f", 1188 | "sha256:5757e4688f20df083e233b47de43845d1adb7e17b6cf7da5f8444416fc53828d", 1189 | "sha256:585c9ae13a205807b63bef8a37994f30c917ff800ab8a1ca9c9b5d73024f97ee", 1190 | "sha256:5d07cbca5b99babb692d76d8151bec46f461f8ad8daafbfd96b2fca40cadae65", 1191 | "sha256:5fc6775529fb9f0ce2266edd3e5d3f10aab068e49f765e11f6f2a63b5367021d", 1192 | "sha256:622afd28968ef3e9786562d352659a37de4481a4070f4ebac883f98c5836563e", 1193 | "sha256:6f9568f380f513a60139971169c4a358b8731509cc19112369902eddb33faa4d", 1194 | "sha256:70a5319ef409e7f88686a46607cbc3c428271069d8b770076feaf913664a07ac", 1195 | "sha256:74707624b81f1b7f2b93f5619d4a9f00934d5948005a03f2c1845ffbfff42212", 1196 | "sha256:7c4fa560ebd4522adddb71dcd25d09bf211b5634003f015a4b815b7647d62ebe", 1197 | "sha256:7de32d0d34b6623bb56ca278f90db081f85fb9c5d327e3c18fd23ac64f465768", 1198 | "sha256:840b7ac0eff5633e1d053cc9db12fdf56b566e9403b4950b2dc85393d9b88d67", 1199 | "sha256:840caf38d86aa7014fe37ade5d0d84e23dcfbc798b8078015831996ecbc206a3", 1200 | "sha256:8651c7299cbd8b4161a36cd6a322fa07d39cd23535b144d02f1c1972d0c62f3c", 1201 | "sha256:868ad1b6fc41209ab6bd12f63923e8baeb1a086814cb2e81a65ed3d497e0cf8f", 1202 | "sha256:88887f69f7a00cf02b954cdc3034ffb383b2303bc0ab481d4716e2da51ddc10e", 1203 | "sha256:89f9f17b0dacb913ed87d57afbc8aad85ea42c1085bd5de2f20d83d13e9fc4b2", 1204 | "sha256:8c496c5401c1b9c46d41a7688e8ff5b0310a3b9bae31ce0f0ae870e1ea2b8caf", 1205 | "sha256:8cf18888606dad030455d18f6c381720e57fc6a4170ee1966adb7ebc98d4d6a3", 1206 | "sha256:8d22c1a10dff3f64d0d68abb8298a3fd88ccff79f408a3e15b3e7f637ef5c980", 1207 | "sha256:90964917f5b0fa0fa07e9a051fbef100250c04d150b7026ccbf87a34a54012e0", 1208 | "sha256:9bfb92f82574d9e58401d79c70c716985dc049b635fef6eecbb024c79b2c46ad", 1209 | "sha256:9c6ad011c1b4e3acff058d6b090f1da8e55a332fbf84695cf3100c649cc452d1", 1210 | "sha256:a11c374eb63a9c16c5ed146457241182f310902bd2a9c18255781bb832b6748b", 1211 | "sha256:a7cef55929dcbef24af3eb40bedec35d82c3c2fa46338bb13ecf3c5720af8a61", 1212 | "sha256:a844cdb5d7cbc22f5f16c7e2a0271170750763c4db08381b7f696dbd2c78a361", 1213 | "sha256:ae7613a119a71a497d012ccc83775c308b9c1dab454806291427f84397d852fd", 1214 | "sha256:b1648568667f820b8c48317c7006221dc40aced1869908c187f493838a1362bc", 1215 | "sha256:b1e31be7945f66be23f4ec1682bb47faa3df34cb89fc68527de6554d3c4258a4", 1216 | "sha256:b277482120df46e27a58082df06a15aebda4481e30a1c21eefd0921ae7e03f65", 1217 | "sha256:b7ffba80aa49bd09195145a7fd233a7781173b422eeb995096f2b30591639517", 1218 | "sha256:b852e47eb08475c2c1bd8131207b405793bfc20d6f45aff893d3baaad449ed14", 1219 | "sha256:bb4f8c5d0358a31e9a08daeebb68f5e161cdd4018855426d3f0c23bb51087055", 1220 | "sha256:bbae3b4b9d997971431c346edbfe6e41e98424a097860ee872721e176040a893", 1221 | "sha256:befdf0167ad626f22f6aac6163477fcefa342224a22f11fdd05abb3995c1783c", 1222 | "sha256:c0acbe31340ab150423347e5b9cc595867d814244ac14218932a5cf1dd38eb39", 1223 | "sha256:c41e1893d1206aa7054029681778d9a58b3529d4c807002c156d58426c225173", 1224 | "sha256:c59d51f182c729f47e841510b70b967b0752039f79f1de23bcdd86462a9b09ee", 1225 | "sha256:cd6fff9e56df398abc5866b19a32124815b656613c1c5ec0f9350906fd798aac", 1226 | "sha256:cdd0a3b5da66e7f377474599814dbf5cbf135ff059cc73694de129b58a5e8a2c", 1227 | "sha256:cf476bca34e1340ee3294ef13e2c625833f83d096cfdf69a5342475602004f95", 1228 | "sha256:d0dd4a1db09db2dba0f94d15addc7e7cd3a7b0d393aa4c7518c39ae7374623c3", 1229 | "sha256:d1456f814655b224d4bf6e7915c51ce74e389b413be791203092b7ff78c936dd", 1230 | "sha256:d14d30c25897b2bf19b6fb5ff7e26cc40006ad53fd4a88244fdf26517d852dd7", 1231 | "sha256:d244bcafeb1bc06d47cfee71727e775bca88a8efda77a13e7306aae3813fa7e4", 1232 | "sha256:d8815b5e1dac85fc534a97fd339e12404db557878c090f90442247e87c8aeaea", 1233 | "sha256:d88b33980222085dd6001ae2cad87c6068e0991d4f5ccf44975d216db3b57376", 1234 | "sha256:d8c5093206ef4b198600ae484230402af6713dab1bd5b8e231905d754022bec7", 1235 | "sha256:d9c289f140a9ae4853fc2236a2ffc9a9f2d5eae0cb673167e0f1b8c18c0961ac", 1236 | "sha256:dcf5705cab159ce0130cd56057f5f3425023c407e170bca60b4868048bae64fd", 1237 | "sha256:e011cc162503c19f4b1fd63dfcddf73739c7a243a17dac09b78e57a00983ab35", 1238 | "sha256:e066e8861eef6387b7c772344d1fe1f9a72800e04ee9a54239d460c400c72aab", 1239 | "sha256:e0b2104df1579d6ba9052c0ae0e3137c9698b2d85b0645507e6fd1813b70931a", 1240 | "sha256:e375d975159ac534c7161269de24ddcd490df2157b55c1a6eeace6cbb56903f0", 1241 | "sha256:e4119532cd10dba04b423e0f86aecb96cfa5a602238c0aa012f70c3a40c44b50", 1242 | "sha256:e7dbbde64b6c534548696808a0e01276d28ea5773bc9a2dfb97a88cd3dffe3df", 1243 | "sha256:e9afd5358719f1b2cf425fad638fc3c887997d6782da317096877e5b15b2ce93", 1244 | "sha256:ec4b52ce9a396260eb9731eb6aea41a7320de22ed73a1042c2230af0212758ce", 1245 | "sha256:edb5698a7bc282089f64c96c477846950358a46ede85a1c040e0230344fdde10", 1246 | "sha256:ee463219d9ec6c2be1d331ab13a8e0cd50d2f32240a81d498266d77d07b7e71e", 1247 | "sha256:efcc860be094b8d19ac61b452ec635c7acb9afa77beb218b1d7784c6d41fe8ad", 1248 | "sha256:f5e6883af9a68c0028f70a4c19d5a6ab6238a379be36ad300a22318316c00cb0", 1249 | "sha256:f9650713b2cfa9537a2baf7dd9fee458b24a0aaaa6cafcea8bdd5fb2b8efdc34", 1250 | "sha256:faefeb3b81bdfb4e5a55b9bbdf3d8d8753f65506e1d67d03f5c851a6c87150e9", 1251 | "sha256:fb9c65bd82f9ef3ce4970dc19ee86be5f6f93d032159acf35e663c6bea02b237", 1252 | "sha256:fe746d03ed8d193674a26105e4f0fe6c726f5bb602ffc695b409eaf02f04763d", 1253 | "sha256:fef5d70683643618244a4f5221053567ca3e77c2531e42ad48ae05fae909f542" 1254 | ], 1255 | "markers": "python_version >= '3.7'", 1256 | "version": "==0.4.3" 1257 | }, 1258 | "scikit-learn": { 1259 | "hashes": [ 1260 | "sha256:057b991ac64b3e75c9c04b5f9395eaf19a6179244c089afdebaad98264bff37c", 1261 | "sha256:118a8d229a41158c9f90093e46b3737120a165181a1b58c03461447aa4657415", 1262 | "sha256:12e40ac48555e6b551f0a0a5743cc94cc5a765c9513fe708e01f0aa001da2801", 1263 | "sha256:174beb56e3e881c90424e21f576fa69c4ffcf5174632a79ab4461c4c960315ac", 1264 | "sha256:1b94d6440603752b27842eda97f6395f570941857456c606eb1d638efdb38184", 1265 | "sha256:1f77547165c00625551e5c250cefa3f03f2fc92c5e18668abd90bfc4be2e0bff", 1266 | "sha256:261fe334ca48f09ed64b8fae13f9b46cc43ac5f580c4a605cbb0a517456c8f71", 1267 | "sha256:2a65af2d8a6cce4e163a7951a4cfbfa7fceb2d5c013a4b593686c7f16445cf9d", 1268 | "sha256:2c75ea812cd83b1385bbfa94ae971f0d80adb338a9523f6bbcb5e0b0381151d4", 1269 | "sha256:40fb7d4a9a2db07e6e0cae4dc7bdbb8fada17043bac24104d8165e10e4cff1a2", 1270 | "sha256:460806030c666addee1f074788b3978329a5bfdc9b7d63e7aad3f6d45c67a210", 1271 | "sha256:47132440050b1c5beb95f8ba0b2402bbd9057ce96ec0ba86f2f445dd4f34df67", 1272 | "sha256:4c0c56c3005f2ec1db3787aeaabefa96256580678cec783986836fc64f8ff622", 1273 | "sha256:789e3db01c750ed6d496fa2db7d50637857b451e57bcae863bff707c1247bef7", 1274 | "sha256:855fc5fa8ed9e4f08291203af3d3e5fbdc4737bd617a371559aaa2088166046e", 1275 | "sha256:a03b09f9f7f09ffe8c5efffe2e9de1196c696d811be6798ad5eddf323c6f4d40", 1276 | "sha256:a3a10e1d9e834e84d05e468ec501a356226338778769317ee0b84043c0d8fb06", 1277 | "sha256:a90c5da84829a0b9b4bf00daf62754b2be741e66b5946911f5bdfaa869fcedd6", 1278 | "sha256:d82c2e573f0f2f2f0be897e7a31fcf4e73869247738ab8c3ce7245549af58ab8", 1279 | "sha256:df8ccabbf583315f13160a4bb06037bde99ea7d8211a69787a6b7c5d4ebb6fc3", 1280 | "sha256:f405c4dae288f5f6553b10c4ac9ea7754d5180ec11e296464adb5d6ac68b6ef5" 1281 | ], 1282 | "markers": "python_version >= '3.9'", 1283 | "version": "==1.5.0" 1284 | }, 1285 | "scipy": { 1286 | "hashes": [ 1287 | "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", 1288 | "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", 1289 | "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", 1290 | "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", 1291 | "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", 1292 | "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", 1293 | "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", 1294 | "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", 1295 | "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", 1296 | "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", 1297 | "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", 1298 | "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", 1299 | "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", 1300 | "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", 1301 | "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", 1302 | "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", 1303 | "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", 1304 | "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", 1305 | "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", 1306 | "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", 1307 | "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", 1308 | "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", 1309 | "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", 1310 | "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", 1311 | "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f" 1312 | ], 1313 | "markers": "python_version >= '3.9'", 1314 | "version": "==1.13.1" 1315 | }, 1316 | "sentence-transformers": { 1317 | "hashes": [ 1318 | "sha256:52d4101654ed107a28e9fa5110fce399084b55e7838fd8256471353ddc299033", 1319 | "sha256:9bf851b688b796e5fb06c920921efd5e5e05ee616e85cb3026fbdfe4dcf15bf3" 1320 | ], 1321 | "markers": "python_full_version >= '3.8.0'", 1322 | "version": "==3.0.0" 1323 | }, 1324 | "six": { 1325 | "hashes": [ 1326 | "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", 1327 | "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" 1328 | ], 1329 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", 1330 | "version": "==1.16.0" 1331 | }, 1332 | "smmap": { 1333 | "hashes": [ 1334 | "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62", 1335 | "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da" 1336 | ], 1337 | "markers": "python_version >= '3.7'", 1338 | "version": "==5.0.1" 1339 | }, 1340 | "streamlit": { 1341 | "hashes": [ 1342 | "sha256:679d55bb6189743f606abf0696623df0bfd223a6d0c8d96b8d60678d4891d2d6", 1343 | "sha256:e17d1d86830a0d7687c37faf2fe47bffa752d0c95a306e96d7749bd3faa72a5b" 1344 | ], 1345 | "index": "pypi", 1346 | "version": "==1.35.0" 1347 | }, 1348 | "sympy": { 1349 | "hashes": [ 1350 | "sha256:2877b03f998cd8c08f07cd0de5b767119cd3ef40d09f41c30d722f6686b0fb88", 1351 | "sha256:9b2cbc7f1a640289430e13d2a56f02f867a1da0190f2f99d8968c2f74da0e515" 1352 | ], 1353 | "markers": "python_version >= '3.8'", 1354 | "version": "==1.12.1" 1355 | }, 1356 | "tenacity": { 1357 | "hashes": [ 1358 | "sha256:3649f6443dbc0d9b01b9d8020a9c4ec7a1ff5f6f3c6c8a036ef371f573fe9185", 1359 | "sha256:953d4e6ad24357bceffbc9707bc74349aca9d245f68eb65419cf0c249a1949a2" 1360 | ], 1361 | "markers": "python_version >= '3.8'", 1362 | "version": "==8.3.0" 1363 | }, 1364 | "threadpoolctl": { 1365 | "hashes": [ 1366 | "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107", 1367 | "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467" 1368 | ], 1369 | "markers": "python_version >= '3.8'", 1370 | "version": "==3.5.0" 1371 | }, 1372 | "tokenizers": { 1373 | "hashes": [ 1374 | "sha256:01d62812454c188306755c94755465505836fd616f75067abcae529c35edeb57", 1375 | "sha256:02e81bf089ebf0e7f4df34fa0207519f07e66d8491d963618252f2e0729e0b46", 1376 | "sha256:04ce49e82d100594715ac1b2ce87d1a36e61891a91de774755f743babcd0dd52", 1377 | "sha256:07f9295349bbbcedae8cefdbcfa7f686aa420be8aca5d4f7d1ae6016c128c0c5", 1378 | "sha256:08a44864e42fa6d7d76d7be4bec62c9982f6f6248b4aa42f7302aa01e0abfd26", 1379 | "sha256:0b5ca92bfa717759c052e345770792d02d1f43b06f9e790ca0a1db62838816f3", 1380 | "sha256:0b9394bd204842a2a1fd37fe29935353742be4a3460b6ccbaefa93f58a8df43d", 1381 | "sha256:0bcce02bf1ad9882345b34d5bd25ed4949a480cf0e656bbd468f4d8986f7a3f1", 1382 | "sha256:0e64bfde9a723274e9a71630c3e9494ed7b4c0f76a1faacf7fe294cd26f7ae7c", 1383 | "sha256:10a707cc6c4b6b183ec5dbfc5c34f3064e18cf62b4a938cb41699e33a99e03c1", 1384 | "sha256:16baac68651701364b0289979ecec728546133e8e8fe38f66fe48ad07996b88b", 1385 | "sha256:1de5bc8652252d9357a666e609cb1453d4f8e160eb1fb2830ee369dd658e8975", 1386 | "sha256:1f0360cbea28ea99944ac089c00de7b2e3e1c58f479fb8613b6d8d511ce98267", 1387 | "sha256:2e8a3dd055e515df7054378dc9d6fa8c8c34e1f32777fb9a01fea81496b3f9d3", 1388 | "sha256:3174c76efd9d08f836bfccaca7cfec3f4d1c0a4cf3acbc7236ad577cc423c840", 1389 | "sha256:35583cd46d16f07c054efd18b5d46af4a2f070a2dd0a47914e66f3ff5efb2b1e", 1390 | "sha256:39c1ec76ea1027438fafe16ecb0fb84795e62e9d643444c1090179e63808c69d", 1391 | "sha256:3b11853f17b54c2fe47742c56d8a33bf49ce31caf531e87ac0d7d13d327c9334", 1392 | "sha256:427c4f0f3df9109314d4f75b8d1f65d9477033e67ffaec4bca53293d3aca286d", 1393 | "sha256:43350270bfc16b06ad3f6f07eab21f089adb835544417afda0f83256a8bf8b75", 1394 | "sha256:453e4422efdfc9c6b6bf2eae00d5e323f263fff62b29a8c9cd526c5003f3f642", 1395 | "sha256:4692ab92f91b87769d950ca14dbb61f8a9ef36a62f94bad6c82cc84a51f76f6a", 1396 | "sha256:4ad23d37d68cf00d54af184586d79b84075ada495e7c5c0f601f051b162112dc", 1397 | "sha256:4f3fefdc0446b1a1e6d81cd4c07088ac015665d2e812f6dbba4a06267d1a2c95", 1398 | "sha256:56ae39d4036b753994476a1b935584071093b55c7a72e3b8288e68c313ca26e7", 1399 | "sha256:5c88d1481f1882c2e53e6bb06491e474e420d9ac7bdff172610c4f9ad3898059", 1400 | "sha256:61b7fe8886f2e104d4caf9218b157b106207e0f2a4905c9c7ac98890688aabeb", 1401 | "sha256:621d670e1b1c281a1c9698ed89451395d318802ff88d1fc1accff0867a06f153", 1402 | "sha256:6258c2ef6f06259f70a682491c78561d492e885adeaf9f64f5389f78aa49a051", 1403 | "sha256:6309271f57b397aa0aff0cbbe632ca9d70430839ca3178bf0f06f825924eca22", 1404 | "sha256:638e43936cc8b2cbb9f9d8dde0fe5e7e30766a3318d2342999ae27f68fdc9bd6", 1405 | "sha256:63c38f45d8f2a2ec0f3a20073cccb335b9f99f73b3c69483cd52ebc75369d8a1", 1406 | "sha256:670b802d4d82bbbb832ddb0d41df7015b3e549714c0e77f9bed3e74d42400fbe", 1407 | "sha256:6852c5b2a853b8b0ddc5993cd4f33bfffdca4fcc5d52f89dd4b8eada99379285", 1408 | "sha256:6b2da5c32ed869bebd990c9420df49813709e953674c0722ff471a116d97b22d", 1409 | "sha256:6c330c0eb815d212893c67a032e9dc1b38a803eccb32f3e8172c19cc69fbb439", 1410 | "sha256:6f8a20266e695ec9d7a946a019c1d5ca4eddb6613d4f466888eee04f16eedb85", 1411 | "sha256:706a37cc5332f85f26efbe2bdc9ef8a9b372b77e4645331a405073e4b3a8c1c6", 1412 | "sha256:71e3ec71f0e78780851fef28c2a9babe20270404c921b756d7c532d280349214", 1413 | "sha256:72791f9bb1ca78e3ae525d4782e85272c63faaef9940d92142aa3eb79f3407a3", 1414 | "sha256:76951121890fea8330d3a0df9a954b3f2a37e3ec20e5b0530e9a0044ca2e11fe", 1415 | "sha256:78e769eb3b2c79687d9cb0f89ef77223e8e279b75c0a968e637ca7043a84463f", 1416 | "sha256:7c9d5b6c0e7a1e979bec10ff960fae925e947aab95619a6fdb4c1d8ff3708ce3", 1417 | "sha256:7fb297edec6c6841ab2e4e8f357209519188e4a59b557ea4fafcf4691d1b4c98", 1418 | "sha256:7ff898780a155ea053f5d934925f3902be2ed1f4d916461e1a93019cc7250837", 1419 | "sha256:82c8b8063de6c0468f08e82c4e198763e7b97aabfe573fd4cf7b33930ca4df77", 1420 | "sha256:85aa3ab4b03d5e99fdd31660872249df5e855334b6c333e0bc13032ff4469c4a", 1421 | "sha256:89183e55fb86e61d848ff83753f64cded119f5d6e1f553d14ffee3700d0a4a49", 1422 | "sha256:8a6298bde623725ca31c9035a04bf2ef63208d266acd2bed8c2cb7d2b7d53ce6", 1423 | "sha256:8b01afb7193d47439f091cd8f070a1ced347ad0f9144952a30a41836902fe09e", 1424 | "sha256:952078130b3d101e05ecfc7fc3640282d74ed26bcf691400f872563fca15ac97", 1425 | "sha256:952b80dac1a6492170f8c2429bd11fcaa14377e097d12a1dbe0ef2fb2241e16c", 1426 | "sha256:9620b78e0b2d52ef07b0d428323fb34e8ea1219c5eac98c2596311f20f1f9266", 1427 | "sha256:9ed240c56b4403e22b9584ee37d87b8bfa14865134e3e1c3fb4b2c42fafd3256", 1428 | "sha256:a179856d1caee06577220ebcfa332af046d576fb73454b8f4d4b0ba8324423ea", 1429 | "sha256:a2b718f316b596f36e1dae097a7d5b91fc5b85e90bf08b01ff139bd8953b25af", 1430 | "sha256:ac11016d0a04aa6487b1513a3a36e7bee7eec0e5d30057c9c0408067345c48d2", 1431 | "sha256:ad57d59341710b94a7d9dbea13f5c1e7d76fd8d9bcd944a7a6ab0b0da6e0cc66", 1432 | "sha256:b07c538ba956843833fee1190cf769c60dc62e1cf934ed50d77d5502194d63b1", 1433 | "sha256:b279ab506ec4445166ac476fb4d3cc383accde1ea152998509a94d82547c8e2a", 1434 | "sha256:b2edbc75744235eea94d595a8b70fe279dd42f3296f76d5a86dde1d46e35f574", 1435 | "sha256:b342d2ce8fc8d00f376af068e3274e2e8649562e3bc6ae4a67784ded6b99428d", 1436 | "sha256:b4399b59d1af5645bcee2072a463318114c39b8547437a7c2d6a186a1b5a0e2d", 1437 | "sha256:b4c89aa46c269e4e70c4d4f9d6bc644fcc39bb409cb2a81227923404dd6f5227", 1438 | "sha256:b70bfbe3a82d3e3fb2a5e9b22a39f8d1740c96c68b6ace0086b39074f08ab89a", 1439 | "sha256:b82931fa619dbad979c0ee8e54dd5278acc418209cc897e42fac041f5366d626", 1440 | "sha256:bac0b0eb952412b0b196ca7a40e7dce4ed6f6926489313414010f2e6b9ec2adf", 1441 | "sha256:bb9dfe7dae85bc6119d705a76dc068c062b8b575abe3595e3c6276480e67e3f1", 1442 | "sha256:bcd266ae85c3d39df2f7e7d0e07f6c41a55e9a3123bb11f854412952deacd828", 1443 | "sha256:bea6f9947e9419c2fda21ae6c32871e3d398cba549b93f4a65a2d369662d9403", 1444 | "sha256:c27b99889bd58b7e301468c0838c5ed75e60c66df0d4db80c08f43462f82e0d3", 1445 | "sha256:c2a0d47a89b48d7daa241e004e71fb5a50533718897a4cd6235cb846d511a478", 1446 | "sha256:c5c2ff13d157afe413bf7e25789879dd463e5a4abfb529a2d8f8473d8042e28f", 1447 | "sha256:c85cf76561fbd01e0d9ea2d1cbe711a65400092bc52b5242b16cfd22e51f0c58", 1448 | "sha256:ca407133536f19bdec44b3da117ef0d12e43f6d4b56ac4c765f37eca501c7bda", 1449 | "sha256:cbf001afbbed111a79ca47d75941e9e5361297a87d186cbfc11ed45e30b5daba", 1450 | "sha256:ce05fde79d2bc2e46ac08aacbc142bead21614d937aac950be88dc79f9db9022", 1451 | "sha256:d16ff18907f4909dca9b076b9c2d899114dd6abceeb074eca0c93e2353f943aa", 1452 | "sha256:d26194ef6c13302f446d39972aaa36a1dda6450bc8949f5eb4c27f51191375bd", 1453 | "sha256:d8c5d59d7b59885eab559d5bc082b2985555a54cda04dda4c65528d90ad252ad", 1454 | "sha256:d924204a3dbe50b75630bd16f821ebda6a5f729928df30f582fb5aade90c818a", 1455 | "sha256:dadc509cc8a9fe460bd274c0e16ac4184d0958117cf026e0ea8b32b438171594", 1456 | "sha256:dd26e3afe8a7b61422df3176e06664503d3f5973b94f45d5c45987e1cb711876", 1457 | "sha256:ddf672ed719b4ed82b51499100f5417d7d9f6fb05a65e232249268f35de5ed14", 1458 | "sha256:dfedf31824ca4915b511b03441784ff640378191918264268e6923da48104acc", 1459 | "sha256:e28cab1582e0eec38b1f38c1c1fb2e56bce5dc180acb1724574fc5f47da2a4fe", 1460 | "sha256:e742d76ad84acbdb1a8e4694f915fe59ff6edc381c97d6dfdd054954e3478ad4", 1461 | "sha256:e83a31c9cf181a0a3ef0abad2b5f6b43399faf5da7e696196ddd110d332519ee", 1462 | "sha256:e8d1ed93beda54bbd6131a2cb363a576eac746d5c26ba5b7556bc6f964425594", 1463 | "sha256:e8ff5b90eabdcdaa19af697885f70fe0b714ce16709cf43d4952f1f85299e73a", 1464 | "sha256:ec11802450a2487cdf0e634b750a04cbdc1c4d066b97d94ce7dd2cb51ebb325b", 1465 | "sha256:ecb2651956eea2aa0a2d099434134b1b68f1c31f9a5084d6d53f08ed43d45ff2", 1466 | "sha256:ed69af290c2b65169f0ba9034d1dc39a5db9459b32f1dd8b5f3f32a3fcf06eab", 1467 | "sha256:eddd5783a4a6309ce23432353cdb36220e25cbb779bfa9122320666508b44b88", 1468 | "sha256:ee59e6680ed0fdbe6b724cf38bd70400a0c1dd623b07ac729087270caeac88e3", 1469 | "sha256:f03727225feaf340ceeb7e00604825addef622d551cbd46b7b775ac834c1e1c4", 1470 | "sha256:f3bbb7a0c5fcb692950b041ae11067ac54826204318922da754f908d95619fbc", 1471 | "sha256:f8a9c828277133af13f3859d1b6bf1c3cb6e9e1637df0e45312e6b7c2e622b1f", 1472 | "sha256:f97660f6c43efd3e0bfd3f2e3e5615bf215680bad6ee3d469df6454b8c6e8256", 1473 | "sha256:f9939ca7e58c2758c01b40324a59c034ce0cebad18e0d4563a9b1beab3018243" 1474 | ], 1475 | "markers": "python_version >= '3.7'", 1476 | "version": "==0.19.1" 1477 | }, 1478 | "toml": { 1479 | "hashes": [ 1480 | "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", 1481 | "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" 1482 | ], 1483 | "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'", 1484 | "version": "==0.10.2" 1485 | }, 1486 | "toolz": { 1487 | "hashes": [ 1488 | "sha256:d22731364c07d72eea0a0ad45bafb2c2937ab6fd38a3507bf55eae8744aa7d85", 1489 | "sha256:ecca342664893f177a13dac0e6b41cbd8ac25a358e5f215316d43e2100224f4d" 1490 | ], 1491 | "markers": "python_version >= '3.7'", 1492 | "version": "==0.12.1" 1493 | }, 1494 | "torch": { 1495 | "hashes": [ 1496 | "sha256:09c81c5859a5b819956c6925a405ef1cdda393c9d8a01ce3851453f699d3358c", 1497 | "sha256:1bf023aa20902586f614f7682fedfa463e773e26c58820b74158a72470259459", 1498 | "sha256:20572f426965dd8a04e92a473d7e445fa579e09943cc0354f3e6fef6130ce061", 1499 | "sha256:493d54ee2f9df100b5ce1d18c96dbb8d14908721f76351e908c9d2622773a788", 1500 | "sha256:4fb27b35dbb32303c2927da86e27b54a92209ddfb7234afb1949ea2b3effffea", 1501 | "sha256:5515503a193781fd1b3f5c474e89c9dfa2faaa782b2795cc4a7ab7e67de923f6", 1502 | "sha256:6ae9f64b09516baa4ef890af0672dc981c20b1f0d829ce115d4420a247e88fba", 1503 | "sha256:729804e97b7cf19ae9ab4181f91f5e612af07956f35c8b2c8e9d9f3596a8e877", 1504 | "sha256:758ef938de87a2653bba74b91f703458c15569f1562bf4b6c63c62d9c5a0c1f5", 1505 | "sha256:760f8bedff506ce9e6e103498f9b1e9e15809e008368594c3a66bf74a8a51380", 1506 | "sha256:a306c87a3eead1ed47457822c01dfbd459fe2920f2d38cbdf90de18f23f72542", 1507 | "sha256:b0de2bdc0486ea7b14fc47ff805172df44e421a7318b7c4d92ef589a75d27410", 1508 | "sha256:bce43af735c3da16cc14c7de2be7ad038e2fbf75654c2e274e575c6c05772ace", 1509 | "sha256:cd0dc498b961ab19cb3f8dbf0c6c50e244f2f37dbfa05754ab44ea057c944ef9", 1510 | "sha256:d24e328226d8e2af7cf80fcb1d2f1d108e0de32777fab4aaa2b37b9765d8be73", 1511 | "sha256:d8ea5a465dbfd8501f33c937d1f693176c9aef9d1c1b0ca1d44ed7b0a18c52ac", 1512 | "sha256:dca986214267b34065a79000cee54232e62b41dff1ec2cab9abc3fc8b3dee0ad", 1513 | "sha256:e05f836559251e4096f3786ee99f4a8cbe67bc7fbedba8ad5e799681e47c5e80", 1514 | "sha256:e65ba85ae292909cde0dde6369826d51165a3fc8823dc1854cd9432d7f79b932", 1515 | "sha256:f9b98bf1a3c8af2d4c41f0bf1433920900896c446d1ddc128290ff146d1eb4bd" 1516 | ], 1517 | "markers": "python_full_version >= '3.8.0'", 1518 | "version": "==2.3.0" 1519 | }, 1520 | "tornado": { 1521 | "hashes": [ 1522 | "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0", 1523 | "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63", 1524 | "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263", 1525 | "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052", 1526 | "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f", 1527 | "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee", 1528 | "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78", 1529 | "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579", 1530 | "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212", 1531 | "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e", 1532 | "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2" 1533 | ], 1534 | "markers": "python_version >= '3.8'", 1535 | "version": "==6.4" 1536 | }, 1537 | "tqdm": { 1538 | "hashes": [ 1539 | "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644", 1540 | "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb" 1541 | ], 1542 | "markers": "python_version >= '3.7'", 1543 | "version": "==4.66.4" 1544 | }, 1545 | "transformers": { 1546 | "hashes": [ 1547 | "sha256:05555d20e43f808de1ef211ab64803cdb513170cef70d29a888b589caebefc67", 1548 | "sha256:80a4db216533d573e9cc7388646c31ed9480918feb7c55eb211249cb23567f87" 1549 | ], 1550 | "markers": "python_full_version >= '3.8.0'", 1551 | "version": "==4.41.2" 1552 | }, 1553 | "typing-extensions": { 1554 | "hashes": [ 1555 | "sha256:6024b58b69089e5a89c347397254e35f1bf02a907728ec7fee9bf0fe837d203a", 1556 | "sha256:915f5e35ff76f56588223f15fdd5938f9a1cf9195c0de25130c627e4d597f6d1" 1557 | ], 1558 | "markers": "python_version >= '3.8'", 1559 | "version": "==4.12.1" 1560 | }, 1561 | "tzdata": { 1562 | "hashes": [ 1563 | "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd", 1564 | "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252" 1565 | ], 1566 | "markers": "python_version >= '2'", 1567 | "version": "==2024.1" 1568 | }, 1569 | "umap-learn": { 1570 | "hashes": [ 1571 | "sha256:5b3917a862c23ba0fc83bfcd67a7b719dec85b3d9c01fdc7d894cce455df4e03", 1572 | "sha256:881cc0c2ee845b790bf0455aa1664f9f68b838d9d0fe12a1291b85c5a559c913" 1573 | ], 1574 | "version": "==0.5.6" 1575 | }, 1576 | "urllib3": { 1577 | "hashes": [ 1578 | "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", 1579 | "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" 1580 | ], 1581 | "markers": "python_version >= '3.8'", 1582 | "version": "==2.2.1" 1583 | }, 1584 | "watchdog": { 1585 | "hashes": [ 1586 | "sha256:0144c0ea9997b92615af1d94afc0c217e07ce2c14912c7b1a5731776329fcfc7", 1587 | "sha256:03e70d2df2258fb6cb0e95bbdbe06c16e608af94a3ffbd2b90c3f1e83eb10767", 1588 | "sha256:093b23e6906a8b97051191a4a0c73a77ecc958121d42346274c6af6520dec175", 1589 | "sha256:123587af84260c991dc5f62a6e7ef3d1c57dfddc99faacee508c71d287248459", 1590 | "sha256:17e32f147d8bf9657e0922c0940bcde863b894cd871dbb694beb6704cfbd2fb5", 1591 | "sha256:206afc3d964f9a233e6ad34618ec60b9837d0582b500b63687e34011e15bb429", 1592 | "sha256:4107ac5ab936a63952dea2a46a734a23230aa2f6f9db1291bf171dac3ebd53c6", 1593 | "sha256:4513ec234c68b14d4161440e07f995f231be21a09329051e67a2118a7a612d2d", 1594 | "sha256:611be3904f9843f0529c35a3ff3fd617449463cb4b73b1633950b3d97fa4bfb7", 1595 | "sha256:62c613ad689ddcb11707f030e722fa929f322ef7e4f18f5335d2b73c61a85c28", 1596 | "sha256:667f3c579e813fcbad1b784db7a1aaa96524bed53437e119f6a2f5de4db04235", 1597 | "sha256:6e8c70d2cd745daec2a08734d9f63092b793ad97612470a0ee4cbb8f5f705c57", 1598 | "sha256:7577b3c43e5909623149f76b099ac49a1a01ca4e167d1785c76eb52fa585745a", 1599 | "sha256:998d2be6976a0ee3a81fb8e2777900c28641fb5bfbd0c84717d89bca0addcdc5", 1600 | "sha256:a3c2c317a8fb53e5b3d25790553796105501a235343f5d2bf23bb8649c2c8709", 1601 | "sha256:ab998f567ebdf6b1da7dc1e5accfaa7c6992244629c0fdaef062f43249bd8dee", 1602 | "sha256:ac7041b385f04c047fcc2951dc001671dee1b7e0615cde772e84b01fbf68ee84", 1603 | "sha256:bca36be5707e81b9e6ce3208d92d95540d4ca244c006b61511753583c81c70dd", 1604 | "sha256:c9904904b6564d4ee8a1ed820db76185a3c96e05560c776c79a6ce5ab71888ba", 1605 | "sha256:cad0bbd66cd59fc474b4a4376bc5ac3fc698723510cbb64091c2a793b18654db", 1606 | "sha256:d10a681c9a1d5a77e75c48a3b8e1a9f2ae2928eda463e8d33660437705659682", 1607 | "sha256:d4925e4bf7b9bddd1c3de13c9b8a2cdb89a468f640e66fbfabaf735bd85b3e35", 1608 | "sha256:d7b9f5f3299e8dd230880b6c55504a1f69cf1e4316275d1b215ebdd8187ec88d", 1609 | "sha256:da2dfdaa8006eb6a71051795856bedd97e5b03e57da96f98e375682c48850645", 1610 | "sha256:dddba7ca1c807045323b6af4ff80f5ddc4d654c8bce8317dde1bd96b128ed253", 1611 | "sha256:e7921319fe4430b11278d924ef66d4daa469fafb1da679a2e48c935fa27af193", 1612 | "sha256:e93f451f2dfa433d97765ca2634628b789b49ba8b504fdde5837cdcf25fdb53b", 1613 | "sha256:eebaacf674fa25511e8867028d281e602ee6500045b57f43b08778082f7f8b44", 1614 | "sha256:ef0107bbb6a55f5be727cfc2ef945d5676b97bffb8425650dadbb184be9f9a2b", 1615 | "sha256:f0de0f284248ab40188f23380b03b59126d1479cd59940f2a34f8852db710625", 1616 | "sha256:f27279d060e2ab24c0aa98363ff906d2386aa6c4dc2f1a374655d4e02a6c5e5e", 1617 | "sha256:f8affdf3c0f0466e69f5b3917cdd042f89c8c63aebdb9f7c078996f607cdb0f5" 1618 | ], 1619 | "markers": "platform_system != 'Darwin'", 1620 | "version": "==4.0.1" 1621 | }, 1622 | "webencodings": { 1623 | "hashes": [ 1624 | "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", 1625 | "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" 1626 | ], 1627 | "version": "==0.5.1" 1628 | } 1629 | }, 1630 | "develop": {} 1631 | } 1632 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mastodon Bookmark Search 2 | 3 | A simple web application based on Streamlit that allows you to search and explore your Mastodon bookmarks. 4 | 5 | ## Usage 6 | 7 | 1. To install the dependencies, run 8 | 9 | ```bash 10 | pipenv install 11 | ``` 12 | 13 | Currently, the dependencies are locked for Python 3.10 on Linux. If you are on a different version or platform and pipenv fails, try deleting the virtual environment (with `pipenv --rm`), delete (or rename) _`Pipfile.lock`_, and then run `pipenv install` again. 14 | 15 | 2. Set up credentials for your Mastodon server with 16 | 17 | ```bash 18 | pipenv run python ingest_bookmarks.py login 19 | ``` 20 | 21 | 3. Import your bookmarks with 22 | 23 | ```bash 24 | pipenv run python ingest_bookmarks.py ingest 25 | ``` 26 | 27 | 4. Run the web app with 28 | 29 | ```bash 30 | pipenv run streamlit run bookmark_search_app.py 31 | ``` 32 | -------------------------------------------------------------------------------- /bookmark_search.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import argparse 5 | import html 6 | import logging 7 | import sys 8 | from pathlib import Path 9 | 10 | import bleach 11 | import polars as pl 12 | 13 | BOOKMARK_FILE = Path("bookmarks.json") 14 | 15 | 16 | def read_bookmarks(): 17 | data = pl.read_ndjson(BOOKMARK_FILE, ignore_errors=True) 18 | data = data.select( 19 | "id", 20 | "created_at", 21 | "language", 22 | "url", 23 | "content", 24 | pl.concat_str( 25 | pl.col("content") 26 | .str.replace_all(r"
", "\n") 27 | .map_elements( 28 | lambda s: html.unescape(bleach.clean(s, tags={}, strip=True)) 29 | ), 30 | pl.col("card").struct.field("title"), 31 | pl.col("card").struct.field("description"), 32 | separator="\n", 33 | ignore_nulls=True, 34 | ).alias("text"), 35 | "replies_count", 36 | "reblogs_count", 37 | "favourites_count", 38 | pl.col("account").struct.field("acct").alias("user_acct"), 39 | pl.col("account").struct.field("display_name").alias("user_display_name"), 40 | pl.col("tags") 41 | .list.eval(pl.element().struct.field("name").str.to_lowercase()) 42 | .alias("hashtags"), 43 | ) 44 | return data 45 | 46 | 47 | def get_hashtags(data): 48 | return ( 49 | data.get_column("hashtags").list.explode().drop_nulls().value_counts(sort=True) 50 | ) 51 | 52 | 53 | def main(): 54 | # Parse commandline arguments 55 | arg_parser = argparse.ArgumentParser() 56 | arg_parser.add_argument("-v", "--verbose", action="store_true") 57 | arg_parser.add_argument( 58 | "-o", "--outfile", default=sys.stdout, type=argparse.FileType("w") 59 | ) 60 | args = arg_parser.parse_args() 61 | # Set up logging 62 | if args.verbose: 63 | level = logging.DEBUG 64 | else: 65 | level = logging.ERROR 66 | logging.basicConfig(level=level) 67 | # Return exit value 68 | data = read_bookmarks() 69 | print(data.get_column("text")) 70 | hashtags = get_hashtags(data) 71 | print(hashtags) 72 | return 0 73 | 74 | 75 | if __name__ == "__main__": 76 | sys.exit(main()) 77 | -------------------------------------------------------------------------------- /bookmark_search_app.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import argparse 5 | import logging 6 | import sys 7 | 8 | import bookmark_search 9 | import polars as pl 10 | import streamlit as st 11 | 12 | 13 | @st.cache_data 14 | def read_bookmarks(): 15 | data = bookmark_search.read_bookmarks() 16 | docs = data.get_column("text").to_list() 17 | return data, docs 18 | 19 | 20 | @st.cache_resource 21 | def load_model(model="all-MiniLM-L6-v2"): 22 | from sentence_transformers import SentenceTransformer 23 | 24 | sentence_model = SentenceTransformer(model) 25 | return sentence_model 26 | 27 | 28 | @st.cache_data 29 | def compute_embeddings(_model, docs): 30 | return _model.encode(docs, show_progress_bar=False) 31 | 32 | 33 | @st.cache_data 34 | def compute_topics(docs, *, embeddings, _embedding_model): 35 | from bertopic import BERTopic 36 | from bertopic.representation import KeyBERTInspired 37 | 38 | representation_model = KeyBERTInspired() 39 | topic_model = BERTopic( 40 | embedding_model=_embedding_model, representation_model=representation_model 41 | ) 42 | topic_model.fit(docs, embeddings=embeddings) 43 | return topic_model 44 | 45 | 46 | @st.cache_data 47 | def generate_topic_map(_topic_model, *, docs, embeddings): 48 | return _topic_model.visualize_documents(docs=docs, embeddings=embeddings) 49 | 50 | 51 | def main(): 52 | # Site title 53 | st.title("Mastodon Bookmark Search") 54 | # Get data 55 | data, docs = read_bookmarks() 56 | # Run topic model 57 | embedding_model = load_model() 58 | embeddings = compute_embeddings(embedding_model, docs) 59 | topic_model = compute_topics( 60 | docs, embeddings=embeddings, _embedding_model=embedding_model 61 | ) 62 | topic_info = pl.from_pandas(topic_model.get_topic_info()) 63 | # Add topic info to data 64 | topics = topic_model.topics_ 65 | new_topics = topic_model.reduce_outliers(docs, topics) 66 | data = data.with_columns( 67 | pl.Series(name="topic", values=topics), 68 | pl.Series(name="new_topic", values=new_topics), 69 | ) 70 | # Configure sidebar 71 | with st.sidebar: 72 | st.header("Filters") 73 | st.subheader("Search") 74 | search_text = st.text_input("Search text") 75 | use_semantic_search = st.toggle("Use semantic search") 76 | st.subheader("Hashtags") 77 | hashtags = bookmark_search.get_hashtags(data) 78 | tag_options = hashtags.filter(pl.col("count") > 1).get_column("hashtags") 79 | selected_tags = st.multiselect("Hashtags", options=tag_options) 80 | st.subheader("Topic") 81 | topic_options = topic_info.get_column("Name") 82 | selected_topic = st.selectbox("Topic", options=topic_options, index=None) 83 | reduce_outliers = st.toggle("Reduce outliers") 84 | show_topic_map = st.toggle("Show topic map") 85 | # Hashtag filter 86 | for tag in selected_tags: 87 | data = data.filter(pl.col("hashtags").list.contains(tag)) 88 | # Topic modeling 89 | if selected_topic: 90 | topic_id = ( 91 | # fmt:off 92 | topic_info 93 | .filter(pl.col("Name") == selected_topic) 94 | .select("Topic") 95 | .item() 96 | ) 97 | print(selected_topic, topic_id) 98 | if reduce_outliers: 99 | data = data.filter(pl.col("new_topic") == topic_id) 100 | else: 101 | data = data.filter(pl.col("topic") == topic_id) 102 | # Search 103 | if search_text: 104 | if use_semantic_search: 105 | from sentence_transformers import util 106 | 107 | query_embedding = embedding_model.encode( 108 | search_text, convert_to_tensor=True 109 | ) 110 | n_results = 20 111 | hits = util.semantic_search(query_embedding, embeddings, top_k=n_results) 112 | hits_df = pl.DataFrame(hits[0], schema_overrides={"corpus_id": pl.UInt32}) 113 | data = ( 114 | data.with_row_index() 115 | .join(hits_df, left_on="index", right_on="corpus_id") 116 | .sort("score", descending=True) 117 | ) 118 | else: 119 | data = data.filter( 120 | pl.col("text").str.to_lowercase().str.contains(search_text.lower()) 121 | ) 122 | # Display topic map 123 | if show_topic_map: 124 | topic_map = generate_topic_map(topic_model, docs=docs, embeddings=embeddings) 125 | st.plotly_chart(topic_map) 126 | # Display results 127 | for row in data.iter_rows(named=True): 128 | text = row["text"] 129 | if search_text: 130 | text = text.replace(search_text, f":orange[{search_text}]") 131 | st.markdown( 132 | f""" 133 | **{row["user_display_name"]}** :gray[@{row["user_acct"].replace("@", "​@")}] 134 | 135 | {text} 136 | """ 137 | ) 138 | st.caption(f"""[{row["created_at"]}]({row["url"]})""") 139 | st.divider() 140 | 141 | 142 | if __name__ == "__main__": 143 | main() 144 | -------------------------------------------------------------------------------- /ingest_bookmarks.py: -------------------------------------------------------------------------------- 1 | import json 2 | from pathlib import Path 3 | import shutil 4 | import argparse 5 | import getpass 6 | 7 | from mastodon import Mastodon 8 | 9 | BOOKMARK_FILE = Path("bookmarks.json") 10 | BOOKMARK_FILE_TMP = Path("bookmarks.json.tmp") 11 | 12 | CLIENT_SECRETS_FILE = "mbs_client.secret" 13 | USER_SECRETS_FILE = "mbs_user.secret" 14 | 15 | 16 | def register_app(base_url, client_cred_file): 17 | Mastodon.create_app( 18 | "mastodon-bookmark-search", 19 | api_base_url=base_url, 20 | to_file=client_cred_file, 21 | ) 22 | print(f"Application registered. Client credentials saved to {client_cred_file}") 23 | 24 | 25 | def login(base_url, client_cred_file, user_cred_file, email, password): 26 | mastodon = Mastodon(client_id=client_cred_file, api_base_url=base_url) 27 | mastodon.log_in(email, password, to_file=user_cred_file) 28 | print(f"User logged in. User credentials saved to {user_cred_file}") 29 | 30 | 31 | def ingest(): 32 | if not Path(USER_SECRETS_FILE).is_file(): 33 | print( 34 | f'No credentials. Log in first using "python {Path(__file__).name} login".' 35 | ) 36 | return 37 | mastodon = Mastodon(access_token=USER_SECRETS_FILE) 38 | # Get last saved bookmark 39 | last_bookmark_id = None 40 | if BOOKMARK_FILE.is_file(): 41 | with BOOKMARK_FILE.open() as infile: 42 | for line in infile: 43 | break 44 | bookmark = json.loads(line) 45 | last_bookmark_id = bookmark["id"] 46 | 47 | # Get new bookmarks 48 | bookmarks = mastodon.bookmarks() 49 | with BOOKMARK_FILE_TMP.open("w") as outfile: 50 | while bookmarks: 51 | for bookmark in bookmarks: 52 | # We already have that bookmark, end here. 53 | if bookmark["id"] == last_bookmark_id: 54 | break 55 | outfile.write(json.dumps(bookmark, default=str)) 56 | outfile.write("\n") 57 | # Python weirdness: for/else gets executed when no 58 | # break statement is encountered. Used here to control 59 | # the outer while loop. 60 | else: 61 | print("Get next page") 62 | bookmarks = mastodon.fetch_next(bookmarks) 63 | continue 64 | break 65 | 66 | if BOOKMARK_FILE.is_file(): 67 | # Merge the new and old bookmarks files 68 | with BOOKMARK_FILE_TMP.open("a") as outfile, BOOKMARK_FILE.open() as infile: 69 | shutil.copyfileobj(infile, outfile) 70 | BOOKMARK_FILE_TMP.rename(BOOKMARK_FILE) 71 | 72 | 73 | def main(): 74 | parser = argparse.ArgumentParser(description="Mastodon CLI Application") 75 | subparsers = parser.add_subparsers(dest="command", help="Sub-commands") 76 | 77 | # Sub-command: login 78 | login_parser = subparsers.add_parser( 79 | "login", help="Register and log in to Mastodon" 80 | ) 81 | login_parser.add_argument( 82 | "--client-cred-file", 83 | type=str, 84 | default=CLIENT_SECRETS_FILE, 85 | help="File to save client credentials", 86 | ) 87 | login_parser.add_argument( 88 | "--user-cred-file", 89 | type=str, 90 | default=USER_SECRETS_FILE, 91 | help="File to save user credentials", 92 | ) 93 | 94 | # Sub-command: ingest 95 | ingest_parser = subparsers.add_parser( 96 | "ingest", help="Ingest bookmarks from Mastodon into the search app" 97 | ) 98 | 99 | args = parser.parse_args() 100 | 101 | if args.command == "login": 102 | try: 103 | base_url = input("Enter the base URL of the Mastodon instance: ") 104 | email = input("Enter your email address: ") 105 | password = getpass.getpass("Enter your password: ") 106 | except KeyboardInterrupt: 107 | print("\nAborting") 108 | return 109 | 110 | register_app(base_url, args.client_cred_file) 111 | login(base_url, args.client_cred_file, args.user_cred_file, email, password) 112 | elif args.command == "ingest": 113 | ingest() 114 | else: 115 | parser.print_help() 116 | 117 | 118 | if __name__ == "__main__": 119 | main() 120 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "mastodon-bookmark-search" 3 | version = "0.1.0" 4 | description = "A simple web application to search and explore your Mastodon bookmarks" 5 | readme = "README.md" 6 | requires-python = ">=3.10" 7 | dependencies = [ 8 | "bertopic>=0.16.3", 9 | "bleach>=6.1.0", 10 | "llvmlite>=0.43.0", 11 | "mastodon-py>=1.8.1", 12 | "polars>=1.6.0", 13 | "streamlit>=1.38.0", 14 | ] 15 | -------------------------------------------------------------------------------- /requirements-dev.lock: -------------------------------------------------------------------------------- 1 | # generated by rye 2 | # use `rye lock` or `rye sync` to update this lockfile 3 | # 4 | # last locked with the following flags: 5 | # pre: false 6 | # features: [] 7 | # all-features: false 8 | 9 | -e file:. 10 | altair==5.2.0 11 | anyio==4.3.0 12 | argon2-cffi==23.1.0 13 | argon2-cffi-bindings==21.2.0 14 | arrow==1.3.0 15 | asttokens==2.4.1 16 | async-lru==2.0.4 17 | attrs==23.2.0 18 | babel==2.14.0 19 | beautifulsoup4==4.12.3 20 | bertopic==0.16.0 21 | bleach==6.1.0 22 | blinker==1.7.0 23 | blurhash==1.1.4 24 | cachetools==5.3.2 25 | certifi==2023.11.17 26 | cffi==1.16.0 27 | charset-normalizer==3.3.2 28 | click==8.1.7 29 | comm==0.2.1 30 | cython==0.29.37 31 | debugpy==1.8.1 32 | decorator==5.1.1 33 | defusedxml==0.7.1 34 | executing==2.0.1 35 | fastjsonschema==2.19.1 36 | filelock==3.13.1 37 | fqdn==1.5.1 38 | fsspec==2024.2.0 39 | gitdb==4.0.11 40 | gitpython==3.1.41 41 | h11==0.14.0 42 | hdbscan==0.8.33 43 | httpcore==1.0.4 44 | httpx==0.27.0 45 | huggingface-hub==0.21.3 46 | idna==3.6 47 | importlib-metadata==7.0.1 48 | ipykernel==6.29.3 49 | ipython==8.22.2 50 | isoduration==20.11.0 51 | jedi==0.19.1 52 | jinja2==3.1.3 53 | joblib==1.3.2 54 | json5==0.9.22 55 | jsonpointer==2.4 56 | jsonschema==4.21.1 57 | jsonschema-specifications==2023.12.1 58 | jupyter-client==8.6.0 59 | jupyter-core==5.7.1 60 | jupyter-events==0.9.0 61 | jupyter-lsp==2.2.4 62 | jupyter-server==2.13.0 63 | jupyter-server-terminals==0.5.2 64 | jupyterlab==4.1.4 65 | jupyterlab-pygments==0.3.0 66 | jupyterlab-server==2.25.3 67 | llvmlite==0.42.0 68 | markdown-it-py==3.0.0 69 | markupsafe==2.1.5 70 | mastodon-py==1.8.1 71 | matplotlib-inline==0.1.6 72 | mdurl==0.1.2 73 | mistune==3.0.2 74 | mpmath==1.3.0 75 | nbclient==0.9.0 76 | nbconvert==7.16.2 77 | nbformat==5.9.2 78 | nest-asyncio==1.6.0 79 | networkx==3.2.1 80 | notebook-shim==0.2.4 81 | numba==0.59.0 82 | numpy==1.26.4 83 | nvidia-cublas-cu12==12.1.3.1 84 | nvidia-cuda-cupti-cu12==12.1.105 85 | nvidia-cuda-nvrtc-cu12==12.1.105 86 | nvidia-cuda-runtime-cu12==12.1.105 87 | nvidia-cudnn-cu12==8.9.2.26 88 | nvidia-cufft-cu12==11.0.2.54 89 | nvidia-curand-cu12==10.3.2.106 90 | nvidia-cusolver-cu12==11.4.5.107 91 | nvidia-cusparse-cu12==12.1.0.106 92 | nvidia-nccl-cu12==2.19.3 93 | nvidia-nvjitlink-cu12==12.3.101 94 | nvidia-nvtx-cu12==12.1.105 95 | overrides==7.7.0 96 | packaging==23.2 97 | pandas==2.2.0 98 | pandocfilters==1.5.1 99 | parso==0.8.3 100 | pexpect==4.9.0 101 | pillow==10.2.0 102 | platformdirs==4.2.0 103 | plotly==5.19.0 104 | polars==0.20.7 105 | prometheus-client==0.20.0 106 | prompt-toolkit==3.0.43 107 | protobuf==4.25.2 108 | psutil==5.9.8 109 | ptyprocess==0.7.0 110 | pure-eval==0.2.2 111 | pyarrow==15.0.0 112 | pycparser==2.21 113 | pydeck==0.8.1b0 114 | pygments==2.17.2 115 | pynndescent==0.5.11 116 | python-dateutil==2.8.2 117 | python-json-logger==2.0.7 118 | python-magic==0.4.27 119 | pytz==2024.1 120 | pyyaml==6.0.1 121 | pyzmq==25.1.2 122 | referencing==0.33.0 123 | regex==2023.12.25 124 | requests==2.31.0 125 | rfc3339-validator==0.1.4 126 | rfc3986-validator==0.1.1 127 | rich==13.7.0 128 | rpds-py==0.17.1 129 | safetensors==0.4.2 130 | scikit-learn==1.4.1.post1 131 | scipy==1.12.0 132 | send2trash==1.8.2 133 | sentence-transformers==2.5.1 134 | six==1.16.0 135 | smmap==5.0.1 136 | sniffio==1.3.1 137 | soupsieve==2.5 138 | stack-data==0.6.3 139 | streamlit==1.31.1 140 | sympy==1.12 141 | tenacity==8.2.3 142 | terminado==0.18.0 143 | threadpoolctl==3.3.0 144 | tinycss2==1.2.1 145 | tokenizers==0.15.2 146 | toml==0.10.2 147 | toolz==0.12.1 148 | torch==2.2.1 149 | tornado==6.4 150 | tqdm==4.66.2 151 | traitlets==5.14.1 152 | transformers==4.38.2 153 | types-python-dateutil==2.8.19.20240106 154 | typing-extensions==4.9.0 155 | tzdata==2024.1 156 | tzlocal==5.2 157 | umap-learn==0.5.5 158 | uri-template==1.3.0 159 | urllib3==2.1.0 160 | validators==0.22.0 161 | watchdog==4.0.0 162 | wcwidth==0.2.13 163 | webcolors==1.13 164 | webencodings==0.5.1 165 | websocket-client==1.7.0 166 | zipp==3.17.0 167 | -------------------------------------------------------------------------------- /requirements.lock: -------------------------------------------------------------------------------- 1 | # generated by rye 2 | # use `rye lock` or `rye sync` to update this lockfile 3 | # 4 | # last locked with the following flags: 5 | # pre: false 6 | # features: [] 7 | # all-features: false 8 | 9 | -e file:. 10 | altair==5.2.0 11 | attrs==23.2.0 12 | bertopic==0.16.0 13 | bleach==6.1.0 14 | blinker==1.7.0 15 | blurhash==1.1.4 16 | cachetools==5.3.2 17 | certifi==2023.11.17 18 | charset-normalizer==3.3.2 19 | click==8.1.7 20 | cython==0.29.37 21 | decorator==5.1.1 22 | filelock==3.13.1 23 | fsspec==2024.2.0 24 | gitdb==4.0.11 25 | gitpython==3.1.41 26 | hdbscan==0.8.33 27 | huggingface-hub==0.21.3 28 | idna==3.6 29 | importlib-metadata==7.0.1 30 | jinja2==3.1.3 31 | joblib==1.3.2 32 | jsonschema==4.21.1 33 | jsonschema-specifications==2023.12.1 34 | llvmlite==0.42.0 35 | markdown-it-py==3.0.0 36 | markupsafe==2.1.5 37 | mastodon-py==1.8.1 38 | mdurl==0.1.2 39 | mpmath==1.3.0 40 | networkx==3.2.1 41 | numba==0.59.0 42 | numpy==1.26.4 43 | nvidia-cublas-cu12==12.1.3.1 44 | nvidia-cuda-cupti-cu12==12.1.105 45 | nvidia-cuda-nvrtc-cu12==12.1.105 46 | nvidia-cuda-runtime-cu12==12.1.105 47 | nvidia-cudnn-cu12==8.9.2.26 48 | nvidia-cufft-cu12==11.0.2.54 49 | nvidia-curand-cu12==10.3.2.106 50 | nvidia-cusolver-cu12==11.4.5.107 51 | nvidia-cusparse-cu12==12.1.0.106 52 | nvidia-nccl-cu12==2.19.3 53 | nvidia-nvjitlink-cu12==12.3.101 54 | nvidia-nvtx-cu12==12.1.105 55 | packaging==23.2 56 | pandas==2.2.0 57 | pillow==10.2.0 58 | plotly==5.19.0 59 | polars==0.20.7 60 | protobuf==4.25.2 61 | pyarrow==15.0.0 62 | pydeck==0.8.1b0 63 | pygments==2.17.2 64 | pynndescent==0.5.11 65 | python-dateutil==2.8.2 66 | python-magic==0.4.27 67 | pytz==2024.1 68 | pyyaml==6.0.1 69 | referencing==0.33.0 70 | regex==2023.12.25 71 | requests==2.31.0 72 | rich==13.7.0 73 | rpds-py==0.17.1 74 | safetensors==0.4.2 75 | scikit-learn==1.4.1.post1 76 | scipy==1.12.0 77 | sentence-transformers==2.5.1 78 | six==1.16.0 79 | smmap==5.0.1 80 | streamlit==1.31.1 81 | sympy==1.12 82 | tenacity==8.2.3 83 | threadpoolctl==3.3.0 84 | tokenizers==0.15.2 85 | toml==0.10.2 86 | toolz==0.12.1 87 | torch==2.2.1 88 | tornado==6.4 89 | tqdm==4.66.2 90 | transformers==4.38.2 91 | typing-extensions==4.9.0 92 | tzdata==2024.1 93 | tzlocal==5.2 94 | umap-learn==0.5.5 95 | urllib3==2.1.0 96 | validators==0.22.0 97 | watchdog==4.0.0 98 | webencodings==0.5.1 99 | zipp==3.17.0 100 | --------------------------------------------------------------------------------