diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index e7241d42d..7cef8e779 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -92,7 +92,7 @@ jobs: - name: Get Gilda resources run: | - poetry run python -c "import nltk; nltk.download('punkt'); nltk.download('stopwords')" + poetry run python -c "import nltk; nltk.download('punkt_tab'); nltk.download('stopwords')" poetry run python -m adeft.download #---------------------------------------------- diff --git a/docs/datamodels/obograph/Axiom.md b/docs/datamodels/obograph/Axiom.md index c5f8ff41f..37218dd91 100644 --- a/docs/datamodels/obograph/Axiom.md +++ b/docs/datamodels/obograph/Axiom.md @@ -1,6 +1,12 @@ + + # Class: Axiom -_A generic grouping for any OWL axiom or group of axioms that is not captured by existing constructs in this standard. -_ + + +_A generic grouping for any OWL axiom or group of axioms that is not captured by existing constructs in this standard._ + +__ + @@ -11,17 +17,32 @@ URI: [owl:Axiom](http://www.w3.org/2002/07/owl#Axiom) -```{mermaid} + + + +```mermaid classDiagram class Axiom + click Axiom href "../Axiom" Axiom <|-- DomainRangeAxiom + click DomainRangeAxiom href "../DomainRangeAxiom" Axiom <|-- EquivalentNodesSet + click EquivalentNodesSet href "../EquivalentNodesSet" Axiom <|-- LogicalDefinitionAxiom + click LogicalDefinitionAxiom href "../LogicalDefinitionAxiom" + Axiom <|-- DisjointClassExpressionsAxiom + click DisjointClassExpressionsAxiom href "../DisjointClassExpressionsAxiom" Axiom <|-- PropertyChainAxiom + click PropertyChainAxiom href "../PropertyChainAxiom" Axiom : meta - Axiom ..> Meta : meta + + + + Axiom --> "0..1" Meta : meta + click Meta href "../Meta" + ``` @@ -35,6 +56,7 @@ URI: [owl:Axiom](http://www.w3.org/2002/07/owl#Axiom) * [DomainRangeAxiom](DomainRangeAxiom.md) * [EquivalentNodesSet](EquivalentNodesSet.md) * [LogicalDefinitionAxiom](LogicalDefinitionAxiom.md) + * [DisjointClassExpressionsAxiom](DisjointClassExpressionsAxiom.md) * [PropertyChainAxiom](PropertyChainAxiom.md) @@ -69,7 +91,6 @@ URI: [owl:Axiom](http://www.w3.org/2002/07/owl#Axiom) - ## Mappings | Mapping Type | Mapped Value | @@ -81,6 +102,8 @@ URI: [owl:Axiom](http://www.w3.org/2002/07/owl#Axiom) + + ## LinkML Source @@ -95,7 +118,6 @@ description: 'A generic grouping for any OWL axiom or group of axioms that is no ' from_schema: https://github.com/geneontology/obographs -rank: 1000 abstract: true slots: - meta @@ -114,7 +136,6 @@ description: 'A generic grouping for any OWL axiom or group of axioms that is no ' from_schema: https://github.com/geneontology/obographs -rank: 1000 abstract: true attributes: meta: diff --git a/docs/datamodels/obograph/BasicPropertyValue.md b/docs/datamodels/obograph/BasicPropertyValue.md index f7512fdb2..4910034a5 100644 --- a/docs/datamodels/obograph/BasicPropertyValue.md +++ b/docs/datamodels/obograph/BasicPropertyValue.md @@ -1,23 +1,38 @@ + + # Class: BasicPropertyValue + + _A property value that represents an assertion about an entity that is not a definition, synonym, or xref_ + URI: [obographs:BasicPropertyValue](https://github.com/geneontology/obographs/BasicPropertyValue) -```{mermaid} + + + +```mermaid classDiagram class BasicPropertyValue + click BasicPropertyValue href "../BasicPropertyValue" PropertyValue <|-- BasicPropertyValue + click PropertyValue href "../PropertyValue" BasicPropertyValue : lang BasicPropertyValue : meta - BasicPropertyValue ..> Meta : meta + + + + BasicPropertyValue --> "0..1" Meta : meta + click Meta href "../Meta" + BasicPropertyValue : pred @@ -46,7 +61,7 @@ URI: [obographs:BasicPropertyValue](https://github.com/geneontology/obographs/Ba | --- | --- | --- | --- | | [pred](pred.md) | 0..1
[String](String.md) | the predicate of an edge | [PropertyValue](PropertyValue.md) | | [val](val.md) | 0..1
[String](String.md) | the value of a property | [PropertyValue](PropertyValue.md) | -| [xrefs](xrefs.md) | 0..*
[XrefString](XrefString.md) | A list of cross references to other entities represented in other ontologies,... | [PropertyValue](PropertyValue.md) | +| [xrefs](xrefs.md) | *
[XrefString](XrefString.md) | A list of cross references to other entities represented in other ontologies,... | [PropertyValue](PropertyValue.md) | | [meta](meta.md) | 0..1
[Meta](Meta.md) | A collection of metadata about either an ontology (graph), an entity, or an a... | [PropertyValue](PropertyValue.md) | | [valType](valType.md) | 0..1
[String](String.md) | the datatype of a property value | [PropertyValue](PropertyValue.md) | | [lang](lang.md) | 0..1
[String](String.md) | the language of a property value | [PropertyValue](PropertyValue.md) | @@ -82,7 +97,6 @@ URI: [obographs:BasicPropertyValue](https://github.com/geneontology/obographs/Ba - ## Mappings | Mapping Type | Mapped Value | @@ -94,6 +108,8 @@ URI: [obographs:BasicPropertyValue](https://github.com/geneontology/obographs/Ba + + ## LinkML Source @@ -106,7 +122,6 @@ name: BasicPropertyValue description: A property value that represents an assertion about an entity that is not a definition, synonym, or xref from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: PropertyValue ``` @@ -120,7 +135,6 @@ name: BasicPropertyValue description: A property value that represents an assertion about an entity that is not a definition, synonym, or xref from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: PropertyValue attributes: pred: @@ -161,13 +175,13 @@ attributes: close_mappings: - rdfs:seeAlso rank: 1000 - multivalued: true alias: xrefs owner: BasicPropertyValue domain_of: - Meta - PropertyValue range: XrefString + multivalued: true meta: name: meta description: A collection of metadata about either an ontology (graph), an entity, diff --git a/docs/datamodels/obograph/DefinitionPropertyValue.md b/docs/datamodels/obograph/DefinitionPropertyValue.md index 151bebe9c..2e52720b8 100644 --- a/docs/datamodels/obograph/DefinitionPropertyValue.md +++ b/docs/datamodels/obograph/DefinitionPropertyValue.md @@ -1,23 +1,38 @@ + + # Class: DefinitionPropertyValue + + _A property value that represents an assertion about the textual definition of an entity_ + URI: [obographs:DefinitionPropertyValue](https://github.com/geneontology/obographs/DefinitionPropertyValue) -```{mermaid} + + + +```mermaid classDiagram class DefinitionPropertyValue + click DefinitionPropertyValue href "../DefinitionPropertyValue" PropertyValue <|-- DefinitionPropertyValue + click PropertyValue href "../PropertyValue" DefinitionPropertyValue : lang DefinitionPropertyValue : meta - DefinitionPropertyValue ..> Meta : meta + + + + DefinitionPropertyValue --> "0..1" Meta : meta + click Meta href "../Meta" + DefinitionPropertyValue : pred @@ -46,7 +61,7 @@ URI: [obographs:DefinitionPropertyValue](https://github.com/geneontology/obograp | --- | --- | --- | --- | | [pred](pred.md) | 0..1
[String](String.md) | the predicate of an edge | [PropertyValue](PropertyValue.md) | | [val](val.md) | 0..1
[String](String.md) | The textual string representing the definition | [PropertyValue](PropertyValue.md) | -| [xrefs](xrefs.md) | 0..*
[XrefString](XrefString.md) | A list of identifiers that support the definition | [PropertyValue](PropertyValue.md) | +| [xrefs](xrefs.md) | *
[XrefString](XrefString.md) | A list of identifiers that support the definition | [PropertyValue](PropertyValue.md) | | [meta](meta.md) | 0..1
[Meta](Meta.md) | A collection of metadata about either an ontology (graph), an entity, or an a... | [PropertyValue](PropertyValue.md) | | [valType](valType.md) | 0..1
[String](String.md) | the datatype of a property value | [PropertyValue](PropertyValue.md) | | [lang](lang.md) | 0..1
[String](String.md) | the language of a property value | [PropertyValue](PropertyValue.md) | @@ -82,7 +97,6 @@ URI: [obographs:DefinitionPropertyValue](https://github.com/geneontology/obograp - ## Mappings | Mapping Type | Mapped Value | @@ -94,6 +108,8 @@ URI: [obographs:DefinitionPropertyValue](https://github.com/geneontology/obograp + + ## LinkML Source @@ -106,7 +122,6 @@ name: DefinitionPropertyValue description: A property value that represents an assertion about the textual definition of an entity from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: PropertyValue slot_usage: val: @@ -138,7 +153,6 @@ name: DefinitionPropertyValue description: A property value that represents an assertion about the textual definition of an entity from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: PropertyValue slot_usage: val: @@ -194,7 +208,6 @@ attributes: a contributing role in the definition. from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: xrefs owner: DefinitionPropertyValue domain_of: @@ -202,6 +215,7 @@ attributes: - PropertyValue role: supporting identifiers range: XrefString + multivalued: true meta: name: meta description: A collection of metadata about either an ontology (graph), an entity, diff --git a/docs/datamodels/obograph/DomainRangeAxiom.md b/docs/datamodels/obograph/DomainRangeAxiom.md index 6b201d6db..7d22c2d6c 100644 --- a/docs/datamodels/obograph/DomainRangeAxiom.md +++ b/docs/datamodels/obograph/DomainRangeAxiom.md @@ -1,27 +1,47 @@ + + # Class: DomainRangeAxiom + + _This groups potentially multiple axioms that constrain the usage of a property depending on some combination of domain and range._ + URI: [obographs:DomainRangeAxiom](https://github.com/geneontology/obographs/DomainRangeAxiom) -```{mermaid} + + + +```mermaid classDiagram class DomainRangeAxiom + click DomainRangeAxiom href "../DomainRangeAxiom" Axiom <|-- DomainRangeAxiom + click Axiom href "../Axiom" DomainRangeAxiom : allValuesFromEdges - DomainRangeAxiom ..> Edge : allValuesFromEdges + + + + DomainRangeAxiom --> "*" Edge : allValuesFromEdges + click Edge href "../Edge" + DomainRangeAxiom : domainClassIds DomainRangeAxiom : meta - DomainRangeAxiom ..> Meta : meta + + + + DomainRangeAxiom --> "0..1" Meta : meta + click Meta href "../Meta" + DomainRangeAxiom : predicateId @@ -45,9 +65,9 @@ URI: [obographs:DomainRangeAxiom](https://github.com/geneontology/obographs/Doma | Name | Cardinality and Range | Description | Inheritance | | --- | --- | --- | --- | | [predicateId](predicateId.md) | 0..1
[String](String.md) | | direct | -| [domainClassIds](domainClassIds.md) | 0..*
[String](String.md) | | direct | -| [rangeClassIds](rangeClassIds.md) | 0..*
[String](String.md) | | direct | -| [allValuesFromEdges](allValuesFromEdges.md) | 0..*
[Edge](Edge.md) | A list of edges that represent subclasses of universal restrictions | direct | +| [domainClassIds](domainClassIds.md) | *
[String](String.md) | | direct | +| [rangeClassIds](rangeClassIds.md) | *
[String](String.md) | | direct | +| [allValuesFromEdges](allValuesFromEdges.md) | *
[Edge](Edge.md) | A list of edges that represent subclasses of universal restrictions | direct | | [meta](meta.md) | 0..1
[Meta](Meta.md) | A collection of metadata about either an ontology (graph), an entity, or an a... | [Axiom](Axiom.md) | @@ -85,7 +105,6 @@ URI: [obographs:DomainRangeAxiom](https://github.com/geneontology/obographs/Doma - ## Mappings | Mapping Type | Mapped Value | @@ -97,6 +116,8 @@ URI: [obographs:DomainRangeAxiom](https://github.com/geneontology/obographs/Doma + + ## LinkML Source @@ -114,7 +135,6 @@ comments: to a DomainRangeAxiom with a rangeClassIds, and no domainClassIds. But translations may merge these, but only when semantically valid. from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: Axiom slots: - predicateId @@ -138,7 +158,6 @@ comments: to a DomainRangeAxiom with a rangeClassIds, and no domainClassIds. But translations may merge these, but only when semantically valid. from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: Axiom attributes: predicateId: @@ -155,34 +174,34 @@ attributes: name: domainClassIds from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: domainClassIds owner: DomainRangeAxiom domain_of: - DomainRangeAxiom range: string + multivalued: true rangeClassIds: name: rangeClassIds from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: rangeClassIds owner: DomainRangeAxiom domain_of: - DomainRangeAxiom range: string + multivalued: true allValuesFromEdges: name: allValuesFromEdges description: A list of edges that represent subclasses of universal restrictions from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: allValuesFromEdges owner: DomainRangeAxiom domain_of: - Graph - DomainRangeAxiom range: Edge + multivalued: true meta: name: meta description: A collection of metadata about either an ontology (graph), an entity, diff --git a/docs/datamodels/obograph/Edge.md b/docs/datamodels/obograph/Edge.md index c923647b5..b762f6dd0 100644 --- a/docs/datamodels/obograph/Edge.md +++ b/docs/datamodels/obograph/Edge.md @@ -1,19 +1,33 @@ + + # Class: Edge + + _An edge is a simple typed relationship between two nodes. When mapping to OWL, an edge represents either (a) s SubClassOf o (b) s SubClassOf p some o (c) s p o (where s and o are individuals) (d) s SubPropertyOf o (e) s EquivalentTo o (f) s type o_ + URI: [obographs:Edge](https://github.com/geneontology/obographs/Edge) -```{mermaid} + + + +```mermaid classDiagram class Edge + click Edge href "../Edge" Edge : meta - Edge ..> Meta : meta + + + + Edge --> "0..1" Meta : meta + click Meta href "../Meta" + Edge : obj @@ -72,7 +86,6 @@ URI: [obographs:Edge](https://github.com/geneontology/obographs/Edge) - ## Mappings | Mapping Type | Mapped Value | @@ -84,6 +97,8 @@ URI: [obographs:Edge](https://github.com/geneontology/obographs/Edge) + + ## LinkML Source @@ -98,7 +113,6 @@ description: An edge is a simple typed relationship between two nodes. When mapp s p o (where s and o are individuals) (d) s SubPropertyOf o (e) s EquivalentTo o (f) s type o from_schema: https://github.com/geneontology/obographs -rank: 1000 slots: - sub - pred @@ -118,7 +132,6 @@ description: An edge is a simple typed relationship between two nodes. When mapp s p o (where s and o are individuals) (d) s SubPropertyOf o (e) s EquivalentTo o (f) s type o from_schema: https://github.com/geneontology/obographs -rank: 1000 attributes: sub: name: sub diff --git a/docs/datamodels/obograph/EquivalentNodesSet.md b/docs/datamodels/obograph/EquivalentNodesSet.md index 05d2c53a4..a5fc72ad0 100644 --- a/docs/datamodels/obograph/EquivalentNodesSet.md +++ b/docs/datamodels/obograph/EquivalentNodesSet.md @@ -1,21 +1,36 @@ + + # Class: EquivalentNodesSet + + _A clique of nodes that are all mutually equivalent_ + URI: [owl:equivalentClass](http://www.w3.org/2002/07/owl#equivalentClass) -```{mermaid} + + + +```mermaid classDiagram class EquivalentNodesSet + click EquivalentNodesSet href "../EquivalentNodesSet" Axiom <|-- EquivalentNodesSet + click Axiom href "../Axiom" EquivalentNodesSet : meta - EquivalentNodesSet ..> Meta : meta + + + + EquivalentNodesSet --> "0..1" Meta : meta + click Meta href "../Meta" + EquivalentNodesSet : nodeIds @@ -39,7 +54,7 @@ URI: [owl:equivalentClass](http://www.w3.org/2002/07/owl#equivalentClass) | Name | Cardinality and Range | Description | Inheritance | | --- | --- | --- | --- | | [representativeNodeId](representativeNodeId.md) | 0..1
[String](String.md) | The identifier of a node that represents the class in an OWL equivalence cliq... | direct | -| [nodeIds](nodeIds.md) | 0..*
[String](String.md) | | direct | +| [nodeIds](nodeIds.md) | *
[String](String.md) | | direct | | [meta](meta.md) | 0..1
[Meta](Meta.md) | A collection of metadata about either an ontology (graph), an entity, or an a... | [Axiom](Axiom.md) | @@ -73,7 +88,6 @@ URI: [owl:equivalentClass](http://www.w3.org/2002/07/owl#equivalentClass) - ## Mappings | Mapping Type | Mapped Value | @@ -85,6 +99,8 @@ URI: [owl:equivalentClass](http://www.w3.org/2002/07/owl#equivalentClass) + + ## LinkML Source @@ -96,7 +112,6 @@ URI: [owl:equivalentClass](http://www.w3.org/2002/07/owl#equivalentClass) name: EquivalentNodesSet description: A clique of nodes that are all mutually equivalent from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: Axiom slots: - representativeNodeId @@ -113,7 +128,6 @@ class_uri: owl:equivalentClass name: EquivalentNodesSet description: A clique of nodes that are all mutually equivalent from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: Axiom attributes: representativeNodeId: @@ -131,12 +145,12 @@ attributes: name: nodeIds from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: nodeIds owner: EquivalentNodesSet domain_of: - EquivalentNodesSet range: string + multivalued: true meta: name: meta description: A collection of metadata about either an ontology (graph), an entity, diff --git a/docs/datamodels/obograph/ExistentialRestrictionExpression.md b/docs/datamodels/obograph/ExistentialRestrictionExpression.md index 881977ce0..737440af6 100644 --- a/docs/datamodels/obograph/ExistentialRestrictionExpression.md +++ b/docs/datamodels/obograph/ExistentialRestrictionExpression.md @@ -1,16 +1,25 @@ + + # Class: ExistentialRestrictionExpression + + _An existential restriction (OWL some values from) expression_ + URI: [owl:Restriction](http://www.w3.org/2002/07/owl#Restriction) -```{mermaid} + + + +```mermaid classDiagram class ExistentialRestrictionExpression + click ExistentialRestrictionExpression href "../ExistentialRestrictionExpression" ExistentialRestrictionExpression : fillerId ExistentialRestrictionExpression : propertyId @@ -40,6 +49,8 @@ URI: [owl:Restriction](http://www.w3.org/2002/07/owl#Restriction) | used by | used in | type | used | | --- | --- | --- | --- | | [LogicalDefinitionAxiom](LogicalDefinitionAxiom.md) | [restrictions](restrictions.md) | range | [ExistentialRestrictionExpression](ExistentialRestrictionExpression.md) | +| [DisjointClassExpressionsAxiom](DisjointClassExpressionsAxiom.md) | [classExpressions](classExpressions.md) | range | [ExistentialRestrictionExpression](ExistentialRestrictionExpression.md) | +| [DisjointClassExpressionsAxiom](DisjointClassExpressionsAxiom.md) | [unionEquivalentToExpression](unionEquivalentToExpression.md) | range | [ExistentialRestrictionExpression](ExistentialRestrictionExpression.md) | @@ -77,7 +88,6 @@ URI: [owl:Restriction](http://www.w3.org/2002/07/owl#Restriction) - ## Mappings | Mapping Type | Mapped Value | @@ -89,6 +99,8 @@ URI: [owl:Restriction](http://www.w3.org/2002/07/owl#Restriction) + + ## LinkML Source @@ -110,7 +122,6 @@ comments: from_schema: https://github.com/geneontology/obographs aliases: - some values from expression -rank: 1000 slots: - fillerId - propertyId @@ -136,7 +147,6 @@ comments: from_schema: https://github.com/geneontology/obographs aliases: - some values from expression -rank: 1000 attributes: fillerId: name: fillerId diff --git a/docs/datamodels/obograph/Graph.md b/docs/datamodels/obograph/Graph.md index 2011649b0..e02256829 100644 --- a/docs/datamodels/obograph/Graph.md +++ b/docs/datamodels/obograph/Graph.md @@ -1,31 +1,60 @@ + + # Class: Graph + + _A graph is a collection of nodes and edges and other axioms that represents a single ontology._ + URI: [owl:Ontology](http://www.w3.org/2002/07/owl#Ontology) -```{mermaid} + + + +```mermaid classDiagram class Graph + click Graph href "../Graph" Graph : allValuesFromEdges - Graph ..> Edge : allValuesFromEdges + + + + Graph --> "*" Edge : allValuesFromEdges + click Edge href "../Edge" + Graph : domainRangeAxioms - Graph ..> DomainRangeAxiom : domainRangeAxioms + + + + Graph --> "*" DomainRangeAxiom : domainRangeAxioms + click DomainRangeAxiom href "../DomainRangeAxiom" + Graph : edges - Graph ..> Edge : edges + + + + Graph --> "*" Edge : edges + click Edge href "../Edge" + Graph : equivalentNodesSets - Graph ..> EquivalentNodesSet : equivalentNodesSets + + + + Graph --> "*" EquivalentNodesSet : equivalentNodesSets + click EquivalentNodesSet href "../EquivalentNodesSet" + Graph : id @@ -33,31 +62,66 @@ URI: [owl:Ontology](http://www.w3.org/2002/07/owl#Ontology) Graph : logicalDefinitionAxioms - Graph ..> LogicalDefinitionAxiom : logicalDefinitionAxioms + + + + Graph --> "*" LogicalDefinitionAxiom : logicalDefinitionAxioms + click LogicalDefinitionAxiom href "../LogicalDefinitionAxiom" + Graph : meta - Graph ..> Meta : meta + + + + Graph --> "0..1" Meta : meta + click Meta href "../Meta" + Graph : nodes - Graph ..> Node : nodes + + + + Graph --> "*" Node : nodes + click Node href "../Node" + Graph : prefixes - Graph ..> PrefixDeclaration : prefixes + + + + Graph --> "*" PrefixDeclaration : prefixes + click PrefixDeclaration href "../PrefixDeclaration" + Graph : propertyChainAxioms - Graph ..> PropertyChainAxiom : propertyChainAxioms + + + + Graph --> "*" PropertyChainAxiom : propertyChainAxioms + click PropertyChainAxiom href "../PropertyChainAxiom" + Graph : subsetDefinitions - Graph ..> SubsetDefinition : subsetDefinitions + + + + Graph --> "*" SubsetDefinition : subsetDefinitions + click SubsetDefinition href "../SubsetDefinition" + Graph : synonymTypeDefinitions - Graph ..> SynonymTypeDefinition : synonymTypeDefinitions + + + + Graph --> "*" SynonymTypeDefinition : synonymTypeDefinitions + click SynonymTypeDefinition href "../SynonymTypeDefinition" + ``` @@ -72,19 +136,19 @@ URI: [owl:Ontology](http://www.w3.org/2002/07/owl#Ontology) | Name | Cardinality and Range | Description | Inheritance | | --- | --- | --- | --- | -| [id](id.md) | 1..1
[OboIdentifierString](OboIdentifierString.md) | The unique identifier of the entity | direct | +| [id](id.md) | 1
[OboIdentifierString](OboIdentifierString.md) | The unique identifier of the entity | direct | | [lbl](lbl.md) | 0..1
[String](String.md) | the human-readable label of a node | direct | -| [prefixes](prefixes.md) | 0..*
[PrefixDeclaration](PrefixDeclaration.md) | A collection of mappings between prefixes and namespaces, used to map CURIEs ... | direct | -| [subsetDefinitions](subsetDefinitions.md) | 0..*
[SubsetDefinition](SubsetDefinition.md) | | direct | -| [synonymTypeDefinitions](synonymTypeDefinitions.md) | 0..*
[SynonymTypeDefinition](SynonymTypeDefinition.md) | | direct | +| [prefixes](prefixes.md) | *
[PrefixDeclaration](PrefixDeclaration.md) | A collection of mappings between prefixes and namespaces, used to map CURIEs ... | direct | +| [subsetDefinitions](subsetDefinitions.md) | *
[SubsetDefinition](SubsetDefinition.md) | | direct | +| [synonymTypeDefinitions](synonymTypeDefinitions.md) | *
[SynonymTypeDefinition](SynonymTypeDefinition.md) | | direct | | [meta](meta.md) | 0..1
[Meta](Meta.md) | A collection of metadata about either an ontology (graph), an entity, or an a... | direct | -| [nodes](nodes.md) | 0..*
[Node](Node.md) | All nodes present in a graph | direct | -| [edges](edges.md) | 0..*
[Edge](Edge.md) | All edges present in a graph | direct | -| [equivalentNodesSets](equivalentNodesSets.md) | 0..*
[EquivalentNodesSet](EquivalentNodesSet.md) | A list of sets of nodes that form equivalence cliques | direct | -| [logicalDefinitionAxioms](logicalDefinitionAxioms.md) | 0..*
[LogicalDefinitionAxiom](LogicalDefinitionAxiom.md) | A list of logical definition axioms that define the meaning of a class in ter... | direct | -| [domainRangeAxioms](domainRangeAxioms.md) | 0..*
[DomainRangeAxiom](DomainRangeAxiom.md) | A list of axioms that define the domain and range of a property | direct | -| [allValuesFromEdges](allValuesFromEdges.md) | 0..*
[Edge](Edge.md) | A list of edges that represent subclasses of universal restrictions | direct | -| [propertyChainAxioms](propertyChainAxioms.md) | 0..*
[PropertyChainAxiom](PropertyChainAxiom.md) | A list of axioms that define an OWL property chain | direct | +| [nodes](nodes.md) | *
[Node](Node.md) | All nodes present in a graph | direct | +| [edges](edges.md) | *
[Edge](Edge.md) | All edges present in a graph | direct | +| [equivalentNodesSets](equivalentNodesSets.md) | *
[EquivalentNodesSet](EquivalentNodesSet.md) | A list of sets of nodes that form equivalence cliques | direct | +| [logicalDefinitionAxioms](logicalDefinitionAxioms.md) | *
[LogicalDefinitionAxiom](LogicalDefinitionAxiom.md) | A list of logical definition axioms that define the meaning of a class in ter... | direct | +| [domainRangeAxioms](domainRangeAxioms.md) | *
[DomainRangeAxiom](DomainRangeAxiom.md) | A list of axioms that define the domain and range of a property | direct | +| [allValuesFromEdges](allValuesFromEdges.md) | *
[Edge](Edge.md) | A list of edges that represent subclasses of universal restrictions | direct | +| [propertyChainAxioms](propertyChainAxioms.md) | *
[PropertyChainAxiom](PropertyChainAxiom.md) | A list of axioms that define an OWL property chain | direct | @@ -117,7 +181,6 @@ URI: [owl:Ontology](http://www.w3.org/2002/07/owl#Ontology) - ## Mappings | Mapping Type | Mapped Value | @@ -129,6 +192,8 @@ URI: [owl:Ontology](http://www.w3.org/2002/07/owl#Ontology) + + ## LinkML Source @@ -141,7 +206,6 @@ name: Graph description: A graph is a collection of nodes and edges and other axioms that represents a single ontology. from_schema: https://github.com/geneontology/obographs -rank: 1000 slots: - id - lbl @@ -169,7 +233,6 @@ name: Graph description: A graph is a collection of nodes and edges and other axioms that represents a single ontology. from_schema: https://github.com/geneontology/obographs -rank: 1000 attributes: id: name: id @@ -187,6 +250,7 @@ attributes: - SubsetDefinition - SynonymTypeDefinition range: OboIdentifierString + required: true lbl: name: lbl description: the human-readable label of a node @@ -214,35 +278,35 @@ attributes: from_schema: https://github.com/geneontology/obographs rank: 1000 slot_uri: sh:declare - multivalued: true alias: prefixes owner: Graph domain_of: - GraphDocument - Graph range: PrefixDeclaration + multivalued: true inlined: true subsetDefinitions: name: subsetDefinitions from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: subsetDefinitions owner: Graph domain_of: - Graph range: SubsetDefinition + multivalued: true inlined: true synonymTypeDefinitions: name: synonymTypeDefinitions from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: synonymTypeDefinitions owner: Graph domain_of: - Graph range: SynonymTypeDefinition + multivalued: true inlined: true meta: name: meta @@ -269,12 +333,12 @@ attributes: annotation properties, etc from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: nodes owner: Graph domain_of: - Graph range: Node + multivalued: true inlined: true inlined_as_list: true edges: @@ -286,12 +350,12 @@ attributes: and a simple existential axiom (d) ObjectPropertyAssertions from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: edges owner: Graph domain_of: - Graph range: Edge + multivalued: true inlined: true inlined_as_list: true equivalentNodesSets: @@ -299,24 +363,24 @@ attributes: description: A list of sets of nodes that form equivalence cliques from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: equivalentNodesSets owner: Graph domain_of: - Graph range: EquivalentNodesSet + multivalued: true logicalDefinitionAxioms: name: logicalDefinitionAxioms description: A list of logical definition axioms that define the meaning of a class in terms of other classes. from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: logicalDefinitionAxioms owner: Graph domain_of: - Graph range: LogicalDefinitionAxiom + multivalued: true inlined: true inlined_as_list: true domainRangeAxioms: @@ -324,35 +388,35 @@ attributes: description: A list of axioms that define the domain and range of a property from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: domainRangeAxioms owner: Graph domain_of: - Graph range: DomainRangeAxiom + multivalued: true allValuesFromEdges: name: allValuesFromEdges description: A list of edges that represent subclasses of universal restrictions from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: allValuesFromEdges owner: Graph domain_of: - Graph - DomainRangeAxiom range: Edge + multivalued: true propertyChainAxioms: name: propertyChainAxioms description: A list of axioms that define an OWL property chain from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: propertyChainAxioms owner: Graph domain_of: - Graph range: PropertyChainAxiom + multivalued: true class_uri: owl:Ontology ``` diff --git a/docs/datamodels/obograph/GraphDocument.md b/docs/datamodels/obograph/GraphDocument.md index 8faf7ec14..449d5b77a 100644 --- a/docs/datamodels/obograph/GraphDocument.md +++ b/docs/datamodels/obograph/GraphDocument.md @@ -1,27 +1,51 @@ + + # Class: GraphDocument + + _A graph document is a collection of graphs together with a set of prefixes that apply across all of them_ + URI: [obographs:GraphDocument](https://github.com/geneontology/obographs/GraphDocument) -```{mermaid} + + + +```mermaid classDiagram class GraphDocument + click GraphDocument href "../GraphDocument" GraphDocument : graphs - GraphDocument ..> Graph : graphs + + + + GraphDocument --> "*" Graph : graphs + click Graph href "../Graph" + GraphDocument : meta - GraphDocument ..> Meta : meta + + + + GraphDocument --> "0..1" Meta : meta + click Meta href "../Meta" + GraphDocument : prefixes - GraphDocument ..> PrefixDeclaration : prefixes + + + + GraphDocument --> "*" PrefixDeclaration : prefixes + click PrefixDeclaration href "../PrefixDeclaration" + ``` @@ -37,8 +61,8 @@ URI: [obographs:GraphDocument](https://github.com/geneontology/obographs/GraphDo | Name | Cardinality and Range | Description | Inheritance | | --- | --- | --- | --- | | [meta](meta.md) | 0..1
[Meta](Meta.md) | A collection of metadata about either an ontology (graph), an entity, or an a... | direct | -| [graphs](graphs.md) | 0..*
[Graph](Graph.md) | A list of all graphs (ontologies) in an ontology document | direct | -| [prefixes](prefixes.md) | 0..*
[PrefixDeclaration](PrefixDeclaration.md) | A collection of mappings between prefixes and namespaces, used to map CURIEs ... | direct | +| [graphs](graphs.md) | *
[Graph](Graph.md) | A list of all graphs (ontologies) in an ontology document | direct | +| [prefixes](prefixes.md) | *
[PrefixDeclaration](PrefixDeclaration.md) | A collection of mappings between prefixes and namespaces, used to map CURIEs ... | direct | @@ -68,7 +92,6 @@ URI: [obographs:GraphDocument](https://github.com/geneontology/obographs/GraphDo - ## Mappings | Mapping Type | Mapped Value | @@ -80,6 +103,8 @@ URI: [obographs:GraphDocument](https://github.com/geneontology/obographs/GraphDo + + ## LinkML Source @@ -95,7 +120,6 @@ comments: - A graph document frequently has a single graph but a multi-graph document can be used to represent multiple ontologies in an import closure in a single file. from_schema: https://github.com/geneontology/obographs -rank: 1000 slots: - meta - graphs @@ -115,7 +139,6 @@ comments: - A graph document frequently has a single graph but a multi-graph document can be used to represent multiple ontologies in an import closure in a single file. from_schema: https://github.com/geneontology/obographs -rank: 1000 attributes: meta: name: meta @@ -140,12 +163,12 @@ attributes: description: A list of all graphs (ontologies) in an ontology document. from_schema: https://github.com/geneontology/obographs rank: 1000 - multivalued: true alias: graphs owner: GraphDocument domain_of: - GraphDocument range: Graph + multivalued: true inlined: true inlined_as_list: true prefixes: @@ -155,13 +178,13 @@ attributes: from_schema: https://github.com/geneontology/obographs rank: 1000 slot_uri: sh:declare - multivalued: true alias: prefixes owner: GraphDocument domain_of: - GraphDocument - Graph range: PrefixDeclaration + multivalued: true inlined: true ``` diff --git a/docs/datamodels/obograph/Meta.md b/docs/datamodels/obograph/Meta.md index 3032b5c84..4f2319ff7 100644 --- a/docs/datamodels/obograph/Meta.md +++ b/docs/datamodels/obograph/Meta.md @@ -1,52 +1,122 @@ -# Slot: meta -_A collection of metadata about either an ontology (graph), an entity, or an axiom_ -URI: [obographs:meta](https://github.com/geneontology/obographs/meta) +# Class: Meta + + +_A collection of annotations on an entity or ontology or edge or axiom. Metadata typically does not affect the logical interpretation of the container but provides useful information to humans or machines._ + + + + + +URI: [obographs:Meta](https://github.com/geneontology/obographs/Meta) + - +```mermaid + classDiagram + class Meta + click Meta href "../Meta" + Meta : basicPropertyValues + + + + + Meta --> "*" BasicPropertyValue : basicPropertyValues + click BasicPropertyValue href "../BasicPropertyValue" + + Meta : comments + + Meta : definition + + + + + Meta --> "0..1" DefinitionPropertyValue : definition + click DefinitionPropertyValue href "../DefinitionPropertyValue" -## Applicable Classes + + Meta : deprecated + + Meta : subsets + + Meta : synonyms + + + + + Meta --> "*" SynonymPropertyValue : synonyms + click SynonymPropertyValue href "../SynonymPropertyValue" + + + Meta : version + + Meta : xrefs + + + + + Meta --> "*" XrefPropertyValue : xrefs + click XrefPropertyValue href "../XrefPropertyValue" + + + +``` -| Name | Description | -| --- | --- | -[GraphDocument](GraphDocument.md) | A graph document is a collection of graphs together with a set of prefixes th... -[Graph](Graph.md) | A graph is a collection of nodes and edges and other axioms that represents a... -[Node](Node.md) | A node is a class, property, or other entity in an ontology -[Edge](Edge.md) | An edge is a simple typed relationship between two nodes -[PropertyValue](PropertyValue.md) | A generic grouping for the different kinds of key-value associations on objec... -[Axiom](Axiom.md) | A generic grouping for any OWL axiom or group of axioms that is not captured ... -[DefinitionPropertyValue](DefinitionPropertyValue.md) | A property value that represents an assertion about the textual definition of... -[BasicPropertyValue](BasicPropertyValue.md) | A property value that represents an assertion about an entity that is not a d... -[XrefPropertyValue](XrefPropertyValue.md) | A property value that represents an assertion about an external reference to ... -[SynonymPropertyValue](SynonymPropertyValue.md) | A property value that represents an assertion about a synonym of an entity -[DomainRangeAxiom](DomainRangeAxiom.md) | This groups potentially multiple axioms that constrain the usage of a propert... -[EquivalentNodesSet](EquivalentNodesSet.md) | A clique of nodes that are all mutually equivalent -[LogicalDefinitionAxiom](LogicalDefinitionAxiom.md) | An axiom that defines a class in terms of a genus or set of genus classes and... -[PropertyChainAxiom](PropertyChainAxiom.md) | An axiom that represents an OWL property chain, e + + +## Slots +| Name | Cardinality and Range | Description | Inheritance | +| --- | --- | --- | --- | +| [subsets](subsets.md) | *
[String](String.md) | A list of subsets to which this entity belongs | direct | +| [version](version.md) | 0..1
[String](String.md) | | direct | +| [comments](comments.md) | *
[String](String.md) | A list of comments about the entity | direct | +| [definition](definition.md) | 0..1
[DefinitionPropertyValue](DefinitionPropertyValue.md) | A definition of an entity | direct | +| [xrefs](xrefs.md) | *
[XrefPropertyValue](XrefPropertyValue.md) | A list of cross references to other entities represented in other ontologies,... | direct | +| [synonyms](synonyms.md) | *
[SynonymPropertyValue](SynonymPropertyValue.md) | A list of synonym property value assertions for an entity | direct | +| [basicPropertyValues](basicPropertyValues.md) | *
[BasicPropertyValue](BasicPropertyValue.md) | A list of open-ended property values that does not correspond to those predef... | direct | +| [deprecated](deprecated.md) | 0..1
[Boolean](Boolean.md) | | direct | -## Properties -* Range: [Meta](Meta.md) +## Usages + +| used by | used in | type | used | +| --- | --- | --- | --- | +| [GraphDocument](GraphDocument.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [Graph](Graph.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [Node](Node.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [Edge](Edge.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [DefinitionPropertyValue](DefinitionPropertyValue.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [BasicPropertyValue](BasicPropertyValue.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [XrefPropertyValue](XrefPropertyValue.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [SynonymPropertyValue](SynonymPropertyValue.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [PropertyValue](PropertyValue.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [Axiom](Axiom.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [DomainRangeAxiom](DomainRangeAxiom.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [EquivalentNodesSet](EquivalentNodesSet.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [LogicalDefinitionAxiom](LogicalDefinitionAxiom.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [DisjointClassExpressionsAxiom](DisjointClassExpressionsAxiom.md) | [meta](meta.md) | range | [Meta](Meta.md) | +| [PropertyChainAxiom](PropertyChainAxiom.md) | [meta](meta.md) | range | [Meta](Meta.md) | + + ## Aliases -* annotations +* annotation collection @@ -66,26 +136,171 @@ URI: [obographs:meta](https://github.com/geneontology/obographs/meta) +## Mappings + +| Mapping Type | Mapped Value | +| --- | --- | +| self | obographs:Meta | +| native | obographs:Meta | + + + + + + + ## LinkML Source + + +### Direct + +
+```yaml +name: Meta +description: A collection of annotations on an entity or ontology or edge or axiom. + Metadata typically does not affect the logical interpretation of the container but + provides useful information to humans or machines. +from_schema: https://github.com/geneontology/obographs +aliases: +- annotation collection +slots: +- subsets +- version +- comments +- definition +- xrefs +- synonyms +- basicPropertyValues +- deprecated +slot_usage: + xrefs: + name: xrefs + domain_of: + - Meta + - PropertyValue + range: XrefPropertyValue + multivalued: true + +``` +
+ +### Induced +
```yaml -name: meta -description: A collection of metadata about either an ontology (graph), an entity, - or an axiom +name: Meta +description: A collection of annotations on an entity or ontology or edge or axiom. + Metadata typically does not affect the logical interpretation of the container but + provides useful information to humans or machines. from_schema: https://github.com/geneontology/obographs aliases: -- annotations -rank: 1000 -alias: meta -domain_of: -- GraphDocument -- Graph -- Node -- Edge -- PropertyValue -- Axiom -range: Meta +- annotation collection +slot_usage: + xrefs: + name: xrefs + domain_of: + - Meta + - PropertyValue + range: XrefPropertyValue + multivalued: true +attributes: + subsets: + name: subsets + description: A list of subsets to which this entity belongs + from_schema: https://github.com/geneontology/obographs + rank: 1000 + slot_uri: oio:inSubset + alias: subsets + owner: Meta + domain_of: + - Meta + range: string + multivalued: true + version: + name: version + from_schema: https://github.com/geneontology/obographs + rank: 1000 + slot_uri: owl:versionInfo + alias: version + owner: Meta + domain_of: + - Meta + range: string + comments: + name: comments + description: A list of comments about the entity + comments: + - for historic reasons obo format only supports a single comment per entity. This + limitation is not carried over here, but users should be aware that multiple + comments will not be supported in converting back to obo format. + from_schema: https://github.com/geneontology/obographs + rank: 1000 + slot_uri: rdfs:comment + alias: comments + owner: Meta + domain_of: + - Meta + range: string + multivalued: true + definition: + name: definition + description: A definition of an entity + from_schema: https://github.com/geneontology/obographs + rank: 1000 + slot_uri: IAO:0000115 + alias: definition + owner: Meta + domain_of: + - Meta + range: DefinitionPropertyValue + xrefs: + name: xrefs + description: A list of cross references to other entities represented in other + ontologies, vocabularies, databases, or websites. The semantics of xrefs are + intentionally weak, and most closely align with rdfs:seeAlso + from_schema: https://github.com/geneontology/obographs + rank: 1000 + alias: xrefs + owner: Meta + domain_of: + - Meta + - PropertyValue + range: XrefPropertyValue + multivalued: true + synonyms: + name: synonyms + description: A list of synonym property value assertions for an entity + from_schema: https://github.com/geneontology/obographs + rank: 1000 + alias: synonyms + owner: Meta + domain_of: + - Meta + range: SynonymPropertyValue + multivalued: true + basicPropertyValues: + name: basicPropertyValues + description: A list of open-ended property values that does not correspond to + those predefined in this standard, i.e xref, synonyms, definition + from_schema: https://github.com/geneontology/obographs + rank: 1000 + alias: basicPropertyValues + owner: Meta + domain_of: + - Meta + range: BasicPropertyValue + multivalued: true + deprecated: + name: deprecated + from_schema: https://github.com/geneontology/obographs + rank: 1000 + slot_uri: owl:deprecated + alias: deprecated + owner: Meta + domain_of: + - Meta + range: boolean ```
\ No newline at end of file diff --git a/docs/datamodels/obograph/Node.md b/docs/datamodels/obograph/Node.md index bdbf83e57..fb2600409 100644 --- a/docs/datamodels/obograph/Node.md +++ b/docs/datamodels/obograph/Node.md @@ -1,23 +1,46 @@ + + # Class: Node + + _A node is a class, property, or other entity in an ontology_ + URI: [rdf:Resource](http://www.w3.org/1999/02/22-rdf-syntax-ns#Resource) -```{mermaid} + + + +```mermaid classDiagram class Node + click Node href "../Node" Node : id Node : lbl Node : meta - Node ..> Meta : meta + + + + Node --> "0..1" Meta : meta + click Meta href "../Meta" + + + Node : propertyType + + + + + Node --> "0..1" PropertyTypeEnum : propertyType + click PropertyTypeEnum href "../PropertyTypeEnum" + Node : type @@ -34,9 +57,10 @@ URI: [rdf:Resource](http://www.w3.org/1999/02/22-rdf-syntax-ns#Resource) | Name | Cardinality and Range | Description | Inheritance | | --- | --- | --- | --- | -| [id](id.md) | 1..1
[OboIdentifierString](OboIdentifierString.md) | The unique identifier of the entity | direct | +| [id](id.md) | 1
[OboIdentifierString](OboIdentifierString.md) | The unique identifier of the entity | direct | | [lbl](lbl.md) | 0..1
[String](String.md) | the human-readable label of a node | direct | | [type](type.md) | 0..1
[String](String.md) | | direct | +| [propertyType](propertyType.md) | 0..1
[PropertyTypeEnum](PropertyTypeEnum.md) | | direct | | [meta](meta.md) | 0..1
[Meta](Meta.md) | A collection of metadata about either an ontology (graph), an entity, or an a... | direct | @@ -70,7 +94,6 @@ URI: [rdf:Resource](http://www.w3.org/1999/02/22-rdf-syntax-ns#Resource) - ## Mappings | Mapping Type | Mapped Value | @@ -82,6 +105,8 @@ URI: [rdf:Resource](http://www.w3.org/1999/02/22-rdf-syntax-ns#Resource) + + ## LinkML Source @@ -93,11 +118,11 @@ URI: [rdf:Resource](http://www.w3.org/1999/02/22-rdf-syntax-ns#Resource) name: Node description: A node is a class, property, or other entity in an ontology from_schema: https://github.com/geneontology/obographs -rank: 1000 slots: - id - lbl - type +- propertyType - meta class_uri: rdf:Resource @@ -111,7 +136,6 @@ class_uri: rdf:Resource name: Node description: A node is a class, property, or other entity in an ontology from_schema: https://github.com/geneontology/obographs -rank: 1000 attributes: id: name: id @@ -129,6 +153,7 @@ attributes: - SubsetDefinition - SynonymTypeDefinition range: OboIdentifierString + required: true lbl: name: lbl description: the human-readable label of a node @@ -158,6 +183,15 @@ attributes: domain_of: - Node range: string + propertyType: + name: propertyType + from_schema: https://github.com/geneontology/obographs + rank: 1000 + alias: propertyType + owner: Node + domain_of: + - Node + range: PropertyTypeEnum meta: name: meta description: A collection of metadata about either an ontology (graph), an entity, diff --git a/docs/datamodels/obograph/PropertyValue.md b/docs/datamodels/obograph/PropertyValue.md index cd680d0fb..8aa993f9a 100644 --- a/docs/datamodels/obograph/PropertyValue.md +++ b/docs/datamodels/obograph/PropertyValue.md @@ -1,8 +1,13 @@ + + # Class: PropertyValue + + _A generic grouping for the different kinds of key-value associations on object. Minimally, a property value has a predicate and a value. It can also have a list of xrefs indicating provenance, as well as a metadata object._ + * __NOTE__: this is an abstract class and should not be instantiated directly @@ -10,19 +15,32 @@ URI: [obographs:PropertyValue](https://github.com/geneontology/obographs/Propert -```{mermaid} + + + +```mermaid classDiagram class PropertyValue + click PropertyValue href "../PropertyValue" PropertyValue <|-- DefinitionPropertyValue + click DefinitionPropertyValue href "../DefinitionPropertyValue" PropertyValue <|-- BasicPropertyValue + click BasicPropertyValue href "../BasicPropertyValue" PropertyValue <|-- XrefPropertyValue + click XrefPropertyValue href "../XrefPropertyValue" PropertyValue <|-- SynonymPropertyValue + click SynonymPropertyValue href "../SynonymPropertyValue" PropertyValue : lang PropertyValue : meta - PropertyValue ..> Meta : meta + + + + PropertyValue --> "0..1" Meta : meta + click Meta href "../Meta" + PropertyValue : pred @@ -54,7 +72,7 @@ URI: [obographs:PropertyValue](https://github.com/geneontology/obographs/Propert | --- | --- | --- | --- | | [pred](pred.md) | 0..1
[String](String.md) | the predicate of an edge | direct | | [val](val.md) | 0..1
[String](String.md) | the value of a property | direct | -| [xrefs](xrefs.md) | 0..*
[XrefString](XrefString.md) | A list of cross references to other entities represented in other ontologies,... | direct | +| [xrefs](xrefs.md) | *
[XrefString](XrefString.md) | A list of cross references to other entities represented in other ontologies,... | direct | | [meta](meta.md) | 0..1
[Meta](Meta.md) | A collection of metadata about either an ontology (graph), an entity, or an a... | direct | | [valType](valType.md) | 0..1
[String](String.md) | the datatype of a property value | direct | | [lang](lang.md) | 0..1
[String](String.md) | the language of a property value | direct | @@ -92,7 +110,6 @@ URI: [obographs:PropertyValue](https://github.com/geneontology/obographs/Propert - ## Mappings | Mapping Type | Mapped Value | @@ -104,6 +121,8 @@ URI: [obographs:PropertyValue](https://github.com/geneontology/obographs/Propert + + ## LinkML Source @@ -123,7 +142,6 @@ comments: from_schema: https://github.com/geneontology/obographs aliases: - annotation -rank: 1000 abstract: true slots: - pred @@ -151,7 +169,6 @@ comments: from_schema: https://github.com/geneontology/obographs aliases: - annotation -rank: 1000 abstract: true attributes: pred: @@ -192,13 +209,13 @@ attributes: close_mappings: - rdfs:seeAlso rank: 1000 - multivalued: true alias: xrefs owner: PropertyValue domain_of: - Meta - PropertyValue range: XrefString + multivalued: true meta: name: meta description: A collection of metadata about either an ontology (graph), an entity, diff --git a/docs/datamodels/obograph/SynonymPropertyValue.md b/docs/datamodels/obograph/SynonymPropertyValue.md index fb6603b3e..b1838437b 100644 --- a/docs/datamodels/obograph/SynonymPropertyValue.md +++ b/docs/datamodels/obograph/SynonymPropertyValue.md @@ -1,17 +1,27 @@ + + # Class: SynonymPropertyValue + + _A property value that represents an assertion about a synonym of an entity_ + URI: [obographs:SynonymPropertyValue](https://github.com/geneontology/obographs/SynonymPropertyValue) -```{mermaid} + + + +```mermaid classDiagram class SynonymPropertyValue + click SynonymPropertyValue href "../SynonymPropertyValue" PropertyValue <|-- SynonymPropertyValue + click PropertyValue href "../PropertyValue" SynonymPropertyValue : isExact @@ -19,11 +29,21 @@ URI: [obographs:SynonymPropertyValue](https://github.com/geneontology/obographs/ SynonymPropertyValue : meta - SynonymPropertyValue ..> Meta : meta + + + + SynonymPropertyValue --> "0..1" Meta : meta + click Meta href "../Meta" + SynonymPropertyValue : pred - SynonymPropertyValue ..> ScopeEnum : pred + + + + SynonymPropertyValue --> "0..1" ScopeEnum : pred + click ScopeEnum href "../ScopeEnum" + SynonymPropertyValue : synonymType @@ -52,9 +72,9 @@ URI: [obographs:SynonymPropertyValue](https://github.com/geneontology/obographs/ | --- | --- | --- | --- | | [synonymType](synonymType.md) | 0..1
[SynonymTypeIdentifierString](SynonymTypeIdentifierString.md) | This standard follows oboInOwl in allowing an open ended list of synonym type... | direct | | [isExact](isExact.md) | 0..1
[Boolean](Boolean.md) | | direct | -| [pred](pred.md) | 0..1
[String](String.md) | the predicate of an edge | direct | +| [pred](pred.md) | 0..1
[ScopeEnum](ScopeEnum.md) | the predicate of an edge | direct | | [val](val.md) | 0..1
[String](String.md) | The textual string representing the synonym | [PropertyValue](PropertyValue.md) | -| [xrefs](xrefs.md) | 0..*
[XrefString](XrefString.md) | A list of cross references to other entities represented in other ontologies,... | [PropertyValue](PropertyValue.md) | +| [xrefs](xrefs.md) | *
[XrefString](XrefString.md) | A list of cross references to other entities represented in other ontologies,... | [PropertyValue](PropertyValue.md) | | [meta](meta.md) | 0..1
[Meta](Meta.md) | A collection of metadata about either an ontology (graph), an entity, or an a... | [PropertyValue](PropertyValue.md) | | [valType](valType.md) | 0..1
[String](String.md) | the datatype of a property value | [PropertyValue](PropertyValue.md) | | [lang](lang.md) | 0..1
[String](String.md) | the language of a property value | [PropertyValue](PropertyValue.md) | @@ -90,7 +110,6 @@ URI: [obographs:SynonymPropertyValue](https://github.com/geneontology/obographs/ - ## Mappings | Mapping Type | Mapped Value | @@ -102,6 +121,8 @@ URI: [obographs:SynonymPropertyValue](https://github.com/geneontology/obographs/ + + ## LinkML Source @@ -113,7 +134,6 @@ URI: [obographs:SynonymPropertyValue](https://github.com/geneontology/obographs/ name: SynonymPropertyValue description: A property value that represents an assertion about a synonym of an entity from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: PropertyValue slots: - synonymType @@ -145,7 +165,6 @@ slot_usage: name: SynonymPropertyValue description: A property value that represents an assertion about a synonym of an entity from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: PropertyValue slot_usage: pred: @@ -221,13 +240,13 @@ attributes: close_mappings: - rdfs:seeAlso rank: 1000 - multivalued: true alias: xrefs owner: SynonymPropertyValue domain_of: - Meta - PropertyValue range: XrefString + multivalued: true meta: name: meta description: A collection of metadata about either an ontology (graph), an entity, diff --git a/docs/datamodels/obograph/XrefPropertyValue.md b/docs/datamodels/obograph/XrefPropertyValue.md index cfa4d08fe..79dce84de 100644 --- a/docs/datamodels/obograph/XrefPropertyValue.md +++ b/docs/datamodels/obograph/XrefPropertyValue.md @@ -1,23 +1,38 @@ + + # Class: XrefPropertyValue + + _A property value that represents an assertion about an external reference to an entity_ + URI: [obographs:XrefPropertyValue](https://github.com/geneontology/obographs/XrefPropertyValue) -```{mermaid} + + + +```mermaid classDiagram class XrefPropertyValue + click XrefPropertyValue href "../XrefPropertyValue" PropertyValue <|-- XrefPropertyValue + click PropertyValue href "../PropertyValue" XrefPropertyValue : lang XrefPropertyValue : meta - XrefPropertyValue ..> Meta : meta + + + + XrefPropertyValue --> "0..1" Meta : meta + click Meta href "../Meta" + XrefPropertyValue : pred @@ -46,7 +61,7 @@ URI: [obographs:XrefPropertyValue](https://github.com/geneontology/obographs/Xre | --- | --- | --- | --- | | [pred](pred.md) | 0..1
[String](String.md) | the predicate of an edge | [PropertyValue](PropertyValue.md) | | [val](val.md) | 0..1
[String](String.md) | The textual representation of the external reference, e | [PropertyValue](PropertyValue.md) | -| [xrefs](xrefs.md) | 0..*
[XrefString](XrefString.md) | A list of cross references to other entities represented in other ontologies,... | [PropertyValue](PropertyValue.md) | +| [xrefs](xrefs.md) | *
[XrefString](XrefString.md) | A list of cross references to other entities represented in other ontologies,... | [PropertyValue](PropertyValue.md) | | [meta](meta.md) | 0..1
[Meta](Meta.md) | A collection of metadata about either an ontology (graph), an entity, or an a... | [PropertyValue](PropertyValue.md) | | [valType](valType.md) | 0..1
[String](String.md) | the datatype of a property value | [PropertyValue](PropertyValue.md) | | [lang](lang.md) | 0..1
[String](String.md) | the language of a property value | [PropertyValue](PropertyValue.md) | @@ -82,7 +97,6 @@ URI: [obographs:XrefPropertyValue](https://github.com/geneontology/obographs/Xre - ## Mappings | Mapping Type | Mapped Value | @@ -94,6 +108,8 @@ URI: [obographs:XrefPropertyValue](https://github.com/geneontology/obographs/Xre + + ## LinkML Source @@ -106,7 +122,6 @@ name: XrefPropertyValue description: A property value that represents an assertion about an external reference to an entity from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: PropertyValue slot_usage: val: @@ -127,7 +142,6 @@ name: XrefPropertyValue description: A property value that represents an assertion about an external reference to an entity from_schema: https://github.com/geneontology/obographs -rank: 1000 is_a: PropertyValue slot_usage: val: @@ -174,13 +188,13 @@ attributes: close_mappings: - rdfs:seeAlso rank: 1000 - multivalued: true alias: xrefs owner: XrefPropertyValue domain_of: - Meta - PropertyValue range: XrefString + multivalued: true meta: name: meta description: A collection of metadata about either an ontology (graph), an entity, diff --git a/docs/datamodels/obograph/index.md b/docs/datamodels/obograph/index.md index a16acccf0..14d01f9c3 100644 --- a/docs/datamodels/obograph/index.md +++ b/docs/datamodels/obograph/index.md @@ -5,6 +5,7 @@ The principle elements of a Graph are Node objects and Edge objects. A Node repr Not everything in an ontology can be represented as nodes and edges. More complex axioms have specialized structures such as DomainRangeAxiom objects and LogicalDefinitionAxiom. URI: https://github.com/geneontology/obographs + Name: obographs_datamodel @@ -13,25 +14,28 @@ Name: obographs_datamodel | Class | Description | | --- | --- | -| [Axiom](Axiom.md) | A generic grouping for any OWL axiom or group of axioms that is not captured ... | -| [BasicPropertyValue](BasicPropertyValue.md) | A property value that represents an assertion about an entity that is not a d... | -| [DefinitionPropertyValue](DefinitionPropertyValue.md) | A property value that represents an assertion about the textual definition of... | -| [DomainRangeAxiom](DomainRangeAxiom.md) | This groups potentially multiple axioms that constrain the usage of a propert... | -| [Edge](Edge.md) | An edge is a simple typed relationship between two nodes | -| [EquivalentNodesSet](EquivalentNodesSet.md) | A clique of nodes that are all mutually equivalent | +| [Axiom](Axiom.md) | A generic grouping for any OWL axiom or group of axioms that is not captured by existing constructs in this standard. + | +|         [DisjointClassExpressionsAxiom](DisjointClassExpressionsAxiom.md) | An axiom that defines a set of classes or class expressions as being mutually disjoint. Formally, there exists no instance that instantiates more that one of the union of classIds and classExpressions. | +|         [DomainRangeAxiom](DomainRangeAxiom.md) | This groups potentially multiple axioms that constrain the usage of a property depending on some combination of domain and range. | +|         [EquivalentNodesSet](EquivalentNodesSet.md) | A clique of nodes that are all mutually equivalent | +|         [LogicalDefinitionAxiom](LogicalDefinitionAxiom.md) | An axiom that defines a class in terms of a genus or set of genus classes and a set of differentia | +|         [PropertyChainAxiom](PropertyChainAxiom.md) | An axiom that represents an OWL property chain, e.g. R <- R1 o ... o Rn | +| [Edge](Edge.md) | An edge is a simple typed relationship between two nodes. When mapping to OWL, an edge represents either (a) s SubClassOf o (b) s SubClassOf p some o (c) s p o (where s and o are individuals) (d) s SubPropertyOf o (e) s EquivalentTo o (f) s type o | | [ExistentialRestrictionExpression](ExistentialRestrictionExpression.md) | An existential restriction (OWL some values from) expression | -| [Graph](Graph.md) | A graph is a collection of nodes and edges and other axioms that represents a... | -| [GraphDocument](GraphDocument.md) | A graph document is a collection of graphs together with a set of prefixes th... | -| [LogicalDefinitionAxiom](LogicalDefinitionAxiom.md) | An axiom that defines a class in terms of a genus or set of genus classes and... | -| [Meta](Meta.md) | A collection of annotations on an entity or ontology or edge or axiom | +| [Graph](Graph.md) | A graph is a collection of nodes and edges and other axioms that represents a single ontology. | +| [GraphDocument](GraphDocument.md) | A graph document is a collection of graphs together with a set of prefixes that apply across all of them | +| [Meta](Meta.md) | A collection of annotations on an entity or ontology or edge or axiom. Metadata typically does not affect the logical interpretation of the container but provides useful information to humans or machines. | | [Node](Node.md) | A node is a class, property, or other entity in an ontology | -| [PrefixDeclaration](PrefixDeclaration.md) | A mapping between an individual prefix (e | -| [PropertyChainAxiom](PropertyChainAxiom.md) | An axiom that represents an OWL property chain, e | -| [PropertyValue](PropertyValue.md) | A generic grouping for the different kinds of key-value associations on objec... | -| [SubsetDefinition](SubsetDefinition.md) | | -| [SynonymPropertyValue](SynonymPropertyValue.md) | A property value that represents an assertion about a synonym of an entity | -| [SynonymTypeDefinition](SynonymTypeDefinition.md) | | -| [XrefPropertyValue](XrefPropertyValue.md) | A property value that represents an assertion about an external reference to ... | +| [PrefixDeclaration](PrefixDeclaration.md) | A mapping between an individual prefix (e.g. GO) and a namespace (e.g. http://purl.obolibrary.org/obo/GO_) | +| [PropertyValue](PropertyValue.md) | A generic grouping for the different kinds of key-value associations on object. Minimally, a property value has a predicate and a value. It can also have a list of xrefs indicating provenance, as well as a metadata object. | +|         [BasicPropertyValue](BasicPropertyValue.md) | A property value that represents an assertion about an entity that is not a definition, synonym, or xref | +|         [DefinitionPropertyValue](DefinitionPropertyValue.md) | A property value that represents an assertion about the textual definition of an entity | +|         [SynonymPropertyValue](SynonymPropertyValue.md) | A property value that represents an assertion about a synonym of an entity | +|         [XrefPropertyValue](XrefPropertyValue.md) | A property value that represents an assertion about an external reference to an entity | +| [SubsetDefinition](SubsetDefinition.md) | None | +| [SynonymTypeDefinition](SynonymTypeDefinition.md) | None | + ## Slots @@ -41,10 +45,13 @@ Name: obographs_datamodel | [allValuesFromEdges](allValuesFromEdges.md) | A list of edges that represent subclasses of universal restrictions | | [basicPropertyValues](basicPropertyValues.md) | A list of open-ended property values that does not correspond to those predef... | | [chainPredicateIds](chainPredicateIds.md) | A list of identifiers of predicates that form the precedent clause of a prope... | +| [classExpressions](classExpressions.md) | The set of class expressions that are mutually disjoint | +| [classIds](classIds.md) | The set of named classes that are mutually disjoint | | [comments](comments.md) | A list of comments about the entity | | [definedClassId](definedClassId.md) | The class that is defined by this axiom | | [definition](definition.md) | A definition of an entity | | [deprecated](deprecated.md) | | +| [disjointClassExpressionsAxioms](disjointClassExpressionsAxioms.md) | A list of logical disjointness axioms that specify that a class or class expr... | | [domainClassIds](domainClassIds.md) | | | [domainRangeAxioms](domainRangeAxioms.md) | A list of axioms that define the domain and range of a property | | [edges](edges.md) | All edges present in a graph | @@ -68,6 +75,7 @@ Name: obographs_datamodel | [prefixes](prefixes.md) | A collection of mappings between prefixes and namespaces, used to map CURIEs ... | | [propertyChainAxioms](propertyChainAxioms.md) | A list of axioms that define an OWL property chain | | [propertyId](propertyId.md) | in an OWL restriction expression, this is the predicate | +| [propertyType](propertyType.md) | | | [rangeClassIds](rangeClassIds.md) | | | [representativeNodeId](representativeNodeId.md) | The identifier of a node that represents the class in an OWL equivalence cliq... | | [restrictions](restrictions.md) | The set of restrictions that are the differentiating features of the defined ... | @@ -78,6 +86,8 @@ Name: obographs_datamodel | [synonymType](synonymType.md) | This standard follows oboInOwl in allowing an open ended list of synonym type... | | [synonymTypeDefinitions](synonymTypeDefinitions.md) | | | [type](type.md) | | +| [unionEquivalentTo](unionEquivalentTo.md) | If present, this equates to an OWL DisjointUnion expression | +| [unionEquivalentToExpression](unionEquivalentToExpression.md) | if present, this class expression is equivalent ot the (disjoint) union of th... | | [val](val.md) | the value of a property | | [valType](valType.md) | the datatype of a property value | | [version](version.md) | | @@ -88,6 +98,8 @@ Name: obographs_datamodel | Enumeration | Description | | --- | --- | +| [NodeTypeEnum](NodeTypeEnum.md) | The main type of a node | +| [PropertyTypeEnum](PropertyTypeEnum.md) | The node subtype for property nodes | | [ScopeEnum](ScopeEnum.md) | A vocabulary of terms that can be used to "scope" a synonym | @@ -104,10 +116,13 @@ Name: obographs_datamodel | [Double](Double.md) | A real number that conforms to the xsd:double specification | | [Float](Float.md) | A real number that conforms to the xsd:float specification | | [Integer](Integer.md) | An integer | +| [Jsonpath](Jsonpath.md) | A string encoding a JSON Path | +| [Jsonpointer](Jsonpointer.md) | A string encoding a JSON Pointer | | [Ncname](Ncname.md) | Prefix part of CURIE | | [Nodeidentifier](Nodeidentifier.md) | A URI, CURIE or BNODE that represents a node in a model | | [Objectidentifier](Objectidentifier.md) | A URI or CURIE that represents an object in the model | | [OboIdentifierString](OboIdentifierString.md) | A string that represents an OBO identifier | +| [Sparqlpath](Sparqlpath.md) | A string encoding a SPARQL Property Path | | [String](String.md) | A character string | | [SynonymTypeIdentifierString](SynonymTypeIdentifierString.md) | A string that represents a synonym type | | [Time](Time.md) | A time object represents a (local) time of day, independent of any particular... | diff --git a/notebooks/OBO/CHEBI-Slimmer.ipynb b/notebooks/OBO/CHEBI-Slimmer.ipynb new file mode 100644 index 000000000..6161b3b4c --- /dev/null +++ b/notebooks/OBO/CHEBI-Slimmer.ipynb @@ -0,0 +1,4353 @@ +{ + "cells": [ + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "# CHEBI Slimmer\n", + "\n", + "Creates a simplified version of CHEBI by conflating all members of a conjugate clique." + ], + "id": "882b63db7629f552" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "## Initial setup\n", + "\n", + "Imports and use OAK to get an adapter to CHEBI sqlite database." + ], + "id": "74787c2d9005dc21" + }, + { + "metadata": { + "collapsed": true, + "ExecuteTime": { + "end_time": "2024-08-20T18:49:39.288308Z", + "start_time": "2024-08-20T18:49:39.270787Z" + } + }, + "cell_type": "code", + "source": [ + "from typing import Optional, List\n", + "from collections import defaultdict\n", + "\n", + "import pandas as pd\n", + "\n", + "from oaklib import get_adapter\n", + "from oaklib.utilities.obograph_utils import reflexive\n", + "from tests.test_converters.test_obo_format import canonical_path\n", + "\n", + "chebi = get_adapter(\"sqlite:obo:chebi\")\n", + "# session = get_adapter(\"sqlite:obo:chebi\").session\n", + "session = chebi.session" + ], + "id": "initial_id", + "outputs": [], + "execution_count": 103 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:49:39.364397Z", + "start_time": "2024-08-20T18:49:39.360986Z" + } + }, + "cell_type": "code", + "source": [ + "from oaklib.datamodels.vocabulary import IS_A\n", + "from oaklib.interfaces import OboGraphInterface\n", + "\n", + "assert isinstance(chebi, OboGraphInterface)\n" + ], + "id": "237c5d0906ac560c", + "outputs": [], + "execution_count": 104 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Set up vocabulary constants", + "id": "64e69d5dbfbdc79b" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:49:40.515475Z", + "start_time": "2024-08-20T18:49:40.512240Z" + } + }, + "cell_type": "code", + "source": [ + "# Relations\n", + "CBO = \"obo:chebi#is_conjugate_base_of\"\n", + "CAO = \"obo:chebi#is_conjugate_acid_of\"\n", + "TAUTOMER_OF = \"obo:chebi#is_tautomer_of\"" + ], + "id": "703ad334757e40df", + "outputs": [], + "execution_count": 105 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:49:40.530940Z", + "start_time": "2024-08-20T18:49:40.528328Z" + } + }, + "cell_type": "code", + "source": [ + "\n", + "CHEMICAL_ENTITY = \"CHEBI:24431\"" + ], + "id": "4538a10374439f3b", + "outputs": [], + "execution_count": 106 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:49:41.401110Z", + "start_time": "2024-08-20T18:49:41.398242Z" + } + }, + "cell_type": "code", + "source": [ + "# modify this for testing\n", + "# ROOT = AMINO_ACID\n", + "ROOT = CHEMICAL_ENTITY" + ], + "id": "d9a11b7b7e44919a", + "outputs": [], + "execution_count": 107 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:49:41.426154Z", + "start_time": "2024-08-20T18:49:41.422566Z" + } + }, + "cell_type": "code", + "source": [ + "AMINO_ACID = \"CHEBI:33709\"\n", + "AMINO_ACID_ANION = \"CHEBI:37022\"\n", + "ION = \"CHEBI:24870\" \n", + "ALPHA_AMINO_ACID = \"CHEBI:33704\"\n", + "ALPHA_AMINO_ACID_ANION = \"CHEBI:33558\"\n", + "ALPHA_AMINO_ACID_ZWITTERION = \"CHEBI:78608\"\n", + "CYSTEINE_ZWITTERION = \"CHEBI:35237\"\n", + "L_CYSTEINE_ZWITTERION = \"CHEBI:35235\"\n", + "CYSTEINATE_1_MINUS = \"CHEBI:32456\"\n", + "CYSTEINIUM = \"CHEBI:32458\"\n", + "CORD_E = \"CHEBI:213754\"\n", + "AAAE = \"CHEBI:46874\"\n", + "CITRIC_ACID = \"CHEBI:30769\"\n" + ], + "id": "6b59749828d83578", + "outputs": [], + "execution_count": 108 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## All labels", + "id": "16ad1bd007f1dd6f" + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:50:01.773393Z", + "start_time": "2024-08-20T18:49:41.785756Z" + } + }, + "cell_type": "code", + "source": [ + "labels = {k: v for k, v in chebi.labels(chebi.entities())}\n", + "len(labels)" + ], + "id": "bb9da82d69bf53ff", + "outputs": [ + { + "data": { + "text/plain": [ + "200879" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 109 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Mappings", + "id": "ab80728e19185a45" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:15.416210Z", + "start_time": "2024-08-20T18:50:02.431525Z" + } + }, + "cell_type": "code", + "source": [ + "from semsql.sqla.semsql import Statements, HasDbxrefStatement\n", + "q = session.query(HasDbxrefStatement)\n", + "xrefs = defaultdict(list)\n", + "for row in q:\n", + " if row.subject.startswith(\"CHEBI:\"):\n", + " xrefs[row.subject].append(row.value)\n", + "len(xrefs)" + ], + "id": "9f9bba0c78606429", + "outputs": [ + { + "data": { + "text/plain": [ + "161106" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 110 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:17.607713Z", + "start_time": "2024-08-20T18:50:15.833094Z" + } + }, + "cell_type": "code", + "source": [ + "q = session.query(Statements).filter(Statements.predicate == \"obo:chebi/inchi\")\n", + "inchis = {row.subject: row.value for row in q}\n", + "len(inchis)" + ], + "id": "8bb68491d1485660", + "outputs": [ + { + "data": { + "text/plain": [ + "177462" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 111 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:17.665229Z", + "start_time": "2024-08-20T18:50:17.662032Z" + } + }, + "cell_type": "code", + "source": [ + "S3H = \"CHEBI:113373\"\n", + "inchis[S3H]" + ], + "id": "12371488c8dad5e6", + "outputs": [ + { + "data": { + "text/plain": [ + "'InChI=1S/C4H8O3.Na/c1-3(5)2-4(6)7;/h3,5H,2H2,1H3,(H,6,7);/q;+1/p-1'" + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 112 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "", + "id": "79ff715a10f5ee8c" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Retrieve all Charge States\n", + "id": "f7763be85ede7b0a" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:17.994829Z", + "start_time": "2024-08-20T18:50:17.992869Z" + } + }, + "cell_type": "code", + "source": "", + "id": "2c57db8dcdc42d30", + "outputs": [], + "execution_count": null + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:20.236870Z", + "start_time": "2024-08-20T18:50:18.333154Z" + } + }, + "cell_type": "code", + "source": [ + "from semsql.sqla.semsql import Statements, HasDbxrefStatement\n", + "\n", + "session = get_adapter(\"sqlite:obo:chebi\").session\n", + "q = session.query(Statements).filter(Statements.predicate == \"obo:chebi/charge\")\n", + "charges = {row.subject: int(row.value) for row in q if row.value is not None}" + ], + "id": "481dce997828261a", + "outputs": [], + "execution_count": 113 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:20.567488Z", + "start_time": "2024-08-20T18:50:20.563444Z" + } + }, + "cell_type": "code", + "source": "len(charges)", + "id": "5ee9f24a01966ac0", + "outputs": [ + { + "data": { + "text/plain": [ + "189057" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 114 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:20.895644Z", + "start_time": "2024-08-20T18:50:20.893113Z" + } + }, + "cell_type": "code", + "source": "assert charges[L_CYSTEINE_ZWITTERION] == 0", + "id": "6c387597c60290a2", + "outputs": [], + "execution_count": 115 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:21.231594Z", + "start_time": "2024-08-20T18:50:21.229170Z" + } + }, + "cell_type": "code", + "source": "assert charges[CYSTEINATE_1_MINUS] == -1", + "id": "58b92eac4c3aea65", + "outputs": [], + "execution_count": 116 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:21.557913Z", + "start_time": "2024-08-20T18:50:21.555625Z" + } + }, + "cell_type": "code", + "source": "assert charges[CITRIC_ACID] == 0", + "id": "c55e6cb12a37ea60", + "outputs": [], + "execution_count": 117 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:21.891293Z", + "start_time": "2024-08-20T18:50:21.888851Z" + } + }, + "cell_type": "code", + "source": "assert AMINO_ACID_ANION not in charges, \"X anion terms are agnostic to a SPECIFIC charge\"", + "id": "e7d7762146973a0e", + "outputs": [], + "execution_count": 118 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:22.910361Z", + "start_time": "2024-08-20T18:50:22.552993Z" + } + }, + "cell_type": "code", + "source": [ + "# check against inchis\n", + "inchi_skip = {}\n", + "charges_by_inchi = {}\n", + "for id, inchi in inchis.items():\n", + " toks = inchi.split(\"/\")\n", + " # q is charge\n", + " qtoks = [tok for tok in toks if tok.startswith(\"q\")]\n", + " if qtoks:\n", + " qtok = qtoks[0]\n", + " if \";\" in qtok:\n", + " qtok = qtok.replace(\";\", \"\")\n", + " inchi_skip[id] = qtok\n", + " continue\n", + " if \"*\" in qtok:\n", + " # print(qtok)\n", + " mparts= qtok[1:].split(\"*\")\n", + " charge = 1\n", + " try:\n", + " for mpart in mparts:\n", + " charge *= int(mpart)\n", + " except:\n", + " odd.append(id)\n", + " continue\n", + " else:\n", + " try:\n", + " charge = int(qtok[1:])\n", + " charges_by_inchi[id] = charge\n", + " except:\n", + " odd.append(id)\n", + " continue\n", + " # p is protonation\n", + " ptoks = [tok for tok in toks if tok.startswith(\"p\")]\n", + " if ptoks and True:\n", + " ptok = ptoks[0]\n", + " try:\n", + " charge = int(ptok[1:])\n", + " \n", + " if id in charges_by_inchi:\n", + " charges_by_inchi[id] = charge + charges_by_inchi[id]\n", + " else:\n", + " charges_by_inchi[id] = charge\n", + " except:\n", + " pass\n", + " \n", + "len(charges_by_inchi)" + ], + "id": "da085426a91c079a", + "outputs": [ + { + "data": { + "text/plain": [ + "10687" + ] + }, + "execution_count": 119, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 119 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:22.969774Z", + "start_time": "2024-08-20T18:50:22.959082Z" + } + }, + "cell_type": "code", + "source": [ + "errs = []\n", + "for id, charge in charges_by_inchi.items():\n", + " if id not in charges:\n", + " errs.append({\"id\": id, \"inchi_charge\": charge, \"asserted_charge\": None, \"type\": \"MISSING\"})\n", + " elif charges[id] != charge:\n", + " errs.append({\"id\": id, \"inchi_charge\": charge, \"asserted_charge\": charges[id], \"type\": \"MISMATCH\"})\n", + "\n", + "cedf = pd.DataFrame(errs)\n", + "cedf" + ], + "id": "b46c92961495ac6c", + "outputs": [ + { + "data": { + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ] + }, + "execution_count": 120, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 120 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:23.332540Z", + "start_time": "2024-08-20T18:50:23.330433Z" + } + }, + "cell_type": "code", + "source": "# charges_by_inchi[L_CYSTEINE_ZWITTERION]", + "id": "4b25096456c81bdf", + "outputs": [], + "execution_count": 121 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Find Conjugate Cliques", + "id": "9e690eb32a60624" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:25.315969Z", + "start_time": "2024-08-20T18:50:23.352768Z" + } + }, + "cell_type": "code", + "source": [ + "conjrels = list(chebi.relationships(predicates=[CBO, CAO, TAUTOMER_OF]))\n", + "\n", + "assert len(conjrels) > 15000\n", + "assert len([r for r in conjrels if r[1] == CBO]) > 8000\n", + "assert len([r for r in conjrels if r[1] == TAUTOMER_OF]) > 1500" + ], + "id": "3cb9284c0f7ba8b1", + "outputs": [], + "execution_count": 122 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:26.014858Z", + "start_time": "2024-08-20T18:50:26.012780Z" + } + }, + "cell_type": "code", + "source": "", + "id": "12ccc4842a4a2204", + "outputs": [], + "execution_count": null + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:26.035169Z", + "start_time": "2024-08-20T18:50:26.024989Z" + } + }, + "cell_type": "code", + "source": [ + "conjrels_by_subject = defaultdict(list)\n", + "for s, p, o in conjrels:\n", + " conjrels_by_subject[s].append((p, o))" + ], + "id": "73446b9fa82786fd", + "outputs": [], + "execution_count": 123 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:26.379666Z", + "start_time": "2024-08-20T18:50:26.376Z" + } + }, + "cell_type": "code", + "source": "conjrels_by_subject[\"CHEBI:142854\"]", + "id": "efb8614663ba2054", + "outputs": [ + { + "data": { + "text/plain": [ + "[('obo:chebi#is_conjugate_acid_of', 'CHEBI:142858'),\n", + " ('obo:chebi#is_tautomer_of', 'CHEBI:142853')]" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 124 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Calculate conjugate graph and strongly connected components", + "id": "13e159ee4a9c8964" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:26.813512Z", + "start_time": "2024-08-20T18:50:26.711296Z" + } + }, + "cell_type": "code", + "source": [ + "from typing import Tuple\n", + "import networkx as nx\n", + "# find strongly connected components using cbos\n", + "\n", + "def calculate_conj_graph(conjrels: List[Tuple[str, str, str]]) -> nx.DiGraph:\n", + " conj_graph = nx.DiGraph()\n", + " for s, _, o in conjrels:\n", + " conj_graph.add_edge(s, o)\n", + " conj_graph.add_edge(o, s)\n", + " return conj_graph\n", + "\n", + "conj_graph = calculate_conj_graph(conjrels)\n", + "sccs = list(nx.strongly_connected_components(conj_graph))\n", + "assert len(sccs) > 8000\n", + "\n" + ], + "id": "5d1bc9a29166f020", + "outputs": [], + "execution_count": 125 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "## Label analysis\n", + "\n", + "The CHEBI conjugate relationships are incomplete - here we aim to complete them doing a lexical analysis of the labels.\n", + "\n", + "For example,\n", + "\n", + "- foo acid anion\n", + "- foo acid(1-)\n", + "- foo acid zwitterion\n", + "\n", + "should be in a clique" + ], + "id": "c84b70bcca329c02" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:27.151161Z", + "start_time": "2024-08-20T18:50:27.145953Z" + } + }, + "cell_type": "code", + "source": [ + "# ensure ordering is such that greedy matching works\n", + "suffixes = {\n", + " # odd edge cases - e.g. (2R)-glufosinate zwitterion(1-)\n", + " \"zwitterion(1-)\": -1,\n", + " \"zwitterion(2-)\": -2,\n", + " \"anion(1-)\": -1,\n", + " # standard\n", + " \"zwitterion\": None, \"anion\": (-99, -1), \"cation\": (1, 99), \"ion\": None, \n", + " \"ate\": None,\n", + " \"acid\": None,\n", + " \n", + "}\n", + "for i in range(1, 10):\n", + " for sign in [\"+\", \"-\"]:\n", + " suffixes[f\"({i}{sign})\"] = int(f\"{sign}{i}\")\n", + "suffixes" + ], + "id": "5fd4bf68445f7b11", + "outputs": [ + { + "data": { + "text/plain": [ + "{'zwitterion(1-)': -1,\n", + " 'zwitterion(2-)': -2,\n", + " 'anion(1-)': -1,\n", + " 'zwitterion': None,\n", + " 'anion': (-99, -1),\n", + " 'cation': (1, 99),\n", + " 'ion': None,\n", + " 'ate': None,\n", + " 'acid': None,\n", + " '(1+)': 1,\n", + " '(1-)': -1,\n", + " '(2+)': 2,\n", + " '(2-)': -2,\n", + " '(3+)': 3,\n", + " '(3-)': -3,\n", + " '(4+)': 4,\n", + " '(4-)': -4,\n", + " '(5+)': 5,\n", + " '(5-)': -5,\n", + " '(6+)': 6,\n", + " '(6-)': -6,\n", + " '(7+)': 7,\n", + " '(7-)': -7,\n", + " '(8+)': 8,\n", + " '(8-)': -8,\n", + " '(9+)': 9,\n", + " '(9-)': -9}" + ] + }, + "execution_count": 126, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 126 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:30.995745Z", + "start_time": "2024-08-20T18:50:27.501511Z" + } + }, + "cell_type": "code", + "source": "roles = list(chebi.descendants(\"CHEBI:50906\", [IS_A]))", + "id": "c10c64db4580a7ee", + "outputs": [], + "execution_count": 127 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:31.390691Z", + "start_time": "2024-08-20T18:50:31.388205Z" + } + }, + "cell_type": "code", + "source": [ + "# https://github.com/ebi-chebi/ChEBI/issues/4528\n", + "EXCLUDE_STEMS = [\"disulfide\", \"tartr\", \"tartar\"]" + ], + "id": "8400b3213240d61b", + "outputs": [], + "execution_count": 128 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:37.180635Z", + "start_time": "2024-08-20T18:50:31.730095Z" + } + }, + "cell_type": "code", + "source": [ + "from typing import Dict\n", + "\n", + "# stem to chem is a mapping between a stem (e.g. \"L-lysine\")\n", + "# and a dictionary of suffixes to CHEBI IDs\n", + "stem_to_chem: Dict[str, Dict[str, str]] = {}\n", + "stem_to_chem = defaultdict(dict)\n", + "\n", + "def _norm(label: str) -> str:\n", + " # CHEBI is inconsistent, e.g. \"amino-acid\" vs \"amino acid\"\n", + " label = label.replace(\"-acid\", \" acid\")\n", + " # label = label.replace(\" acid\", \"\")\n", + " return label\n", + "\n", + "def _de_acid(label: str) -> str:\n", + " if label.endswith(\" acid\"):\n", + " label = label.replace(\" acid\", \"\")\n", + " if label.endswith(\"ic\"):\n", + " label = label.replace(\"ic\", \"\")\n", + " if label.endswith(\"ate\"):\n", + " label = label.replace(\"ate\", \"\")\n", + " return label\n", + "\n", + "for id, label in labels.items():\n", + " if not label:\n", + " # TODO: eliminate non-classes\n", + " continue\n", + " if id in roles:\n", + " continue\n", + " label = _norm(label)\n", + " for suffix in suffixes.keys():\n", + " if label.endswith(suffix):\n", + " stem = label.replace(suffix, \"\")\n", + " stem = stem.strip()\n", + " stem_to_chem[_de_acid(stem)][suffix] = id\n", + " break\n", + "for id, label in labels.items():\n", + " if not label:\n", + " continue\n", + " label = _norm(label)\n", + " if label in stem_to_chem:\n", + " stem_to_chem[_de_acid(label)][\"\"] = id\n", + " \n", + "for stem in EXCLUDE_STEMS:\n", + " if stem in stem_to_chem:\n", + " del stem_to_chem[stem]\n", + "\n", + "assert len(stem_to_chem) > 30000" + ], + "id": "191d0cca5fcbbcaf", + "outputs": [], + "execution_count": 129 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:37.518592Z", + "start_time": "2024-08-20T18:50:37.515037Z" + } + }, + "cell_type": "code", + "source": "stem_to_chem[\"amino\"]", + "id": "8655db99a49e3963", + "outputs": [ + { + "data": { + "text/plain": [ + "{'cation': 'CHEBI:33703',\n", + " 'acid': 'CHEBI:33709',\n", + " 'zwitterion': 'CHEBI:35238',\n", + " 'anion': 'CHEBI:37022'}" + ] + }, + "execution_count": 130, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 130 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:37.860090Z", + "start_time": "2024-08-20T18:50:37.856322Z" + } + }, + "cell_type": "code", + "source": "stem_to_chem[\"citr\"]", + "id": "e9866728e7812eb3", + "outputs": [ + { + "data": { + "text/plain": [ + "{'(4-)': 'CHEBI:132362',\n", + " 'anion': 'CHEBI:133748',\n", + " '(3-)': 'CHEBI:16947',\n", + " 'acid': 'CHEBI:30769',\n", + " '(1-)': 'CHEBI:35804',\n", + " '(2-)': 'CHEBI:35808'}" + ] + }, + "execution_count": 131, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 131 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:38.194184Z", + "start_time": "2024-08-20T18:50:38.191684Z" + } + }, + "cell_type": "code", + "source": "assert not stem_to_chem[\"citrate\"]", + "id": "218adb893354594a", + "outputs": [], + "execution_count": 132 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:38.532569Z", + "start_time": "2024-08-20T18:50:38.529049Z" + } + }, + "cell_type": "code", + "source": "stem_to_chem[\"(2R)-glufosin\"]", + "id": "7f2dc8de7ba44920", + "outputs": [ + { + "data": { + "text/plain": [ + "{'ate': 'CHEBI:142853',\n", + " 'zwitterion': 'CHEBI:142854',\n", + " 'zwitterion(1-)': 'CHEBI:142858'}" + ] + }, + "execution_count": 133, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 133 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:38.871513Z", + "start_time": "2024-08-20T18:50:38.869077Z" + } + }, + "cell_type": "code", + "source": [ + "# ensure edge case of (2R)-glufosinate zwitterion(1-) is taken care of\n", + "assert not stem_to_chem[\"(2R)-glufosinate zwitterion\"]" + ], + "id": "4c64ccc7e2241c4c", + "outputs": [], + "execution_count": 134 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "## Analysis: Consistency check between lexically inferred cliques and asserted relationships\n", + "\n", + "Some of this is reported here:\n", + "\n", + "- https://github.com/ebi-chebi/ChEBI/issues/4524\n" + ], + "id": "d18ca068f686eb8e" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:39.228166Z", + "start_time": "2024-08-20T18:50:39.211098Z" + } + }, + "cell_type": "code", + "source": [ + "import numpy as np\n", + "\n", + "NO_REL = \"NO_REL\"\n", + "INVERSES = {\n", + " CBO: CAO,\n", + " CAO: CBO,\n", + " TAUTOMER_OF: TAUTOMER_OF,\n", + " NO_REL: NO_REL\n", + "}\n", + "\n", + "charge_problems = []\n", + "def make_conjrefs(clique_suffix_dict: dict, stem=None) -> List:\n", + " results = []\n", + " for suffix1, chem1 in clique_suffix_dict.items():\n", + " ch1 = suffixes.get(suffix1, None)\n", + " actual_ch1 = charges.get(chem1, None)\n", + " chem1_label = labels.get(chem1, chem1)\n", + " if isinstance(ch1, int):\n", + " if actual_ch1 is None:\n", + " charge_problems.append({\"id\": chem1, \"label\": chem1_label, \"expected\": ch1, \"asserted\": None, \"problem\": \"MISSING_CHARGE\"})\n", + " # raise ValueError(f\"Missing charge for {chem1}\")\n", + " elif ch1 != actual_ch1:\n", + " charge_problems.append({\"id\": chem1, \"label\": chem1_label, \"expected\": ch1, \"asserted\": actual_ch1, \"problem\": \"CONFLICTING_CHARGE\"})\n", + " # raise ValueError(f\"Charge mismatch for {chem1}: {ch1} vs {actual_ch1}\")\n", + " elif isinstance(ch1, tuple):\n", + " if actual_ch1 is not None:\n", + " if actual_ch1 < ch1[0] or actual_ch1 > ch1[1]:\n", + " charge_problems.append({\"id\": chem1, \"label\": chem1_label, \"expected\": ch1, \"asserted\": actual_ch1, \"problem\": \"OUTSIDE_RANGE\"})\n", + " # raise ValueError(f\"Charge mismatch for {chem1}: {ch1} vs {actual_ch1}\")\n", + " rels = conjrels_by_subject.get(chem1, [])\n", + " for suffix2, chem2 in clique_suffix_dict.items():\n", + " if suffix1 == suffix2:\n", + " continue\n", + " messages = []\n", + " matched_preds = set()\n", + " actual_p = \"NO_REL\"\n", + " for p, o in rels:\n", + " if o == chem2:\n", + " actual_p = p\n", + " matched_preds.add(p)\n", + " if len(matched_preds) > 1:\n", + " messages.append(f\"Multiple matched preds: {matched_preds}\")\n", + " \n", + " rev_matched_preds = set()\n", + " rels2 = conjrels_by_subject.get(chem2, [])\n", + " for p, o in rels2:\n", + " if o == chem1:\n", + " inv_p = INVERSES[p]\n", + " rev_matched_preds.add(inv_p)\n", + " if actual_p:\n", + " if inv_p != actual_p:\n", + " messages.append(f\"Preds mismatch: {actual_p} vs {inv_p}\")\n", + " else:\n", + " actual_p = inv_p\n", + " if len(rev_matched_preds) > 1:\n", + " messages.append(f\"Multiple matched inv preds: {rev_matched_preds}\")\n", + " if matched_preds != rev_matched_preds:\n", + " messages.append(f\"Preds mismatch: {matched_preds} vs {rev_matched_preds}\")\n", + " if messages:\n", + " raise ValueError(f\"Error in clique {clique_suffix_dict}: {messages}\")\n", + " ch2 = suffixes.get(suffix2, None)\n", + " if ch1 is None or ch2 is None:\n", + " charge_diff = None\n", + " charge_diff_sign = None\n", + " else:\n", + " if isinstance(ch1, int) and isinstance(ch2, int):\n", + " charge_diff = ch1 - ch2\n", + " charge_diff_sign = np.sign(charge_diff)\n", + " elif isinstance(ch1, int) and isinstance(ch2, tuple):\n", + " charge_diff = None\n", + " if ch1 < ch2[0]:\n", + " charge_diff_sign = -1\n", + " elif ch1 > ch2[1]:\n", + " charge_diff_sign = 1\n", + " else:\n", + " charge_diff_sign = 0\n", + " elif isinstance(ch1, tuple) and isinstance(ch2, int):\n", + " charge_diff = None\n", + " if ch1[0] < ch2:\n", + " charge_diff_sign = -1\n", + " elif ch1[1] > ch2:\n", + " charge_diff_sign = 1\n", + " else:\n", + " charge_diff_sign = 0\n", + " else:\n", + " charge_diff = None\n", + " charge_diff_sign = None\n", + " results.append({\"suffix1\": suffix1 or \"NO_SUFFIX\",\n", + " \"suffix2\": suffix2 or \"NO_SUFFIX\",\n", + " \"predicate\": actual_p,\n", + " \"chem1\": chem1,\n", + " \"chem2\": chem2,\n", + " \"charge_diff\": charge_diff,\n", + " \"charge_diff_sign\": charge_diff_sign,\n", + " \"stem\": stem,\n", + " })\n", + " return results\n", + " \n", + "make_conjrefs(stem_to_chem[\"amino\"])" + ], + "id": "f82ad334be85fe9f", + "outputs": [ + { + "data": { + "text/plain": [ + "[{'suffix1': 'cation',\n", + " 'suffix2': 'acid',\n", + " 'predicate': 'obo:chebi#is_conjugate_acid_of',\n", + " 'chem1': 'CHEBI:33703',\n", + " 'chem2': 'CHEBI:33709',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'cation',\n", + " 'suffix2': 'zwitterion',\n", + " 'predicate': 'NO_REL',\n", + " 'chem1': 'CHEBI:33703',\n", + " 'chem2': 'CHEBI:35238',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'cation',\n", + " 'suffix2': 'anion',\n", + " 'predicate': 'NO_REL',\n", + " 'chem1': 'CHEBI:33703',\n", + " 'chem2': 'CHEBI:37022',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'acid',\n", + " 'suffix2': 'cation',\n", + " 'predicate': 'obo:chebi#is_conjugate_base_of',\n", + " 'chem1': 'CHEBI:33709',\n", + " 'chem2': 'CHEBI:33703',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'acid',\n", + " 'suffix2': 'zwitterion',\n", + " 'predicate': 'NO_REL',\n", + " 'chem1': 'CHEBI:33709',\n", + " 'chem2': 'CHEBI:35238',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'acid',\n", + " 'suffix2': 'anion',\n", + " 'predicate': 'obo:chebi#is_conjugate_acid_of',\n", + " 'chem1': 'CHEBI:33709',\n", + " 'chem2': 'CHEBI:37022',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'zwitterion',\n", + " 'suffix2': 'cation',\n", + " 'predicate': 'NO_REL',\n", + " 'chem1': 'CHEBI:35238',\n", + " 'chem2': 'CHEBI:33703',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'zwitterion',\n", + " 'suffix2': 'acid',\n", + " 'predicate': 'NO_REL',\n", + " 'chem1': 'CHEBI:35238',\n", + " 'chem2': 'CHEBI:33709',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'zwitterion',\n", + " 'suffix2': 'anion',\n", + " 'predicate': 'NO_REL',\n", + " 'chem1': 'CHEBI:35238',\n", + " 'chem2': 'CHEBI:37022',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'anion',\n", + " 'suffix2': 'cation',\n", + " 'predicate': 'NO_REL',\n", + " 'chem1': 'CHEBI:37022',\n", + " 'chem2': 'CHEBI:33703',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'anion',\n", + " 'suffix2': 'acid',\n", + " 'predicate': 'obo:chebi#is_conjugate_base_of',\n", + " 'chem1': 'CHEBI:37022',\n", + " 'chem2': 'CHEBI:33709',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'anion',\n", + " 'suffix2': 'zwitterion',\n", + " 'predicate': 'NO_REL',\n", + " 'chem1': 'CHEBI:37022',\n", + " 'chem2': 'CHEBI:35238',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None}]" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 135 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:39.945773Z", + "start_time": "2024-08-20T18:50:39.941374Z" + } + }, + "cell_type": "code", + "source": "make_conjrefs(stem_to_chem[\"(2R)-glufosin\"])", + "id": "be092eb65d52d565", + "outputs": [ + { + "data": { + "text/plain": [ + "[{'suffix1': 'ate',\n", + " 'suffix2': 'zwitterion',\n", + " 'predicate': 'obo:chebi#is_tautomer_of',\n", + " 'chem1': 'CHEBI:142853',\n", + " 'chem2': 'CHEBI:142854',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'ate',\n", + " 'suffix2': 'zwitterion(1-)',\n", + " 'predicate': 'NO_REL',\n", + " 'chem1': 'CHEBI:142853',\n", + " 'chem2': 'CHEBI:142858',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'zwitterion',\n", + " 'suffix2': 'ate',\n", + " 'predicate': 'obo:chebi#is_tautomer_of',\n", + " 'chem1': 'CHEBI:142854',\n", + " 'chem2': 'CHEBI:142853',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'zwitterion',\n", + " 'suffix2': 'zwitterion(1-)',\n", + " 'predicate': 'obo:chebi#is_conjugate_acid_of',\n", + " 'chem1': 'CHEBI:142854',\n", + " 'chem2': 'CHEBI:142858',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'zwitterion(1-)',\n", + " 'suffix2': 'ate',\n", + " 'predicate': 'NO_REL',\n", + " 'chem1': 'CHEBI:142858',\n", + " 'chem2': 'CHEBI:142853',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None},\n", + " {'suffix1': 'zwitterion(1-)',\n", + " 'suffix2': 'zwitterion',\n", + " 'predicate': 'obo:chebi#is_conjugate_base_of',\n", + " 'chem1': 'CHEBI:142858',\n", + " 'chem2': 'CHEBI:142854',\n", + " 'charge_diff': None,\n", + " 'charge_diff_sign': None,\n", + " 'stem': None}]" + ] + }, + "execution_count": 136, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 136 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:40.059494Z", + "start_time": "2024-08-20T18:50:39.975188Z" + } + }, + "cell_type": "code", + "source": [ + "charge_problems = [] ## warning - global\n", + "rows = []\n", + "for stem, clique in stem_to_chem.items():\n", + " rows += make_conjrefs(clique, stem)\n", + "\n", + "# Reported here: https://github.com/ebi-chebi/ChEBI/issues/4525\n", + "pd.DataFrame(charge_problems).to_csv(\"tmp/charge_problems.csv\", index=False)\n", + "\n", + "len(rows)" + ], + "id": "c5ef02e4ed64a4d3", + "outputs": [ + { + "data": { + "text/plain": [ + "17170" + ] + }, + "execution_count": 137, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 137 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:40.412838Z", + "start_time": "2024-08-20T18:50:40.395220Z" + } + }, + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "df = pd.DataFrame(rows)" + ], + "id": "ce0321a0c59abbe8", + "outputs": [], + "execution_count": 138 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:40.747808Z", + "start_time": "2024-08-20T18:50:40.739794Z" + } + }, + "cell_type": "code", + "source": "df", + "id": "b3d677f09cff4d7e", + "outputs": [ + { + "data": { + "text/plain": [ + " suffix1 suffix2 predicate chem1 \\\n", + "0 acid anion obo:chebi#is_conjugate_acid_of CHEBI:100147 \n", + "1 anion acid obo:chebi#is_conjugate_base_of CHEBI:62070 \n", + "2 acid NO_SUFFIX NO_REL CHEBI:10046 \n", + "3 NO_SUFFIX acid NO_REL CHEBI:10045 \n", + "4 acid ate obo:chebi#is_conjugate_acid_of CHEBI:10072 \n", + "... ... ... ... ... \n", + "17165 NO_SUFFIX (1-) obo:chebi#is_conjugate_acid_of CHEBI:130073 \n", + "17166 (1-) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:9162 \n", + "17167 NO_SUFFIX (1-) obo:chebi#is_conjugate_acid_of CHEBI:79317 \n", + "17168 ate acid obo:chebi#is_conjugate_base_of CHEBI:994 \n", + "17169 acid ate obo:chebi#is_conjugate_acid_of CHEBI:995 \n", + "\n", + " chem2 charge_diff charge_diff_sign \\\n", + "0 CHEBI:62070 NaN NaN \n", + "1 CHEBI:100147 NaN NaN \n", + "2 CHEBI:10045 NaN NaN \n", + "3 CHEBI:10046 NaN NaN \n", + "4 CHEBI:71201 NaN NaN \n", + "... ... ... ... \n", + "17165 CHEBI:91301 NaN NaN \n", + "17166 CHEBI:79317 NaN NaN \n", + "17167 CHEBI:9162 NaN NaN \n", + "17168 CHEBI:995 NaN NaN \n", + "17169 CHEBI:994 NaN NaN \n", + "\n", + " stem \n", + "0 nalidix \n", + "1 nalidix \n", + "2 Wyerone \n", + "3 Wyerone \n", + "4 xanthuren \n", + "... ... \n", + "17165 5,20-diHEPE \n", + "17166 sinigrin \n", + "17167 sinigrin \n", + "17168 cis,cis-2-amino-3-(3-oxoprop-1-enyl)but-2-enedio \n", + "17169 cis,cis-2-amino-3-(3-oxoprop-1-enyl)but-2-enedio \n", + "\n", + "[17170 rows x 8 columns]" + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
suffix1suffix2predicatechem1chem2charge_diffcharge_diff_signstem
0acidanionobo:chebi#is_conjugate_acid_ofCHEBI:100147CHEBI:62070NaNNaNnalidix
1anionacidobo:chebi#is_conjugate_base_ofCHEBI:62070CHEBI:100147NaNNaNnalidix
2acidNO_SUFFIXNO_RELCHEBI:10046CHEBI:10045NaNNaNWyerone
3NO_SUFFIXacidNO_RELCHEBI:10045CHEBI:10046NaNNaNWyerone
4acidateobo:chebi#is_conjugate_acid_ofCHEBI:10072CHEBI:71201NaNNaNxanthuren
...........................
17165NO_SUFFIX(1-)obo:chebi#is_conjugate_acid_ofCHEBI:130073CHEBI:91301NaNNaN5,20-diHEPE
17166(1-)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:9162CHEBI:79317NaNNaNsinigrin
17167NO_SUFFIX(1-)obo:chebi#is_conjugate_acid_ofCHEBI:79317CHEBI:9162NaNNaNsinigrin
17168ateacidobo:chebi#is_conjugate_base_ofCHEBI:994CHEBI:995NaNNaNcis,cis-2-amino-3-(3-oxoprop-1-enyl)but-2-enedio
17169acidateobo:chebi#is_conjugate_acid_ofCHEBI:995CHEBI:994NaNNaNcis,cis-2-amino-3-(3-oxoprop-1-enyl)but-2-enedio
\n", + "

17170 rows Ă— 8 columns

\n", + "
" + ] + }, + "execution_count": 139, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 139 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:41.120173Z", + "start_time": "2024-08-20T18:50:41.111065Z" + } + }, + "cell_type": "code", + "source": "df[(df[\"charge_diff_sign\"] < 0) & (df[\"predicate\"] == CAO)]", + "id": "4f5986951d764fa1", + "outputs": [ + { + "data": { + "text/plain": [ + " suffix1 suffix2 predicate chem1 \\\n", + "15589 (1+) (5+) obo:chebi#is_conjugate_acid_of CHEBI:83553 \n", + "\n", + " chem2 charge_diff charge_diff_sign \\\n", + "15589 CHEBI:82771 -4.0 -1.0 \n", + "\n", + " stem \n", + "15589 N(4)-bis(aminopropyl)spermidine " + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
suffix1suffix2predicatechem1chem2charge_diffcharge_diff_signstem
15589(1+)(5+)obo:chebi#is_conjugate_acid_ofCHEBI:83553CHEBI:82771-4.0-1.0N(4)-bis(aminopropyl)spermidine
\n", + "
" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 140 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:41.198931Z", + "start_time": "2024-08-20T18:50:41.189397Z" + } + }, + "cell_type": "code", + "source": "df[(df[\"charge_diff_sign\"] > 0) & (df[\"predicate\"] == CBO)]", + "id": "577c5ec2b5fe7e60", + "outputs": [ + { + "data": { + "text/plain": [ + " suffix1 suffix2 predicate chem1 \\\n", + "15588 (5+) (1+) obo:chebi#is_conjugate_base_of CHEBI:82771 \n", + "\n", + " chem2 charge_diff charge_diff_sign \\\n", + "15588 CHEBI:83553 4.0 1.0 \n", + "\n", + " stem \n", + "15588 N(4)-bis(aminopropyl)spermidine " + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
suffix1suffix2predicatechem1chem2charge_diffcharge_diff_signstem
15588(5+)(1+)obo:chebi#is_conjugate_base_ofCHEBI:82771CHEBI:835534.01.0N(4)-bis(aminopropyl)spermidine
\n", + "
" + ] + }, + "execution_count": 141, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 141 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:41.313133Z", + "start_time": "2024-08-20T18:50:41.306184Z" + } + }, + "cell_type": "code", + "source": " df.groupby([\"predicate\"]).size()", + "id": "b381a47bce47eda3", + "outputs": [ + { + "data": { + "text/plain": [ + "predicate\n", + "NO_REL 3260\n", + "obo:chebi#is_conjugate_acid_of 6378\n", + "obo:chebi#is_conjugate_base_of 6378\n", + "obo:chebi#is_tautomer_of 1154\n", + "dtype: int64" + ] + }, + "execution_count": 142, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 142 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:41.476203Z", + "start_time": "2024-08-20T18:50:41.422225Z" + } + }, + "cell_type": "code", + "source": "df.to_csv(\"tmp/conjrels.csv\", index=False)\n", + "id": "5ee58eef65ddbc9d", + "outputs": [], + "execution_count": 143 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:41.558828Z", + "start_time": "2024-08-20T18:50:41.548557Z" + } + }, + "cell_type": "code", + "source": [ + "# group by suffix1, suffix2, predicate, and count the number of rows\n", + "summary = df.groupby([\"suffix1\", \"suffix2\", \"predicate\"]).size()\n", + "summary.sort_values(ascending=False)" + ], + "id": "f1be2d07a0d5ce95", + "outputs": [ + { + "data": { + "text/plain": [ + "suffix1 suffix2 predicate \n", + "acid ate obo:chebi#is_conjugate_acid_of 1522\n", + "ate acid obo:chebi#is_conjugate_base_of 1522\n", + "NO_SUFFIX (1-) obo:chebi#is_conjugate_acid_of 1332\n", + "(1-) NO_SUFFIX obo:chebi#is_conjugate_base_of 1332\n", + "NO_SUFFIX (4-) obo:chebi#is_conjugate_acid_of 673\n", + " ... \n", + "anion(1-) acid NO_REL 1\n", + "(6-) (2-) NO_REL 1\n", + " (3-) NO_REL 1\n", + " (4-) NO_REL 1\n", + "zwitterion(2-) zwitterion obo:chebi#is_conjugate_base_of 1\n", + "Length: 424, dtype: int64" + ] + }, + "execution_count": 144, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 144 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:42.149304Z", + "start_time": "2024-08-20T18:50:41.621761Z" + } + }, + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "from scipy.stats import entropy\n", + "\n", + "data = df\n", + "\n", + "# Display the first few rows of the data to understand its structure\n", + "data.head()\n", + "\n", + "# Create a function to calculate entropy for each group\n", + "def calculate_entropy(group):\n", + " counts = group.value_counts(normalize=True)\n", + " return entropy(counts)\n", + "\n", + "# Grouping the data by suffix1 and suffix2, then calculating entropy for the predicates\n", + "entropy_data = data.groupby(['suffix1', 'suffix2'])['predicate'].apply(calculate_entropy).unstack(fill_value=0)\n", + "\n", + "# Plotting the entropy heatmap with reversed x-axis\n", + "plt.figure(figsize=(10, 8))\n", + "sns.heatmap(entropy_data.loc[:, ::-1], annot=True, cmap=\"coolwarm\")\n", + "plt.title('Entropy of Predicate Distribution by Suffix1 and Suffix2 (Reversed X-Axis)')\n", + "plt.xlabel('Suffix2')\n", + "plt.ylabel('Suffix1')\n", + "plt.show()\n" + ], + "id": "b15618246ffb5c58", + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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DAsWLMDr169RqVIlzJs3TzmjnVCf42/evMHEiRNha2urnAHzfT179sTJkyexZcsWtGjRQuNn6L59+2BkZJTnpCvm5uZo37499u/fj9u3b2PdunXw9/dXjsaoWbMmBgwYgG3btqFt27ZqPdbafDYD2T27derUyXfSEaLCECm07dsm+o9xcXHBmDFjMHbs2AK3HTZsGExNTT/oWkRE/wUKhQKdO3eGh4eH8kKpRELZvHkzfv75Zxw/fjzPWTbp05aSkoLmzZtjyZIlhbquGVF+2ANF9AHWrFmDBw8e4LfffsPOnTv1nQ6RwXr79i22bt2KP//8E48ePUL//v31nRL9B+RMDHH06FG1afbpv2HXrl2oWrVqsfW0EwEsoIg+yMmTJ/H3339jypQpOp8AguhjYmZmhl27dkEul2PhwoVFmnGSqLDMzMwQHByMqVOnonXr1h88YyZ9XF6+fImtW7dix44d7IGkYsUhfERERERERFriNOZERERERERaYgFFRERERESkJRZQREREREREWmIBRUREREREpCXOwveJ8/A+o+8Uiuzgwvwvivqhuk7PEjS+0BYvaSho/KlBhbuQpyHZvdRa0PgpxqUEjT9owt+CxicqqhPjHggav83KzwWNT3k7PvmpoPHFsjRB4wtN6GPzt0hPQeMX1WET7S5CLYTOGXF6e+yCsAeKiIiIiIhISyygiIiIiIiItMQhfEREREREpEZkwgsQa8IeKCIiIiIiIi2xB0pgSUlJGD58OMLCwmBiYgIAuHz5MoKCghAVFaV1nBUrVqBChQro1atXsecoMRFh4oiq8HS3Q7osC7sOJGBXeILBxU+XZWDpxp9w+mIMTCUS9O3aHn27tte47b2HCQjesAO37z9ExXL2mDikLxrUctVr/sUdP0OWjp/WL0bMhShITM3Qvlt/tO/WP982L/55gtnje2LcjB/gWit7Eor0tFT8vGkpYi+ehEIhR0P3Nug9eJKguWvrQ+LLZDJ8v24jzl64BFOJBL27d0UvH2+N2874dgnO/646acbCWVPR9IsGAIADh49i175wvH2Xgi/c6mLoyLHYsWMbzp87B4lEAl+/HvD19dMYe968ubh08aLKujlzvkGjxo2RkSHD9u3bcOb0GaSlp6FO7ToYMXKkVs8PMOz9r8/YjC9c/PSMTCzcfQxRf8TB1MQYA1o3xsDWjTVu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ItK9jvMt9J3Cf9bhHbxcAxERffrYA6WZ1rPwERERERER/dexgCIiIiIiItISh/AREREREZEahYJD+DRhDxQREREREZGWWEDpUFJSEnx9fZGRkYFff/0VHTt2hJubG/z9/XHjxo0820mlUvj4+CA9PV2H2RIRERHRf5kcIr0thowFlA4FBwcjICAAf/31FyZNmoTAwEBERESgevXqCAwMRGpqqsZ21tbWaNWqFdavX6/jjImIiIiI6H0soHQkISEBUVFR8Pb2xrlz51ClShV0794djo6OmDhxIhITE3Hv3r082/v7+2P79u1ISUnRYdZERERERPQ+FlA6EhYWBg8PD0gkElhZWeHevXuIiYmBXC7H/v37YWFhAUdHxzzb29nZoVKlSoiMjNRh1kRERET0X6WASG+LIeMsfDoSHR2NgIAAAECnTp1w8uRJ9O3bF0ZGRhCLxQgJCYGlpWW+Mdzd3REdHY3evXvrImUiIiIiIsqFPVA6kJmZibi4ODg7OwPInhQiMTERs2fPxu7du9GtWzdMmzYNSUlJ+capUqUKbt68qYuUiYiIiOg/TqEQ6W0xZCygdCA5ORlyuRzW1tYAgKVLl6JatWoICAhArVq1MH/+fJibm2Pfvn24fPky3NzclMu6deuUcaysrAossoiIiIiISDgcwqcDIlF2FS2XywEAN27cQP/+/ZX3i8ViuLq64smTJxgwYADCw8OV970/rE8ul0MsZs1LRERERMIz9HOR9IUFlA5YWVnByMgIUqkUAGBvb4/4+HiVbR48eIDatWvDzMwMTk5OGuNIpVLY2toKni8REREREWnG7gwdyOlhiouLAwD06tULu3fvRnh4OB4+fIilS5fiyZMn8PHxyTdOXFwcatSooYuUiYiIiIhIA/ZA6Ujz5s0RGxuLgIAAdOrUCe/evUNISAiePXuG6tWrY9u2bbCxsck3RmxsLHr16qWjjImIiIjov8zQJ3PQFxZQOuLn5wdfX1+kpqbC3NwcPXv2RM+ePbVun5CQgAcPHqBDhw4CZklERERERPnhED4dcXR0hKenZ5EvhLt79274+/ujZMmSxZwZEREREZE6XkhXMxZQOhQUFITQ0FDIZLJCtZNKpTh9+jRGjBghUGZERERERKQNDuHTIXt7e0RERBS6nbW1NQ4ePChARkREREREVBgsoIiIiIiISA0nkdCMQ/iIiIiIiIi0xB4oIiIiIiJSI9d3AgaKPVBERERERERaYg8UERERERGp4TlQmrEHioiIiIiISEssoIiIiIiIiLTEIXxERERERKRGAQ7h04Q9UERERERERFpiAaVDSUlJ8PX1RUZGBn777Td07doVbm5uGDRoEO7fv59nO5lMBh8fHyQlJekwWyIiIiL6L1MoRHpbDBkLKB0KDg5GQEAA/vrrLwQGBqJ169bYt28fatSogYEDB+Ldu3ca20kkEvTr1w/BwcE6zpiIiIiIiN7HAkpHEhISEBUVBW9vb/z8889wc3PD+PHjUblyZXz99dcoVaoUIiMj82zv7e2NkydP4vHjxzrMmoiIiIiI3scCSkfCwsLg4eEBiUSCR48eoU6dOsr7RCIRqlWrhj/++CPP9hKJBO7u7ggLC9NBtkRERET0X6eASG+LIWMBpSPR0dFwd3cHANja2uL58+cq9z979gxSqTTfGM2aNUN0dLRgORIRERERUf5YQOlAZmYm4uLi4OzsDADo2LEjjh07hlOnTiEzMxMHDhzAn3/+iYyMjHzjODs74/bt28jKytJF2kRERET0HyZX6G8xZLwOlA4kJydDLpfD2toaANCiRQuMHj0aY8eORVZWFho3boxu3brh7du3ePLkCTp37qxs6+3tjXnz5gEArKysIJfL8erVK9jY2OjluRARERER/ZexgNIBkSh7HKdcLleuGzlyJIYOHYo3b97AxsYG48ePR4UKFWBvb4/w8HDldhYWFsq/FQqFSjwiIiIiItItDuHTASsrKxgZGSnPcTp06BAWLFgAiUQCGxsbpKWl4dKlS2jcuDGMjY3h5OSkXN7vaZJKpTA2Nlb2ZBERERERCYWTSGjGAkoHxGIxXF1dERcXBwCoVKkSdu3ahePHj+Ovv/7CpEmT8Nlnn6FFixb5xomLi0P16tXZA0VEREREpCcsoHSkefPmiI2NBQDUqlULc+fOxeLFi+Hr6wsACAkJgVic/8sRExNTYJFFRERERFQcFAqR3hZDxnOgdMTPzw++vr5ITU2Fubk5/Pz84Ofnp3X7lJQUnD17FhMnThQwSyIiIiIiyg97oHTE0dERnp6eiIyMLFL7yMhItGzZEhUrVizmzIiIiIiI1CkU+lsMGQsoHQoKCkJoaChkMlmh2slkMoSGhiIoKEigzIiIiIiISBscwqdD9vb2iIiIKHQ7iUSCgwcPCpAREREREREVBnugiIiIiIhIjRwivS2FlZ6ejunTp6Nhw4bw8PDA5s2bC2yTkJAANzc3XLp0qVCPxR4oIiIiIiL6qH333Xe4fv06tm3bhidPniAoKAjly5dHhw4d8mwzd+5cpKSkFPqxWEAREREREZEaQ59OPEdKSgr27NmDDRs2oGbNmqhZsybu3r2L0NDQPAuogwcP4t27d0V6PBZQZLBmzm8qaPxvZ10QNP6uZTaCxi/19pmg8TvPMRE0/vGpLwSL3W6xrWCxqWCd+3sIGv/wjt8Eiz15trC5d3i1Q9D4k//0ETT+nJcTBI3/94Blgsav9ssCQeNfaTNPsNhG/YS9DmTmT9GCxm8ct0HQ+IcqjBU0fj3bh4LGpw9z+/ZtZGZmws3NTbmuQYMGWLduHeRyudq1VqVSKYKDg7F582Z06dKl0I/Hc6CIiIiIiOijlZiYCGtra0gkEuU6W1tbpKen49WrV2rbL168GD4+PqhatWqRHo89UEREREREpEaf12OSyWRql/6RSCQqRVKO1NRUtfU5t3PHOH/+PGJiYnDo0KEi58YeKCIiIiIiMighISFo0KCByhISEqJxW1NTU7VCKee2mZmZcl1aWhpmz56NOXPmqKwvLPZAERERERGRGkURphMvLoGBgRg8eLDKOk29TwBQtmxZSKVSZGZmwtg4u7xJTEyEmZkZSpcurdzu2rVrePToEcaNG6fSfvjw4ejevTvmzdPuPEaD6IFycXHBpEmT1Nbv378fXl5eKuv++ecfzJo1Cx4eHqhTpw46d+6MTZs2ITMzs1CPef36dQwdOhRubm5wc3NDQEAAzp07p7w/ISEBLi4uSEhIUGs7depUTJ06VWU7TcuKFSsAAP3799d4f4sW2SeEXrp0CS4uLgCyZxHx8vLSuD+mTp2KHj16ICsrq1DPlYiIiIjoYyKRSGBhYaGy5FVAVa9eHcbGxvjjjz+U62JiYlC7dm2VCSTq1KmD48ePIzw8XLkAwLfffovx48drnZvB9EAdOnQIPXr0QNOmec+89vTpU/Tp0weVK1fG999/j7Jly+LPP//E0qVLcfHiRYSEhKjNsqHJs2fPMHDgQAwePBjTp0+HSCTC4cOH8eWXX2Lnzp2oW7duofPfs2cPPvvsM5V1JUqUUP49ZMgQDBkyROV+IyMjtTglSpTAvHnzMHToUHTt2hWenp4AgBMnTuDw4cMIDw/X2I6IiIiIqDjJ9XgOVGGYm5uje/fumDt3LhYuXIh//vkHmzdvxqJFiwBk90aVKlUKZmZmcHJyUmtftmxZ2NhoP3uywRRQFSpUwLx58xAREZFndTl//nw4ODhg48aNyiLCwcEB9erVQ+fOnfHzzz8jICCgwMc6fvw4KlasiDFjxijXjR07FjExMdi3b1+RCqgyZcrAzs4uz/tLlCiR7/3v8/DwgI+PD+bMmYNDhw4hPT0ds2bNwrhx4+Ds7Fzo3IiIiIiIPmXTpk3D3LlzMXDgQFhYWGDs2LFo164dgOzv1osWLYKvr2+xPJbBFFATJkzA3LlzsWnTJowcOVLt/hcvXuDkyZMICQlR64EpX748fH19sXv3bq0KKLFYjMePH+Phw4cqVeiSJUsMpndn6tSp6NSpE1atWoUXL17A0dFRrQeLiIiIiIiye6GWLFmCJUuWqN0XFxeXZ7v87suLQZwDBWR3nY0bNw7r1q3Do0eP1O6/ceMGFAoFateurbF9gwYNcPv2bbUZODTp2LEjzMzM0KlTJwwZMgQbN27EnTt3ULZsWdjaGsYFOK2srDBz5kzs2LEDJ06cwKJFiwymuCMiIiKiT59CIdLbYsgMpoACsidbcHJywoIF6lcKT05OBgCVmTTel7Ne08WycrOxscHevXvh5+eHW7duITg4GN7e3hg4cCCSkpKKlHuXLl2UE1LkTErxvpCQEJX73dzcEB8fn2/MJk2awMTEBOXKlUPFihWLlBcRERERERUfgxnCB2RPqjB37lz07dsXJ06cULnP0tISQPZQvnLlyqm1/eeffwBk99xoo1y5cpg3bx7mzp2LGzdu4NixY9ixYwdmzpyJH3/8ESYmJgAAhYYriMnlcrXztNavX4+yZcsqb5uamqrc36dPH/Tv319lXe5JJ3KbO3cuKleujIcPH2LdunVqUy4SEREREQlFnxfSNWQGVUABQP369eHn54cFCxZg2LBhyvW1a9eGkZERrl+/rrGAun79OlxcXPKcgOJ969evR+3atdG0aVOIxWLUrl0btWvXRoUKFZTjJi0sLAAAb968UWv/+vVrfP755yrrypcvn28vkaWlpcZZP/Jy+PBhREVFYc+ePfi///s/BAcHo0OHDqhWrZrWMYiIiIiIqHgZ1BC+HJMnT0ZKSgo2bdqkXFemTBm0adMGa9euVbsO0tOnT7F371706tVLq/ixsbHYsWOH2vrSpUujTJkyAICSJUvCwcEBV65cUdkmKysLN27cQI0aNQr7tLT24sULzJs3D8OGDUONGjXQv39/VK9eHTNmzOA1oIiIiIiI9MggCyhra2tMnjwZjx8/Vlk/Y8YMJCcnY/jw4bh8+TKePHmCX3/9FQMGDECjRo3Qt29freJ/+eWXOHv2LGbMmIHr16/j4cOHOHLkCIKDg1WueNyvXz/88MMPOHz4MBISEnD16lVMnDgREokEbdu2Ldbn/L65c+eiTJkyGD16NIDsWQPnz5+PmzdvYtu2bYI9LhERERFRDjlEelsMmcEN4cvRo0cP7Nu3T3luE5A9U9/u3buxdu1aTJ48GS9fvoSDgwP69OmDgQMHanURXSB7mODWrVvx448/YsiQIUhNTUWlSpUwevRo9OzZU7ndoEGDYGRkhLVr1+LRo0coUaIEmjRpgh07dsDMzKzYnzMAREZGIioqCqGhoSrDEV1dXTF06FCsXLkSbdq0gaOjoyCPT0REREREeTOIAkrT/OsikQi7du1SW29jY4NZs2Zh1qxZH/SYDRs2VBkimJf+/furTf7wvooVKxY4f7ym4YLva9y4sTKGt7c3vL29NW43ceJETJw4sYCMiYiIiIg+HCeR0Mwgh/AREREREREZIoPogSpOW7ZswcqVK/O839vbG/PmzdNhRkREREREHx9Dv6CtvnxyBZSfnx+8vLzyvD9nenIiIiIiIqLC+uQKqNKlS6N06dL6ToOIiIiIiD5Bn1wBRUREREREH07OSSQ04iQSREREREREWmIPFBERERERqeE05pqxgCKDtebHeEHjb/i+iqDxxZlJgsbf8ay1oPGBs4JGF797LWB0WwFjU0EO7/hN3ykUWaPSNwSN32be54LG3730oaDxfSYPEjT+iUeHBI3f5kRXQeOHdbwvWOze/9/evcfFnL7/A3+NlFNtIcs6pWW3SOecOojWZh0SkRUbyToT9mMpNoW1jmut7KrWMUvWIZJjWKeSKMkxS20lWULCpuO8f3/4ma/ZBtPUNJNez8djHg9zz3uu9zWjmGvu+33dLVcqLTYAHH2wR6nxe220UGr8UdOUu6iqvt4zpcan6oVL+IiIiIiIiOTEGSgiIiIiIipDAPeBkoUzUERERERERHLiDBQREREREZXBNuaycQZKjQQFBcHT0/ONj3t6eiIoKKgKMyIiIiIiotdxBkqNeHt7v7WAIiIiIiKqKmxjLhsLKDXSoEEDVadARERERERvwSV8SpKYmAgPDw+Ym5vDwsICY8eOxYMHDwAAp0+fxqBBg2Bubo4BAwYgLi4OQNklfEePHkXv3r1hYWGBBQsWoLS0VCWvhYiIiIiIXmIBpQTPnj3D+PHjYWdnh/3792P9+vXIzMxEaGgobt26hYkTJ+Lzzz9HZGQk+vfvj0mTJiEnJ0cqxu3btzF9+nR4eHhg9+7dKCkpQWJioopeERERERHVNIKgups64xI+JSgoKMCkSZMwevRoiEQitGrVCs7Ozrh8+TJ27doFKysrTJo0CQAwbtw45Ofn4+nTp1Ixdu/eDRsbG3h5eQEA/P39ceLEiap+KURERERE9BoWUErQpEkTDBw4EJs2bcKNGzdw+/Zt3Lx5E1ZWVvj7779hYmIidfz06dPLxEhNTUX79u0l9zU1NaXuExEREREpk1jgRrqysIBSgvv372Pw4MEwMTGBra0thg4dipMnTyI5ORm1a8v/lgv/mb/U1NSs7FSJiIiIiKgcWEApwdGjR6Grq4uQkBDJ2JYtWyAIAgwMDHDjxg2p44cNG1amffknn3yCpKQkyX2xWIyUlBQYGxsrN3kiIiIiInojNpFQAj09PWRnZyMuLg537txBaGgooqOjUVRUBA8PDyQkJGDjxo3IyMhASEgIbt26BRsbG6kYQ4cOxdWrV7F27VqkpaVh6dKlyM7OVtErIiIiIqKahk0kZGMBpQR9+vTBgAED4OPjg8GDByM+Ph6zZ89GamoqmjVrhqCgIOzevRv9+/fHkSNHEBwcjKZNm0rFMDAwwNq1a3HgwAEMHDgQOTk5cHR0VNErIiIiIiIigEv4lEJDQwPz58/H/PnzpcZfddTr2bMnevbsWeZ5U6dOlbr/qg06EREREVFVU/eZIFXhDBQREREREZGcOANFRERERERliDkDJRNnoIiIiIiIiOTEAoqIiIiIiEhOXMJHRERERERlCIJI1SmoJc5AERERERERyYkzUEREREREVAbbmMsmEgS+Ne8ze5dTqk6BlGTHioZKjT90Zq5S4yvTsalpSo0vbvCBUuM7L9FXanwiIlIvMVGOqk5BpjAVfowcqZ5vCQAu4SMiIiIiIpIbl/AREREREVEZ3AdKNs5AERERERERyYkzUEREREREVAY7JcjGGagq5OvrC19fX1WnQURERERECuIMVBWaO3euqlMgIiIiIpILZ6BkYwFVhXR0dFSdAhERERERVQCX8CkgMTERHh4eMDc3h4WFBcaOHYsHDx4gIiICnp6eWL16Nbp06QIbGxssXrwYr7ba+u8SvhMnTmDQoEEwMzND3759ER0dLXnM09MTa9euxZgxY2BmZobevXvjzJkzVf5aiYiIiIjo/7CAKqdnz55h/PjxsLOzw/79+7F+/XpkZmYiNDQUAJCUlIS///4b4eHh8Pf3R1hYGM6ePVsmTlxcHKZOnQpXV1dERkbC3d0dM2bMwNWrVyXHBAcHo1+/fti/fz+MjY3h7+8PsVhcZa+ViIiIiGousaC6mzpjAVVOBQUFmDRpEiZPnoxWrVrB2toazs7OuHXrFgCgtLQUCxcuxMcffwxXV1cYGxvjypUrZeJs3boVvXv3hpeXFwwNDTF69Gg4Oztjw4YNkmMcHR3h5uaG1q1bY+LEibh37x5ycnKq7LUSEREREZE0XgNVTk2aNMHAgQOxadMm3LhxA7dv38bNmzdhZWUFAGjcuDG0tbUlx2tra6OkpKRMnNTUVAwbNkxqzNLSErt375bcb9OmjVQcADJjERERERFVNjaRkI0FVDndv38fgwcPhomJCWxtbTF06FCcPHkSycnJAAAtLa0yzxFk/PTVqVOnzJhYLJZaoqepqSlXLCIiIiIiqhosoMrp6NGj0NXVRUhIiGRsy5Yt5S5sDA0NJUXXK0lJSTA0NKyUPImIiIiIqPKxgConPT09ZGdnIy4uDi1btsShQ4cQHR0NU1PTcsXx8vLC8OHDsXnzZjg6OuLkyZM4evQo1q9fr6TMiYiIiIjkx95lsrGAKqc+ffrgwoUL8PHxgUgkgqmpKWbPno2goCAUFRXJHcfc3BzLli1DUFAQli9fDkNDQ6xatQrdunVTYvZERERERFQRIoEX1bzX7F1OqToFUpIdKxoqNf7QmblKja9Mx6amKTW+uMEHSo3vvERfqfGJiEi9xEQ5qjoFmYKPqO7cE3qr7tzvwjbmREREREREcmIBRUREREREJCdeA0VERERERGXwQh/ZOANFREREREQkJ85AERERERFRGWLOQMnEGSgiIiIiIiI5cQaKiIiIiIjKUO1uRyIVnvvtWEARVVPVeZ8mZesV9LGqUyAiIqL3FJfwERERERERyYkzUEREREREVAbbmMvGGSgiIiIiIiI5sYB6A19fX/j6+lZavMLCQgwaNAi5udLXrWRkZMDMzOydz/f09MTt27crLR8iIiIiorcRi1V3U2dcwvcGc+fOrdR4oaGh6NmzJxo2bCgZu3fvHsaPH4/CwsJ3Pn/y5MmYP38+tmzZUql5ERERERGR/DgD9QY6OjrQ0dGplFj//vsvwsLC8OWXX0rGjh07Bjc3N2hpackVo2vXrnj48CESEhIqJSciIiIiIiq/976ASkxMhIeHB8zNzWFhYYGxY8fiwYMHiIiIgKenJ1avXo0uXbrAxsYGixcvlvS7/+8SvhMnTmDQoEEwMzND3759ER0dLXnM09MTa9euxZgxY2BmZobevXvjzJkzksejoqJgaGiIpk2bSsZOnjyJadOmlWumy8nJCeHh4RV5O4iIiIiI5CIIqrups/e6gHr27BnGjx8POzs77N+/H+vXr0dmZiZCQ0MBAElJSfj7778RHh4Of39/hIWF4ezZs2XixMXFYerUqXB1dUVkZCTc3d0xY8YMXL16VXJMcHAw+vXrh/3798PY2Bj+/v4Q//8FnGfOnIGtra1UzO+//x7Dhg0r1+uxs7NDTEyMijc1IyIiIiKqud7rAqqgoACTJk3C5MmT0apVK1hbW8PZ2Rm3bt0CAJSWlmLhwoX4+OOP4erqCmNjY1y5cqVMnK1bt6J3797w8vKCoaEhRo8eDWdnZ2zYsEFyjKOjI9zc3NC6dWtMnDgR9+7dQ05ODgDg+vXraNu2bYVfT9u2bfHkyRPcvXu3wrGIiIiIiN5GLKjups7e6yYSTZo0wcCBA7Fp0ybcuHEDt2/fxs2bN2FlZQUAaNy4MbS1tSXHa2tro6SkpEyc1NTUMrNFlpaW2L17t+R+mzZtpOIAkMR6/PixVPOId7G0tJT82draGuvWrQMASYzHjx+jZcuWcscjIiIiIqLK8V4XUPfv38fgwYNhYmICW1tbDB06FCdPnkRycjIAyGzgIGt5XJ06dcqMicViyRI9ANDU1HxjLJFIhNLSUrnz3rt3r+TPdevWlTrnq3hERERERMrEq0Zke68LqKNHj0JXVxchISGSsS1btpT7GiJDQ0NJ0fVKUlISDA0N5Xp+48aN8eTJE7nPZ2BgIHP81R5STZo0kTsWERERERFVnvf6Gig9PT1kZ2cjLi4Od+7cQWhoKKKjo1FUVFSuOF5eXjhy5Ag2b96M9PR0bNq0CUePHoWHh4dcz+/QoQNu3rypyEuQcvPmTejr60t18yMiIiIioqrzXs9A9enTBxcuXICPjw9EIhFMTU0xe/ZsBAUFlauIMjc3x7JlyxAUFITly5fD0NAQq1atQrdu3eR6voODAyIiIhR9GRKJiYmwt7fnEj4iIiIiUjpBpd0c1PfzrkhgT2yle/78OXr06IHIyEi0aNFCoRiCIKBXr15YunQpbGxs5H6evcsphc5HRERERFUjJspR1SnItCJC/O6DlGSmm/oulFPfzN4j2traGDFiBHbs2KFwjNjYWHz44YflKp6IiIiIiBTFNuaysYCqIhMmTMCJEyckjSDKa+3atQgMDKzcpIiIiIiIqFze62ug1Em9evWwb98+hZ+/devWSsyGiIiIiIgUwQKKiIiIiIjKYKcE2biEj4iIiIiISE6cgSIiIiIiojLE6t7NQUU4A0VERERERCQnzkCR2vI7PE6p8Rd/EarU+PR2O1Y0VFrsiFRTpcUGAM9mx5Uav1+AplLjK9sh/+dKjd9nobbSYv+2qp3SYgPA2Om3lRp//0Llflvc31+5G1vO+16+DeoVteC7OKXG7z3cTmmxj2yLVVpsAPCdr7zcAWBJgHLzD/npU6XGzy36QKnx1RWvgZKNM1BERERERERyYgFFREREREQkJy7hIyIiIiKiMriETzbOQBEREREREcmJBZQaOXToEB49eqTqNIiIiIiIIBYEld3UGQsoNXH37l1Mnz4dL168UHUqRERERET0Biyg1ISg5pU2ERERERGxgKpyiYmJ8PDwgLm5OSwsLDB27Fg8ePAAn332GQDgs88+Q0REBADg6NGj6Nu3L8zNzTFkyBCcP39elakTERERUQ0iiFV3U2csoKrQs2fPMH78eNjZ2WH//v1Yv349MjMzERoaip07dwIAdu7cib59+yIlJQWzZ8/GxIkTsW/fPgwYMABjx45FRkaGil8FEREREVHNxTbmVaigoACTJk3C6NGjIRKJ0KpVKzg7O+Py5cto1KgRAKBRo0aoW7cu1q9fj6FDh8LFxQUAMHLkSFy4cAHh4eHw9fVV5csgIiIiohqAl5jIxgKqCjVp0gQDBw7Epk2bcOPGDdy+fRs3b96ElZVVmWNTU1Nx6NAh/PHHH5Kx4uJi2NvbV2XKRERERET0GhZQVej+/fsYPHgwTExMYGtri6FDh+LkyZNITk4uc2xpaSnGjh2LgQMHSo3XrVu3irIlIiIioppMrObXIqkKC6gqdPToUejq6iIkJEQytmXLFgiCAJFIJHWsoaEhsrKyYGBgIBlbtmwZDA0N4e7uXmU5ExERERHR/2ETiSqkp6eH7OxsxMXF4c6dOwgNDUV0dDSKiopQr149AEBKSgr+/fdfeHl54eDBgwgLC0NmZiY2bdqETZs2oU2bNqp9EURERERENRgLqCrUp08fDBgwAD4+Phg8eDDi4+Mxe/ZspKamQltbGwMGDMD06dOxc+dOWFhYYNmyZdi2bRv69u2LHTt24Mcff0SnTp1U/TKIiIiIqAYQBEFlN3XGJXxVSENDA/Pnz8f8+fOlxr28vAAAy5cvx/LlyyXj/fr1Q79+/aoyRSIiIiIiegsWUEREREREVIZYvSeCVIZL+IiIiIiIiOTEAoqIiIiIiEhOLKCIiIiIiKgMQSyo7FZehYWFmDNnDmxsbGBvb48NGza88diTJ0/C1dUVlpaWcHFxwfHjx8t1LhZQRERERERUrS1btgxXr17F5s2bERAQgDVr1uDw4cNljktJScGUKVMwePBg7N27F8OGDcO0adOQkpIi97nYRIKIiIiIiMpQ827iEvn5+di5cyd+++03mJiYwMTEBLdu3cLWrVvxxRdfSB27f/9+dO3aFSNHjgQAGBgY4M8//8ShQ4dgbGws1/lYQBERERERUbWVkpKCkpISWFpaSsasra0RHBwMsViMWrX+b9HdoEGDUFxcXCbGs2fP5D6fSFD3naqoQuxdTqk6BaIqt2NFQ6XGF4uUu/p52P8eKTU+ERGpl5goR1WnIJPvbwUqO/eCUbVQVFQkNaalpQUtLa0yxx45cgQLFixAbGysZCw1NRV9+/ZFXFwcGjVq9Mbz3Lp1C66urvj555/x+eefy5Ubr4EiIiIiIiK1EhISAmtra6lbSEiIzGNfvHhRprB6df+/RdjrHj9+jKlTp8LKygqfffaZ3LlxCR8REREREamV8ePHY/To0VJjsmafAKBOnTplCqVX9+vWrSvzOQ8fPsTo0aMhCAJWr14ttczvXVhAERERERFRGaq80udNy/Vkadq0KXJzc1FSUoLatV+WNzk5Oahbty4++OCDMsffv39f0kQiLCzsrUv8ZOESPiIiIiIiqrbat2+P2rVr49KlS5KxxMREmJqalplZys/Px9dff41atWrh999/R9OmTct9PhZQSiQIArZu3Sq57+vrC19fXxVmREREREQkH0Gsult51KtXDwMHDkRgYCAuX76MY8eOYcOGDZJZppycHBQUvGyIERISgszMTCxdulTyWE5OTrm68HEJnxJduHABCxYswIgRIwAAc+fOVXFGRERERETvHz8/PwQGBmLUqFHQ1tbG1KlT4ezsDACwt7fH4sWL4ebmhiNHjqCgoADu7u5Szx80aBCWLFki17lYQCnRf9eN6ujoqCgTIiIiIqL3V7169bB06VLJzNLrbt68Kfnz4cOHK3wuLuGTU0ZGBsaMGQNLS0v06NEDYWFhAIDjx49j4MCBMDU1hY2NDb755hv8+++/yMrKkkwbGhkZIT4+vswSvhMnTmDQoEEwMzND3759ER0dLXnM09MTa9euxZgxY2BmZobevXvjzJkzVfuiiYiIiKjGEguCym7qjAWUHAoLC+Ht7Y0GDRpgx44dmDdvHn766Sds3rwZ06ZNw/Dhw3Ho0CGsWrUKZ8+exY4dO/DRRx8hKCgIABATEyO1MzIAxMXFYerUqXB1dUVkZCTc3d0xY8YMXL16VXJMcHAw+vXrh/3798PY2Bj+/v4Qi8u5KJSIiIiIiCoNl/DJISYmBo8fP8YPP/wAbW1tfPLJJ/juu++Qn5+P7777DkOHDgUAtGzZEra2trh16xY0NDSgq6sLAGjSpEmZmFu3bkXv3r3h5eUFADA0NMTly5exYcMGrFy5EgDg6OgINzc3AMDEiRPh6uqKnJwchbqFEBERERGVhyrbmKszFlBy+Pvvv2FoaAhtbW3J2ODBgwEA2dnZWLt2LW7duoVbt27h9u3bcHV1fWfM1NRUDBs2TGrM0tISu3fvltxv06aN5M+vzl1SUlKRl0JERERERBXAAkoOrzbk+q+UlBR4eHjAyckJNjY28PLywubNm+WKWadOnTJjYrFYaomepqZmmWP4TQARERERVQWxmJ87ZWEBJYc2bdogIyMDL168QL169QAAS5cuxZMnT9CpUyf8+OOPkmMzMjLQtm1bAIBIJHpjTENDQyQnJ0uNJSUlwdDQUAmvgIiIiIiIKgObSMjB3t4e+vr6mDdvHlJTU3H8+HFs374drVu3xs2bN3H58mX8/fffWLJkCa5cuYKioiIAkBRbV69eRWFhoVRMLy8vHDlyBJs3b0Z6ejo2bdqEo0ePwsPDo8pfHxERERERyYczUHKoXbs2fv31VyxYsACDBg2Cvr4+Zs2aBVdXV6SkpMDLywt16tRBp06dMHnyZBw4cADAy/bldnZ2GDZsmKQxxCvm5uZYtmwZgoKCsHz5chgaGmLVqlXo1q2bKl4iEREREZEUXjkim0jgRTXvNXuXU6pOgajK7VjRUKnxxSLlTt4P+98jpcYnIiL1EhPlqOoUZJoe9Fxl5141VfvdB6kIZ6CIiIiIiKgMgU0kZOI1UERERERERHJiAUVERERERCQnLuEjIiIiIqIyxGyVIBNnoIiIiIiIiOTEGSgiIiIiIiqDTSRk4wwUERERERGRnDgDRUTvnbzajZUaf+z020qNT0REROqLBRQREREREZXBJXyycQkfERERERGRnDgDRUREREREZXACSjbOQFWxrKwsGBkZISsrS9WpEBERERFROXEGqop99NFHiImJQaNGjVSdChERERHRG/EaKNlYQFUxDQ0NNGnSRNVpEBERERGRAriEr4q9voQvLy8P/v7+sLW1hbW1Nb799lvk5eUBAOLj4+Hk5IRt27bBwcEBFhYW+Pbbb1FUVKTiV0BEREREVHOxgFKhKVOm4MaNGwgODsbGjRuRmpoKX19fyeMPHjzAkSNHsG7dOgQFBSE6Ohp79+5VXcJEREREVGMIgqCymzrjEj4Vef78Oc6fP4/Dhw/D0NAQALB8+XL07dsXaWlpAIDi4mJ89913+OSTT2BkZAQHBwdcuXIFQ4cOVWXqREREREQ1FgsoFTl9+jQ++OADSfEEAG3btoWuri7S0tKgo6MDADAwMJA8rq2tjZKSkirPlYiIiIhqHjGbSMjEJXwqUqdOHZnjpaWlKC0tldzX0tKSelzdpzSJiIiIiN5nLKBUxN7eHk+fPpUs1wOA27dv4/nz51KzUkREREREpD5YQKlInTp10L17d8yePRuXL1/G5cuXMXv2bHTq1AmffvqpqtMjIiIiohqOTSRkYwGlQkuXLkWrVq3g5eWFMWPG4JNPPsEvv/yi6rSIiIiIiOgN2ESiirVs2RI3b96U3F+5cqXM47p06SJ1HAAsWbJEqbkREREREb0isImETJyBIiIiIiIikhNnoIiIiIiIqAzOQMnGGSgiIiIiIiI5sYAiIiIiIiKSE5fwERERERFRGWI1byeuKpyBIiIiIiIikhNnoIiIiIiIqAw2kZCNBRRRNeV3eJxS4y/+IlSp8ZVp1rKnSo3/3cJuSo3/vX+cUuMTEf3XMZ+/lRq/12pDpcaPnnlPqfELGrVUanyqXriEj4iIiIiISE6cgSIiIiIiojIENpGQiTNQREREREREcuIMFBERERERlSFmEwmZOAP1mvj4eBgZGUnu37hxAxcvXpTcj4uLQ2pqqsLxjYyMEB8fX6EciYiIiIhIdVhAvcbS0hIxMTGS+5MnT0Z6errkvpeXFx4+fKhw/JiYGFhaWlYkRSIiIiKiKiGIBZXd1BmX8L1GS0sLTZo0UVp8ZcYmIiIiIiLle69moIKCgmBkZCTzduLECclxzs7OmD17tuT+ypUrMXPmTKklfJ6enrh79y78/Pzg6+sLJycnAMDIkSMRFBQEAEhISICbmxvMzMzg4uKCI0eOSGL6+vrC19cXAwYMQLdu3ZCeni61hK+wsBDLly+Ho6MjLCwsMGHCBNy793IPg6ysLBgZGSE6Ohq9evWCqakpxo8fjydPnij1/SMiIiIiord7r2agvL29MWzYMMn9X3/9FTExMfj0009x/vx59OzZE/fv30dmZqZUW8bY2FiMHDlSKlZQUBBcXV3h7e0NNzc3FBcXo1u3bggKCoKdnR1ycnIwfvx4zJgxAw4ODrh06RJ8fX3RuHFj2NjYAAAiIyPxyy+/QF9fH23atJGKHxAQgIsXL2Lp0qXQ09PDihUrMGnSJOzevVtyTHBwMFauXAlBEDBx4kRs3LgRM2bMUMI7R0REREQkjW3MZXuvCqgGDRqgQYMGAIBTp04hIiIC4eHhuHbtGsLDwwG8nDWys7PDuXPn8PDhQ2hqaiIlJQUODg64deuWJJaenh40NDSgo6MDHR0dybiuri4aNGiA3377Dba2tvjqq68AAAYGBrhx4wY2b94sKaBMTU0lM1evy8vLQ2RkJH777Td07doVALBixQr06NEDsbGxMDR8uVu3j48PzMzMAAAuLi64cuVKZb9lRERERERUDu9VAfVKVlYWZs2aBT8/P3To0AENGzZEQEAAnj17hgsXLsDOzg65ublITEwE8LI7XqNGjcp1jrS0NJw4cUKqKURxcbGk+AGAFi1ayHxueno6xGIxzM3NJWN6enowNDREamqqJIaBgYHkcW1tbRQXF5crRyIiIiIiRQlisapTUEvvXQFVWFgIHx8fODg4SJbzffTRRzAwMEBCQgISEhIwaNAgZGdn4+LFiygsLISDg0O5z1NSUgIXFxdMmDBBarx27f97S+vUqSPzuW8aLy0thfi1H1RNTc1y50VERERERMrzXjWRAIAFCxbgxYsXWLBggdS4vb09jh07hrt376JDhw6wsbFBYmIiYmJiFCqgDA0NkZGRAQMDA8nt+PHjiIqKeudzW7Vqhdq1a+PSpUuSsdzcXGRkZEjNYBERERERkXp5rwqonTt34uDBg/jhhx+Qn5+PnJwc5OTk4NmzZ7C3t0dkZCRMTU2hqakJGxsbXLt2DU+ePIGFhYXMePXr10daWpqk+139+vVx69YtPHv2DMOHD8fVq1fx008/IT09HVFRUVi5ciWaN2/+zjwbNGgAd3d3LFy4EPHx8UhJScG3336LZs2awc7OrhLfESIiIiIixYjFgspu6uy9WsK3b98+5OfnS3XiA4BBgwYhICAAIpEI1tbWAAB9fX20bt0aRkZGUsvuXufh4YEVK1YgPT0da9asgaenJ5YtW4bMzEzMmTMHwcHBWLFiBdavX4+mTZtK2pbLY/bs2Vi6dCl8fHxQVFQEW1tbbNq0CVpaWhV7E4iIiIiISGlEAvsTvtfsXU6pOgVSEr/D45Qaf/EXoUqNr0wNm3+o1PiTJ7ZVavzv/eOUGp+I6L+O+fyt1Pi9Viv3EoXomfeUGr+gUUulxm9kaq/U+Ioa+r90lZ17x49tVHbud3mvlvAREREREREp03u1hI+IiIiIiCqHoObXIqkKZ6CIiIiIiIjkxAKKiIiIiIhITlzCR0REREREZXAJn2ycgSIiIiIiIpITZ6CIiIiIiKgMsSBWdQpqiftAvee4DxQRERGReouJclR1CjK5+dxW2bkjVrdT2bnfhUv4iIiIiIiI5MQlfEREREREVAabSMjGGSgiIiIiIiI5cQaKiIiIiIjK4AyUbNV2Bio+Ph5GRkaS+zdu3MDFixcl9+Pi4pCamqpwfCMjI8THx1cox9fFxsZi5syZZcbXrl0LX1/ftz43NTUVnp6eYL8PIiIiIiLVqrYFlKWlJWJiYiT3J0+ejPT0dMl9Ly8vPHz4UOH4MTExsLS0rEiKEkVFRfj+++8xdepUqfH9+/cjKCjonc9v27Ytmjdvjj179lRKPkRERERE7yIIgspu6qzaFlBaWlpo0qSJ0uI3adIEWlpalRLr4MGDaN68OQwMDAAAJSUlCAgIwJw5c9CqVSu5YgwfPhzBwcFq/wNFRERERPQ+U1kBFRQUBCMjI5m3EydOSI5zdnbG7NmzJfdXrlyJmTNnSi3h8/T0xN27d+Hn5wdfX184OTkBAEaOHCmZ4UlISICbmxvMzMzg4uKCI0eOSGL6+vrC19cXAwYMQLdu3ZCeni61hK+wsBDLly+Ho6MjLCwsMGHCBNy7dw8AkJWVBSMjI0RHR6NXr14wNTXF+PHj8eTJE0n88PBw9OrVS3I/Pz8fN2/exI4dO+Se5TIzM0N+fj5iY2PL8zYTEREREVElUlkTCW9vbwwbNkxy/9dff0VMTAw+/fRTnD9/Hj179sT9+/eRmZkpNesSGxuLkSNHSsUKCgqCq6srvL294ebmhuLiYnTr1g1BQUGws7NDTk4Oxo8fjxkzZsDBwQGXLl2Cr68vGjduDBsbGwBAZGQkfvnlF+jr66NNmzZS8QMCAnDx4kUsXboUenp6WLFiBSZNmoTdu3dLjgkODsbKlSshCAImTpyIjRs3YsaMGcjLy0NycjKWL18uOfaDDz7A9u3by/V+iUQidO3aFWfOnIG9vX25nktEREREVF5isVjVKagllRVQDRo0QIMGDQAAp06dQkREBMLDw3Ht2jWEh4cDeDlrZGdnh3PnzuHhw4fQ1NRESkoKHBwccOvWLUksPT09aGhoQEdHBzo6OpJxXV1dNGjQAL/99htsbW3x1VdfAQAMDAxw48YNbN68WVJAmZqaSmauXpeXl4fIyEj89ttv6Nq1KwBgxYoV6NGjB2JjY2FoaAgA8PHxgZmZGQDAxcUFV65cAfCyuYWmpiZatmxZ4fesXbt2nIEiIiIiIlIhlbcxz8rKwqxZs+Dn54cOHTqgYcOGCAgIwLNnz3DhwgXY2dkhNzcXiYmJAF52x2vUqFG5zpGWloYTJ05ILZcrLi6WFD8A0KJFC5nPTU9Ph1gshrm5uWRMT08PhoaGSE1NlcR4dX0TAGhra6O4uBgA8PjxY+jq6qJWLflWS+7btw8BAQGS+/Pnz8eAAQMk53306JFccYiIiIiIKoJtzGVTaQFVWFgIHx8fODg4SJbzffTRRzAwMEBCQgISEhIwaNAgZGdn4+LFiygsLISDg0O5z1NSUgIXFxdMmDBBarx27f97+XXq1JH53DeNl5aWSk1rampqyjxOJBKVa/rTyclJqlhr3Lix5M9isVjuQoyIiIiIiCqfSj+NL1iwAC9evMCCBQukxu3t7XHs2DHcvXsXHTp0gI2NDRITExETE6NQAWVoaIiMjAwYGBhIbsePH0dUVNQ7n9uqVSvUrl0bly5dkozl5uYiIyNDagbrTfT19fH06VO5u+dpa2tL5amtrS11Xn19fbniEBERERFR5VNZAbVz504cPHgQP/zwA/Lz85GTk4OcnBw8e/YM9vb2iIyMhKmpKTQ1NWFjY4Nr167hyZMnsLCwkBmvfv36SEtLk3S/q1+/Pm7duoVnz55h+PDhuHr1Kn766Sekp6cjKioKK1euRPPmzd+ZZ4MGDeDu7o6FCxciPj4eKSkp+Pbbb9GsWTPY2dm98/lGRkYQi8UV2tT3lZs3b6JDhw4VjkNERERE9C6CIFbZTZ2pbAnfvn37kJ+fL9WJDwAGDRqEgIAAiEQiWFtbA3g5i9O6dWsYGRlJLbt7nYeHB1asWIH09HSsWbMGnp6eWLZsGTIzMzFnzhwEBwdjxYoVWL9+PZo2bSppWy6P2bNnY+nSpfDx8UFRURFsbW2xadMmufaJ+uCDD2BmZobExES0a9dOrvPJIggCkpKSMHz4cIVjEBERERFRxYgE7syqdBEREdi7dy/CwsIUjnH+/Hn4+/vj0KFD5boOyt7llMLnJCIiIiLli4lyVHUKMvX1vqKycx/cYKqyc78LOxJUgf79+yM7OxtpaWkKx/jjjz/w9ddfs4kEEREREZEK8dN4FdDS0oK/vz9++eUXhZ6fmpqK7OxsDBkypJIzIyIiIiKSTRALKrupM5XvA1VTODo6wtFRsenZtm3bSjYXJiIiIiIi1eEMFBERERERkZw4A0VERERERGWI1byduKpwBoqIiIiIiEhOnIEiIiIiIqIy1L2Zg6pwBoqIiIiIiEhOLKCIiIiIiIjkxCV8RERERERUhiBmEwlZOANFREREREQkJ85AERERERFRGWwiIVu1nYGKj4+HkZGR5P6NGzdw8eJFyf24uDikpqYqHN/IyAjx8fEVyvF1sbGxmDlzJgBAEASEhobCyckJVlZWGDVqFG7fvv3G56ampsLT0xOCwB9iIiIiIiJVqrYFlKWlJWJiYiT3J0+ejPT0dMl9Ly8vPHz4UOH4MTExsLS0rEiKEkVFRfj+++8xdepUAMD27duxYcMG+Pv7Y/fu3WjZsiXGjh2LFy9eyHx+27Zt0bx5c+zZs6dS8iEiIiIiIsVU2wJKS0sLTZo0UVr8Jk2aQEtLq1JiHTx4EM2bN4eBgQEAYM+ePfD29kbPnj1haGiIwMBAPHnyRGoG7b+GDx+O4OBgzkIRERERUZUQBLHKbupMZQVUUFAQjIyMZN5OnDghOc7Z2RmzZ8+W3F+5ciVmzpwptYTP09MTd+/ehZ+fH3x9feHk5AQAGDlyJIKCggAACQkJcHNzg5mZGVxcXHDkyBFJTF9fX/j6+mLAgAHo1q0b0tPTpZbwFRYWYvny5XB0dISFhQUmTJiAe/fuAQCysrJgZGSE6Oho9OrVC6amphg/fjyePHkiiR8eHo5evXpJ7s+aNQsDBgyQ3BeJRBAEAc+ePXvj+2VmZob8/HzExsaW+70mIiIiIqLKobICytvbGzExMZLb8OHD0bp1a/Tq1Qvnz58HANy/fx+ZmZlSMzOxsbFwcHCQihUUFIRmzZphzpw5mDt3Lnbt2iUZ9/b2Rk5ODsaPHw83NzdERUXh66+/hq+vLxISEiQxIiMjMX36dISEhKBNmzZS8QMCAnD06FEsXboU27dvR0lJCSZNmgTxa60dg4ODsXLlSvz++++4cuUKNm7cCADIy8tDcnIy7OzsJMfa2NigWbNmkvs7d+5ESUkJrK2t3/h+iUQidO3aFWfOnJH3LSYiIiIiUphYLKjsps5U1oWvQYMGaNCgAQDg1KlTiIiIQHh4OK5du4bw8HAAL2eN7OzscO7cOTx8+BCamppISUmBg4MDbt26JYmlp6cHDQ0N6OjoQEdHRzKuq6uLBg0a4LfffoOtrS2++uorAICBgQFu3LiBzZs3w8bGBgBgamoqmbl6XV5eHiIjI/Hbb7+ha9euAIAVK1agR48eiI2NhaGhIQDAx8cHZmZmAAAXFxdcuXIFwMvmFpqammjZsqXM9yE5ORlLly7FmDFj3rkksV27dpyBIiIiIiJSIZW3Mc/KysKsWbPg5+eHDh06oGHDhggICMCzZ89w4cIF2NnZITc3F4mJiQBedsdr1KhRuc6RlpaGEydOSDWFKC4ulhQ/ANCiRQuZz01PT4dYLIa5ublkTE9PD4aGhkhNTZXEeHV9EwBoa2ujuLgYAPD48WPo6uqiVq2yk31JSUkYO3YsunfvjmnTpgEA9u3bh4CAAMkx8+fPlyz309PTw6NHj8r12omIiIiIFMGNdGVTaQFVWFgIHx8fODg4YNiwYQCAjz76CAYGBkhISEBCQgIGDRqE7OxsXLx4EYWFhWWW78mjpKQELi4umDBhgtR47dr/9/Lr1Kkj87lvGi8tLZVawqepqSnzOJFIJHXcK/Hx8ZgwYQLs7Ozw448/SgosJycnqWKtcePGkj+LxWKZhRgREREREVUNlX4aX7BgAV68eIEFCxZIjdvb2+PYsWO4e/cuOnToABsbGyQmJiImJkahAsrQ0BAZGRkwMDCQ3I4fP46oqKh3PrdVq1aoXbs2Ll26JBnLzc1FRkaG1AzWm+jr6+Pp06dS3fP++usvTJw4EQ4ODli1apVU8aWtrS2Vp7a2ttR59fX15XzVRERERERU2VRWQO3cuRMHDx7EDz/8gPz8fOTk5CAnJwfPnj2Dvb09IiMjYWpqCk1NTdjY2ODatWt48uQJLCwsZMarX78+0tLSJN3v6tevj1u3buHZs2cYPnw4rl69ip9++gnp6emIiorCypUr0bx583fm2aBBA7i7u2PhwoWIj49HSkoKvv32WzRr1kyqMcSbGBkZQSwWS23qO2/ePHz00Ufw8/NDbm6u5LUXFBS8NdbNmzfRoUOHd56TiIiIiKiiBLGgsps6U9kSvn379iE/P1+ydO+VQYMGISAgACKRSNKVTl9fH61bt4aRkZHUsrvXeXh4YMWKFUhPT8eaNWvg6emJZcuWITMzE3PmzEFwcDBWrFiB9evXo2nTppK25fKYPXs2li5dCh8fHxQVFcHW1habNm2Sa5+oDz74AGZmZkhMTES7du2Qk5ODpKQkAECPHj2kjl28eDHc3NxkxhEEAUlJSRg+fLhcORMRERERUeUTCdyZVekiIiKwd+9ehIWFKRzj/Pnz8Pf3x6FDh8p1HZS9yymFz0lEREREyhcT5ajqFGTqPihGZec+vcdeZed+F3YkqAL9+/dHdnY20tLSFI7xxx9/4Ouvv2YTCSIiIiIiFeKn8SqgpaUFf39//PLLLwo9PzU1FdnZ2RgyZEglZ0ZEREREVP0VFhZizpw5sLGxgb29PTZs2PDGY69fvw53d3eYm5tj8ODBuHr1arnOxQKqijg6OuLHH39U6Llt27ZFeHg4RCJRJWdFRERERCRbdWoisWzZMly9ehWbN29GQEAA1qxZg8OHD5c5Lj8/H+PGjYONjQ0iIiJgaWmJ8ePHIz8/X+5zsYAiIiIiIqJqKz8/Hzt37sTcuXNhYmKCzz//HF9//TW2bt1a5tiDBw+iTp06mDVrFtq2bYu5c+eiQYMGMoutN2EBRUREREREZQhiscpu5ZGSkoKSkhJYWlpKxqytrZGcnAzxf2IlJyfD2tpasrJLJBLByspKas/Xd2EBRUREREREaqWoqAjPnz+XuhUVFck8NicnBw0bNpTaYkhfXx+FhYWSPWJfP/bDDz+UGmvcuDH++ecfuXNT2T5QVDXUtS0mEREREak3VX6ODAoKwpo1a6TGpkyZgqlTp5Y59sWLF2X2Z311/79F15uOfVNxJgsLKCIiIiIiUivjx4/H6NGjpcb+W/i8UqdOnTIF0Kv7devWlevY/x73NiygiIiIiIhIrWhpab2xYPqvpk2bIjc3FyUlJahd+2V5k5OTg7p16+KDDz4oc+zDhw+lxh4+fFhmWd/b8BooIiIiIiKqttq3b4/atWtLNYJITEyEqakpatWSLnfMzc2RlJQEQXjZKl0QBFy8eBHm5uZyn48FFBERERERVVv16tXDwIEDERgYiMuXL+PYsWPYsGEDRo4cCeDlbFRBQQEA4IsvvsDTp0+xaNEi3L59G4sWLcKLFy/Qp08fuc8nEl6VX0RERERERNXQixcvEBgYiOjoaGhra2PMmDHw8vICABgZGWHx4sVwc3MDAFy+fBkBAQFITU2FkZER5s+fjw4dOsh9LhZQREREREREcuISPiIiIiIiIjmxgCIiIiIiIpITCygiIiIiIiI5sYAiIiIiIiKSEwsoIiIiIiIiOdVWdQJENVlOTg5KSkrw32aYzZs3V1FG5ZOdnY1Hjx6hVq1a0NfXR9OmTSs1fnV6fwRBgEgkeudxd+7cQatWrSrtnLm5uahVqxb09PQqJeb74Pnz57hx44bUz6aRkREaNGig6tTkwvxVS9n5K/P39q+//sL169elcu/QoQPatm1baedg/m9WFfmTemABVYOdPXsWZ86cwbVr1/D48WOIRCI0adIEHTp0QPfu3dG5c2e1jv/06VNs2LABV65ckfkhOywsrELxi4uLsXfv3jfGX7x4scKxY2JiMG/ePNy7d09q/NWH8Bs3bigc+5U7d+5g27ZtyMjIQGBgIE6fPo02bdrAxsamQnETExMRHh6OmJgYPHnyRDIuEonQuHFjODg4wN3dHVZWVgqfQxnvz5o1a+Q+dsqUKeWO/+WXX2Lp0qUwNDSU+bggCNi0aRNWr16NpKSkcsd/5d69e9i+fTvOnDmDmzdvQiwWAwA0NDQkv1tubm4KF5kFBQWIiop66+/uF198gXr16qlV/JKSEhw8eBDbtm3DlStXoKGhgQ8++ACCICAvLw8AYGlpiaFDh6Jv377Q0NBQm9yZ//ufvzJ/b/Py8rB161b88ccfePjwIVq2bImGDRtCLBYjNzcXd+/eRbNmzTB06FB4eHhAV1e33Odg/qrNn9QP94Gqgfbs2YPg4GD8+++/6NatG9q1awc9PT3JL/vNmzeRlJSE+vXrY+zYsRg8eLBaxX9lwoQJuHLlClxcXKCtrV3mcUU+BL9u1qxZiI6OhoODg8z4FSmgevfujfbt22PixIkyY7do0ULh2ABw4cIFjBs3Dg4ODjhx4gQOHjyI8PBwhIWFYeXKlXB2di53zNTUVAQGBuLx48fo2bMn7Ozs0LZtW+jp6Um+0bt58yYSExNx8OBBNG3aFPPnz0e7du3KfS5lvD+enp6SP4vFYiQmJuLDDz9E+/btoampiZSUFNy7dw/du3fH2rVryx3f19cXhw4dwrRp0zB69Gip2ajbt29j7ty5uHbtGsaMGYMZM2aUO/7jx4+xfPly/Pnnn7C1tYWtra3M362LFy/i9OnT6NmzJ2bPno3GjRvLFb+oqAihoaEICwtDmzZt3hr/77//xvDhwzFhwgTUqVNH5fHPnj2LRYsWoUWLFpKfzVatWkn+DgRBQGpqKhITE3HgwAH8888/CAgIgJ2dncpzZ/7vd/7K/r3duXMnQkJC4ODggJ49e6Jr167Q0tKSOubff/9FUlISDhw4gLi4OEycOBFffvmlXPGZv2rzJzUmUI3y1VdfCb6+vkJycvI7j42Pjxe++eYbYfjw4WoT/3WmpqZynUdRFhYWQkxMjFJim5mZCZmZmUqJLQiC4O7uLmzZskUQhJev49W5Nm7cKPTr10+hmJ6ensK5c+fkPv7MmTPCV199pdC5lP3+LFiwQPD39xeKi4slY2KxWPjhhx+Eb775RuG4R48eFbp16yZ8+eWXQnp6ulBcXCysXr1aMDExEdzd3YWUlBSFYw8aNEiIiIgQioqK3nlsfn6+sH37dsHV1bVc8YOCgoScnJx3HpuVlSWsXLlSbeLPnDlTyMjIkDuX27dvl+vvWdnvDfN/u+qcv7J/b1euXCk8ffpU7uMfP34s/Pjjj3Ifz/zfTtn5k/piAVXDpKamlvs5t2/fVpv4r+vVq5dw5coVhZ4rDwcHB+HWrVtKie3t7S3s2bNHKbEFQRDMzc0lBcjrBVRmZqZgamqqtPNWFmW/PxYWFkJaWlqZ8bS0NMHc3LxCsR8+fCh88803goWFhdC7d2/B2tpa2Lx5syAWiysUV54PABV5Tm5ubrnjl+c5yo6vTNU5d0Fg/qqk7N9bZWP+RLKxC18N8/HHH8sc379/P/Lz82U+Vp6LH5Ud/3WzZs2SXNuTkZGB7OxsqVtFTZw4EYsWLUJqaipKSkoqHO91nTp1wvz58zF9+nT89NNPWLNmjdStolq0aIErV66UGT958mSFlwf+17hx4/DgwYNKjans9+fDDz/EmTNnyoxHR0dXuMFDvXr10KRJExQVFeGff/5B69at0blzZ7kaTLyNpqamzPFXyyrL8xxZ3nQxdWhoKJ4+fVqu56gifnnilldV5/6u2OXF/MuvsvJX9u9teWOXF/Mvv8rMn9QXr4EiAICVlRUiIyMrrTtYVcQ3NjYuMyYSiSqtEYOTkxMePHiA0tJSmY9XJP7r1+P8l0gkqnADjKNHj8LX1xdDhw7F1q1bMXbsWGRlZeHAgQNYtmwZ+vbtW6H4r7O0tMS+ffsq9e+2Kt6fGTNmoFOnTpKfoytXruDq1atYu3YtunXrplDc06dPIzAwEEVFRfjuu+/QuXNnBAYG4s8//8TYsWMxadKkCv/n/F/V8Xe3KuIrO29ln4P5q/Yc1fXnXtmxq+IczJ+qA3bhIwAo02GuOsQ/fvx4pcd83ZIlS5QWe8uWLUqLDQCff/45WrVqhQ0bNuCTTz7B8ePHYWhoiK1bt8Lc3LxSz1XRmRVZquL92bt3LyIiIpCamgoAsLCwwA8//IDWrVsrFPN///sfDh48iIEDB8LX11fSaWn16tU4cOAAFi5ciOjoaPzwww+V+ndQHX93qyJ+VXw3qMxzMH/VnqO6/twrO3ZVnIP5U3XAAoqqrVdL0WJjY5GamgqxWAxDQ0PY2tpWyrf8r9qsp6enS8VXpKucLNevX8f69euRlpaG0tJSGBoaYsSIERVu7w4Ae/fuRd++fbFs2TKp8fz8fISFhWHkyJEVPscryvrPQpnvDwC0a9cOs2bNqpRYAHDp0iWsW7dOZmeufv36oWvXrggICMDw4cNx7dq1Sjsv/R8nJydJQV9YWAhPT09Ju2llf+FSGZi/alXn/I2NjaW+zHJ2dq7UbTGUjflTdcMlfAQAiIqKwmeffYb69etXm/j//PMPJk2ahL///huGhoYoLS1FRkYGmjdvjo0bN1Z4U9enT5/Cz88Px48fh66uLkpLS/Hvv/+iU6dO+OWXX6Cjo6Nw7FdLyJydnWFpaYnS0lJcunQJx44dw6pVq9CrV69yx3z8+DEKCgoAAJ999hl27dqFhg0bSh2TkpKC6dOn4/LlywrnXhWU8f6MHDkSa9aswQcffABPT8+3zpwpskTwxYsXcu0/s3//fvTv37/c8d/k3r17aNq0KWrVUs4lrQkJCTAzMyvTmlcd458/fx7Ay6J+3Lhx+P777yX/DlRW4f26yn5vmH/5VOf8K/v39u7duwBe5u7i4oLQ0FDJnkaVfd0r8DL/Dz/8UKH9vGRh/lTdsICqgQoLC3Hx4kU8e/YM1tbWZfY7KCwsxKFDhzBw4EDVJCiniRMnoqSkBCtWrJAsl8rNzcW3336L+vXrY/Xq1RWKP2vWLKSmpmL58uWS5hi3b9+Gr68vPv30U/zwww8Kx+7fvz+GDBkCLy8vqfFNmzZhz549iIyMLHfMw4cPY/r06VJ7l8gyYMCAMjNT6kYZ78+aNWswZswY1KtX752NKCq6h5iyvHjxAlFRUUhKSkJubi6Ki4uhra2NFi1aoEuXLnB0dKxQ/MLCQty+fRutW7eGjo4OHj9+jIiICGRnZ6Nly5YYOHAgGjVqpFDsuXPnYsSIEejQoUOFcpRXZV+H8PjxY1y9ehXdu3cHANy/fx+RkZG4d+8eWrRogQEDBuDDDz+slHMBlZv/qVOnyszMX7t2DX/88QcePHgAQ0NDeHp6Krz5sixVdR1IYGAgfHx8FP65fJPKzP/Fixe4ffs22rVrh3r16uHy5csIDw9Hbm4u2rZti1GjRlXqz05lX5d68+ZNHDp0CM+fP0e3bt3w2WefST3+/PlzLFq0qEJ7I75OGdfVVqXqnj/Jh0v4apjU1FSMHTsWubm5AIDS0lJ8/fXX8PHxkRzz7Nkz+Pn5qX0Bde7cOfzxxx9Su3o3bNgQM2fOxIgRIyoc/88//8TGjRulOgu2a9cO8+bNw9ixYysU+86dO+jZs2eZ8Z49e2LlypUKxfziiy/w559/QiwWo1evXmVmoEQiEerVqydzY1p1o4z35/WiaMqUKXj06BGePn0KQ0NDAMDBgwfRqVMnNGnSRKH4/13C8TaKLOn4+++/MWrUKOjo6ODTTz/FkydPcPXqVQwcOBDZ2dnw9fVF8+bNERISAn19/XLHv379OsaNG4eHDx9CR0cHq1evhq+vL+rVqwdjY2MkJiYiODgYYWFhMhu4vMvu3bsRFRWFsWPH4uuvv5Zrtq4iKvO7wfj4eEyZMgVt2rRB9+7dcfHiRYwZMwZt2rRBmzZtcPHiRaxduxahoaGwtraulHNWZv4TJkxATEyM5Muy06dPY+LEiXBwcEDbtm2RkpKCfv36Yd26dWqZ/4ULF9742N69e9GpUydJAdKpU6dKOWdl5X/58mWMHTsWeXl50NfXx5w5czB79mzJRuTXrl1Dnz59sGHDhkq7NrJFixaoXbtyPt79+eef8PHxQZcuXQAA4eHhsLa2xs8//yz5/6WgoAB79+6ttAKqMvNXheqeP8mHM1A1zOjRo9GiRQsEBgZCJBJhx44dWLZsGRwdHfHjjz9CQ0MDDx8+hIODg0If8vz8/OQ+tqL/2Pbo0QPLly8v8x/m+fPn4ePjg3PnzlUovp2dHUJDQ2FiYiI1fuXKFYwePRoJCQkKx3Zzc8OgQYPKdJsLCwtDeHg4Dh06pHBsAMjJyUFoaChu374t6SIoCAKKi4uRmpr61g8kb2Jubo6ioiK5jq3omm9lvz9xcXGYPHkyvLy8JF8eDBs2DKmpqQgODlboQ2R8fLzcBZQiy4G8vb3Rvn17fPvtt5KxPXv2ICoqChs2bEBBQQH+97//QUNDQ6HZ1xEjRsDY2BjffPMNdu/ejeXLl2PgwIFYsGCB5HWtWLECly5dwu+//17u+MbGxvjll1/w008/IS8vD15eXnB3d8cHH3xQ7lhVbcCAAfj8888xdepUAC9/VmxsbDBz5kzJMT///DNOnTqFiIgIVaX5RsbGxoiNjZUUUO7u7nB0dJT6UmHNmjU4ceIEdu/erao038jS0lKyPPltH1nU8XoTDw8PWFhYYPLkydi0aRN+/fVX+Pj4YMKECZJjVq9ejTNnzmDnzp0qzFQ2V1dXDB06VPKl5K1btzB16lSIRCJs2bIF+vr6FfrMoGy9evWSuxhW9+vcSL2wgKphrK2tERERAQMDA8lYcnIyvv76a3Tr1g2rVq3C48ePFf7HcO3atVizZg1at24NCwuLtx5b0QJq+fLlOHbsGAIDA2Fqagrg5WtZsGAB7OzsMG/evArF9/f3x82bN7FixQpJZ7b09HTMmjULrVq1wo8//qhw7BMnTmDq1Kn44osvJN86Xrp0CUeOHKmUNuPjx49HRkYGnJ2dsWHDBowePRqZmZmS9uaKNJHIyMjA+PHjUbduXcyZM+etx1b0egFlvz8DBw5E3759MW7cOKnxkJAQREdHq+2HyD179qBNmzaSsdLSUpiZmeHMmTNo1KgR0tPTMWTIEIWK+9eXnQiCgI4dO2Lnzp1SS+4yMzMxaNAgJCYmljv+qw/xDRs2xO7du7Fu3To8ePAADg4O6NWrF6ysrNCyZctyxwWUvzzQ3Nwc+/fvlyzJsbe3x7p166Rm4jIzM+Hi4oLk5GSFzqHMJYLt27eXmoGyt7fH+vXrYWRkVCn5K3uJYFZWFgIDA5Gfn4+FCxdK7R2o7OVSFV0iaG5ujgMHDqBly5YoLCyEpaUlIiIipH52MjIy4OrqikuXLil0DmUuEZT1/j5+/BijRo1CaWkpfv/9d4jF4goVUMpcIpiQkIDp06dDX18fo0aNeuuxgwYNKnd8qsEqfWteUmtOTk7CyZMny4xfvHhRsLCwEKZPny78888/grGxscLniIqKEszNzYWbN29WJNV3KiwsFGbPni20b99eMDY2FoyNjQUTExMhMDBQePHiRYXj5+XlCV999ZVgZGQkdO7cWejcubNgZGQkjB07tlJ2uT979qwwZcoUoU+fPsLAgQOFGTNmCMnJyRWOKwiCYGFhIVy8eFEQBEFwc3MTEhISBEEQhJCQEGHMmDEKx83Ozha6desm7Nixo1LyfBtlvj/m5uZCRkZGmfGMjAzBzMxMoZiOjo7C48ePpcZSU1OF4uJiheL914ABA4SgoCCpsRMnTggdO3YUioqKBEEQhOjoaMHJyUmh+H369BEiIyMFQRCExMREwcjISNi2bZvUMXv37hX69OmjUHwjIyPh4cOHUmNxcXHC/PnzhV69eglGRkaCubm5YG9vr1BsU1NTYfXq1UJ+fr5C+b2Nh4eHMG/ePMl9f3//Mn8XQUFBwqBBgxSKf+7cOcHGxkYYMmSIIAgv338LCwth4MCBwvTp04UBAwYIVlZWkt/j8jIyMhL2798vpKenC6WlpcI333wj7NmzR+qYPXv2CM7OzgrFNzY2lvq7PXXqlNChQwdh/PjxwrJlywRvb2/BwsJC4fxfiYyMFLp37y789NNPQmFhoSAIL/+ty8zMrFDc8+fPv/Fmbm4u7N+/X3K/vJydnYWoqCjJ/bNnzwqPHj2SOiYsLExwcXFRKPfk5GTJ/012dnbCgQMHhI4dO0re+1GjRglWVlbCpUuXFIrv6uoq/P7772XGc3JyBGdnZ6Ffv37C5cuXFf7McPz4ccHExETw9vYWvL29hQ4dOgienp5S/5bm5ORU6DNJSkqKYGlpKRw9elThGET/xQKqhgkJCRG6desmrFu3Tvjnn3+kHjt37pxgZWUl9O/fv0L/WAmCIMybN0/w8PCoUAx55eXlCcnJycKNGzeEf//9t0Kx7t69K4jFYsmf7969K6SkpAihoaFCWFiYkJaWJhlXZ+bm5pIcZ82aJYSFhQmCIAiZmZlC586dKxT76NGjwnfffVfhHFVp0KBBQnBwcJnxjRs3Cv3791copqwCwdLSssIf7l45c+aMYGJiInz11VfC8uXLhZkzZwodO3aUvI5FixYJZmZmQkREhELxo6OjBTMzM2Hw4MGCubm5MHXqVMHDw0MIDAwUtm/fLnz//feCubm5sGvXLoXiy3p/Xvf48WMhPj5eOHDggEKxjx07JvTr10+wt7cX1q1bJ+Tl5SmUpywpKSmCnZ2d4OzsLCxZskQICQkROnXqJIwcOVIIDAwUhg0bJlhaWkq+tCgvFxcXYfXq1ZL7X375pbB8+XKpY1atWqVwgTZhwgTB2dlZ6NChg2BiYiJ06dJFsLCwEJ4+fSoIgiD4+fkJHTt2FHbu3KlQ/P/+3Q4ZMkRmgenm5qZQ/Nc9fvxYmDVrlvD5558LMTExlfI7ZmFhIfkSzsjI6I03Rf5fjIyMFExNTWX+e3Pt2jXB29tbMDExkfnFpjyGDRsmLFmyRHj27JkQFBQktG/fXli7dq3UMT///LOkOC+vV1/SjB07VkhJSZF67J9//hH69+8vef8UMWDAAKkC7a+//hJ69+4tfPHFF0JOTo4gCBUvoARBEMLDw4XJkydXKIYsn332meDk5CTXjd4vXMJXA4WHh2Pv3r2YPXs2rKyspB7766+/MG/ePCQnJ1doPXNpaSny8/Mr1OpblgsXLsDS0hK1a9d+53U8ilxM/Pq1Aq83BXj1ayISiRTe28HPzw9z586Ftrb2O68Vq+jyxuHDh8PBwQETJ07Epk2bcO7cOQQHByMuLg7Tp09HfHx8heIrQ1W+P6dPn8akSZNgZWUlucYtJSUFCQkJWLNmjULd7P57nQlQucuLSktL8ffff2Pbtm3IyspC48aN0bdvXzg4OAAADhw4gDZt2khds1dSUiL3xcyv4sfExEBPTw99+/bFkydPsGLFCly7dg0ffvgh3N3dpZZPlie+h4cHQkJCynXNk7zxlbk8EHj53rx48QIRERG4cOEC7ty5g/z8fGhoaKBJkyawsLDAsGHDpJaolee9UfYSwdLSUmhoaKCoqAhpaWmS26troPz8/ODk5ITPP/9cofyVvUTwVf6vO3v2LAICApCVlYXo6Ogyv2PlyV+ZSwRLS0uRlJSEhw8f4osvvpB67MqVK9i1axe+/PJLqeWn5f3ZUeYSwdLSUty+fRv79+/HoEGDpJoqAS+XDwYHByM6OlpybWp58lf2EkFZPzvvUp78uUSw5mKbkBrIw8MDHh4eMh/79NNPsX37djx8+LBC59DQ0Kj04gkAPD09JR9S/9tg4HWKXkx8/PhxyVr36nxB6f/+9z9MmDAB9erVg6urK9atWwcXFxdkZ2djwIABCsXMy8uT6niorOdUhe7du2Pv3r3YtWsX0tLSoKmpiQ4dOmDBggVo1qyZqtOTyd3dHSNHjoSfn5/MjaL79esn+XNhYSH27duHbdu2Yc+ePeWKP2LECEn8Dz/8UGbLe0XiFxYW4s8//0S/fv3eudG1IvEBoFatWnB3d4e7uzvOnTuH6OhoBAUF4c6dO6hbty50dHRw5swZueO98uq98fDweOf1g4rkbmJignXr1mH+/PkAXm7oeuzYMakPwfv27ZP6YK9I/v3794exsXGZLoqvfyGhSP6CIODcuXPo2LEjWrVqhS5duuDGjRtSBdTFixcV/t16lf/rPzu2trbYv38/Ll++LLXnnyL5t2zZEuvWrcO+ffvg7e2NQYMGYdKkSZWyv9Truf+Xqamp5PpdRXNv1qwZLl26hJYtW6JOnTpYv359meudTp8+LbmOV9H8fXx8ZP7e1qtXDzNmzMCMGTMUyt/AwACnT5+W6pzbqFEjbNy4ESNGjMDIkSMr9IWZrJ+dN1EkfxsbG6xfvx4eHh7Q0dFRaI9Cqp44A1XDzJo1C1OnTpX727T09HSsWbMGK1asUIv4r8vIyJBqhlGdXLhwARYWFmX+QS8qKsLp06cr5R/h58+fo6CgAPr6+rh//z6OHTsGPT099OnTR6HNG93c3ODk5IQvv/zyna2+7927h+3bt+PUqVPYu3evgq9AeR4+fIiQkBBJl8JX/wxWpEuhsmegHj9+jOXLl+PPP/+Evb09bG1t0bZtWzRs2BClpaV48uQJbt68icTERJw+fRqOjo6YNWuW3G3Zq3N8We/963Jzc3Hr1i08fPhQoQYkyn5vbt68iTFjxqBBgwZwcnJCw4YNsW7dOrRv3x4ff/wxUlJScPPmTaxfvx6Wlpblzv/Ro0dYsWKF0vKfOHEi0tLSkJWVBZFIBG1tbRQWFuL06dPQ0dHBnDlzEBUVhYCAAAwZMqTc+Sv7/X9dbm4ulixZgqSkJAQEBGDq1KkV2g9K2bnv27cP3333HSZPnozx48dLPXb9+nX8+OOPiI+Pxy+//KLQzLqy8z958iSmTp2Kbt264X//+59U0X3//n18/fXXyMrKQkFBgUJfilbVz8727dsRExPzzj0G6f3BAqqGiY2NxaJFi9CiRQv06tULtra2Zf5jSE1NxcWLF7F//37cu3cP/v7+kmVCqo7/Ojs7O4SEhKBjx47lfq6qtW/fHrGxsWU6O12/fh3Dhg3D5cuXVZTZmxUVFSE0NBRhYWH4+OOP3/ofUWpqKoYPH44JEyagbt26Cp0vLi4OV65cQXFxcZk2tBXd6HbcuHHIzMyU6lJ4584dREdHK9yl0NjYGN7e3qhfv75kLDg4GB4eHmVm4SqSf1ZWFnbs2IEzZ87g5s2bEIvFAF7O+hoZGcHBwQFDhgxR+ANfdYyvzOWBys4dUP4SwarIX5lLBKsq/9dV5hJBZeeuzCWCVZG/MpcIVkX+ylwiSOqLBVQNVFxcjAMHDmD79u1ITk6GlpYWdHV1IRaLkZeXB0EQYGZmBnd3d/Tv3/+d095VHf8VV1dXfPPNNwp9q6YK27Ztk+yp8+o6KllsbW2xfv36Ks5Ofvn5+YiKisKZM2dw/fp1PH78GCKRCI0bN0aHDh3g4OCAPn36VGjD3iVLlkg2bG3QoIHUYyKRCGFhYRV6DZaWltiwYQMsLS0xePBgzJkzB9bW1ggNDcX58+exbt26csd825LS11VG/q+UlpYiLy8PwMtNpOXdh+p9i+/m5qbUZTqyVOZ7877k379//3d+MFTn/P/7/hcWFuLy5cswNzeXLOerjPz5s/N/mD9VVyygarinT5/i+vXryM3NhUgkgr6+PoyMjCrt+iVlxvfz88O+fftgamqKFi1alFmvXlm7olemCxcuQCwWY9SoUQgKCpKamRCJRKhXrx4+/fTTSll7X5116tQJ/v7+Cl+v9S4WFhY4ePAgmjdvjtmzZ6Njx47w9PTEnTt3MGTIELVsskFvVpVLvJShuuev7CWCylad3//qnDvA/Kn6YgFF1ZayO7Up0927d9G8efNK/0a/quXk5KCkpKTMEjtFN8x8pWvXrti+fbvUprGVSRldCn/++WeMGzcO9erVU0LGJA9lLz9UNuavWtU5/+qcO8D8qfphAVWDPX36FBs2bMCVK1dkfgiu6DIjZcevzl68eIE//vhD0sTglaKiIly/fl2y1ltdxcTEYN68ebh37x4ASJYkKtri/b+CgoKQnp6OhQsXSl1TVFkSExMxYcIETJ48Ga6urnBxcUHDhg0lXQoDAgLKHfO/rZyBl8v6VqxYIdUljKqGspcfKhvzV63qnH91zh1g/lQ98Cq2GmzWrFm4cuUKXFxcKnS9iqriAy8/CG/evBkZGRkIDg5GVFQUWrRoIbNlrDr57rvvEBcXh27duuHw4cPo06cPMjIycOXKlQo3SKgKCxcuhJmZGdauXauUv9vz588jKSkJhw8fRuPGjcusLa9oi3lra2ucOHECBQUFkr2DXu9SqAhZ30VdvXoVRUVFFcqVFKOhoVGmSUt1wvxVqzrnX51zB5g/VQ8soGqws2fP4vfff4eZmVm1jB8dHQ0/Pz8MHToUJ0+elHS28fX1RV5eHoYPH66U81aG06dP4+eff4atrS1u3boFLy8vdOzYEUuWLMGtW7dUnd47/fPPP1i3bp3SliO4ubnBzc1N5mPFxcWVcg5tbW1J8de0aVOpfUiIiIiI3oQFVA3WtGlThfYDUpf4a9asQWBgIFxcXLB9+3YAgLe3N5o0aYLVq1erdQFVWFgoub7nk08+wdWrV9GxY0d8+eWX+Oqrr1SbnBxsbGyQmJiotALK3t4eoaGhUkscBUGQ7NM0dOhQpZyXiIiI6F1YQNVgs2bNQmBgIHx8fGBgYFBmmVRFGwEoO35GRgYsLCzKjJuZmeH+/fsViq1sbdu2xdmzZzFkyBB88sknSExMxLBhw/Ds2TMUFhaqOr136tSpE+bPn4+TJ0/K/Lut6DLEuXPnvnWfJnX1zz//lPn7u3//fpl9Qir6s09ERESqwwKqBps6dSqAl5uKvlKZjQCUHb9du3Y4c+ZMmZmmPXv2oF27dhWKrWxTpkzBtGnTIAgCXF1d0a9fP0yYMAEpKSmwt7dXdXrvFBsbi44dO+LRo0d49OiR1GOVccHshQsXJPs0xcbGokePHpJ9mk6fPq3QRrdVYciQIVL3BUHAV199JXlPKutnn4iIiFSHBVQNVtEL8VUd38/PDxMmTMC5c+dQXFyM4OBgZGRk4OrVq1i7dq1Sz11Rn332GWbNmoWioiJ89NFH2LZtG8LCwuDh4YFRo0apOr132rJli1LjC4Ig6VzXrl07XL9+HdbW1ujTp4/abjKs7J93IiIiUg8soGqwFi1aAHg5m5CamgqxWAxDQ0PY2tq+c0dtdYhvY2ODw4cPY+vWrQCAJ0+ewMLCAsuWLVP7JVJbtmzBqlWr4O/vDwAwNjaGrq4uQkJC0LBhw2pxjc/169exfv16pKWlobS0FIaGhhgxYgQ6d+5c4dgdOnRAZGQkJk6ciPbt2yM2Nhaenp7IysqqhMyV49XPOxEREb3fuA9UDfbPP/9g0qRJ+Pvvv2FoaIjS0lJkZGSgefPm2LhxY4X3rlF2/DVr1mDMmDFlNi59/vw51qxZo9bXyjg5OcHf3x89e/aUGj9+/DgWL16MY8eOqSgz+Rw9ehQzZsyAs7MzLC0tUVpaikuXLuHYsWNYtWoVevXqVaH4ytinSdnetLGzpqYmdHR00KFDB3z++efQ0tKq4syIiIioMrGAqsEmTpyIkpISrFixArq6ugCA3NxcfPvtt6hfvz5Wr16tdvHT0tIk19yMHDkSQUFBktiv/PXXX1i+fDkuXbpUofyVydLSErt27ULbtm2lxtPS0uDm5qbWuQNA//79MWTIEHh5eUmNb9q0CXv27EFkZGSFz/H8+XMUFBRAX18f9+/fl9qnSZndHRX1pgJKLBbj6dOnuHbtGurUqYMtW7agWbNmVZwdERERVRYWUDWYpaUl/vjjD3z66adS4ykpKRgxYgQSExPVLv65c+fKfGj/r3r16mHkyJGYMWNGueNXla+//hra2tpYvHixZAatsLAQ/v7+yMnJwcaNG1Wc4duZm5tj3759MDAwkBrPyMiAi4sLLl++rKLM1FdpaSm++eYbaGhoYOXKlapOh4iIiBTEa6BqMF1dXeTl5ZUZf/r0aaVco6SM+F27dkVKSgqAl8vgdu3aVS13/J43bx68vb1hb28v2Q8qMzMT+vr6+PXXX1WbnBzatm2L06dPw9PTU2r81KlTvBboDTQ0NODt7Y2JEyeqOhUiIiKqABZQNVi/fv3w3XffITAwEKampgCA5ORkLFiwAH379lX7+F26dJF5PUleXh78/f0rvARRmVq3bo2DBw/izJkzSE9PR+3atdGmTRvY29uX2TNIHU2dOhVTp05FcnIyzM3NAQCXLl3CkSNHsGzZMhVnp7709fWRn5+v6jSIiIioAlhA1WDTpk3Do0ePMGbMGLxayamhoQF3d3fMmjVLLeMnJSUhIyMDALB3716YmJhAW1tb6pi0tDTExMRULPkqoKWlhc8++0zVaSikZ8+e+O2337Bt2zaEh4ejTp06MDQ0xLZt22BmZqbq9NRWcnIyWrZsqeo0iIiIqAJ4DRTh6dOnSE9Ph5aWFlq3bo369eurbfyUlBRMnjwZgiAgOzsbzZo1k2ooIBKJUL9+fXh4eJTZYJdImbKzs2WOi8ViPH/+HElJSVi1ahV8fHwwYsSIKs6OiIiIKgsLqBrmwoULsLS0RO3atXHhwoW3HtupUye1i/86T09PrFmzpkwXPlIOPz8/zJ07F9ra2m/sOPfK4sWLqygr9WFsbAyRSFRm/NU/sa1atcJXX31VLTZKJiIiojfjEr4axtPTE7GxsWjcuHGZBgCvE4lEuHHjhtrFf92WLVsq9HyiynT8+HGZ47Vr14aOjk6lz+wSERGRanAGqgbLyMgo04Za3eO3b98eMTExaNy48Ru/8X+logUaEREREdF/sYCqwezs7BASEoKOHTtWm/jnz5+HlZUVateujfPnz7/12M6dO1faeamsuLg4XLlyBcXFxfjvPyNTpkxRUVaqdfnyZURERMDHxweNGjXC48eP4e/vj7Nnz6JRo0bw9vbm9U9ERETVHJfw1WD6+vp49OhRtYr/elG0a9cudO/eHXZ2dmjYsGGlnofebsmSJQgLC4OxsTEaNGgg9djbZgXfZ2fPnsW4cePQuXNnlJSUAAC++eYbJCcnY/bs2dDR0cGKFStQt25dDB48WMXZEhERkaJYQNVgHTp0wKRJk2BqaooWLVqU2VOpoo0AlB3/o48+wqZNm+Dr6wtjY2M4ODjAwcEBFhYWUp35qPLt3r0bS5YswYABA1SditpYu3YtJkyYIJl9u3XrFs6dO4dx48Zh2LBhAF4WlyEhISygiIiIqjEWUDWcsj8AKzP+jBkzMGPGDOTl5SE+Ph5xcXHw9fXFkydPYGtri1WrVint3DWdhoYG93v6j6tXr2LhwoWS+6dPn4ZIJELv3r0lYx07dkR6eroKsiMiIqLKwgKqBlN2q+mqamVdWloKkUiEOnXqQFdXF1lZWUhJSamSc9dUI0aMQFBQEBYuXMjucv+fSCSSuhbs1XVPJiYmkrFnz56hbt26qkiPiIiIKgkLqBouMTERmzdvRkZGBoKDgxEVFYUWLVqgX79+ah/fz88PFy9exN27d2FkZAQrKyt8/fXXsLGxQePGjSshe3qT8+fPIykpCYcPH0bjxo2hqakp9fibWnq/zywtLXH48GFMnDgRmZmZiI+Px5AhQ6SOCQ8Ph6mpqYoyJCIiosrAAqoGi46Ohp+fH4YOHYqTJ0+ipKQEtWvXhq+vL/Ly8jB8+HC1jp+YmIg7d+7A1tYWDg4OsLKygomJCTQ0NCoUl97Nzc0Nbm5uMh8rLi6u4mzUw4wZM+Dl5YXo6GjcvXsXenp6mDhxIoCXHQt///13nD59Gps3b1ZxpkRERFQRbGNegw0YMABjx46Fi4sLLC0tsW/fPrRq1QpRUVFYvXo1jh49qtbxAeDBgwdISEjAhQsXkJCQgOzsbJiamsLGxqbGttKuCjk5OQgNDcXt27dRWloKABAEAcXFxUhNTcWFCxdUnKFq3L9/H9HR0ahVqxb69OmDRo0aAQBCQ0ORlJSEcePGwdLSUsVZEhERUUVwBqoGy8jIgIWFRZlxMzMz3L9/X+3jA8CHH36Ivn37onv37khISMCxY8cQGRmJpKQkFlBKNHfuXGRmZsLZ2RkbNmzA6NGjcefOHURHR8PX11fV6alM06ZN4enpWWZ83LhxMo8PDAyU7BlFRERE1QN7Pddg7dq1w5kzZ8qM79mzB+3atVP7+KdOncKyZcswZMgQdO3aFcuXL0f9+vWxZs0axMfHVzg+vdmFCxewePFifPPNNzAyMkKPHj2watUqTJ8+HadPn1Z1etXGvn378O+//6o6DSIiIioHzkDVYH5+fpgwYQLOnTuH4uJiBAcHIyMjA1evXsXatWvVPv748ePx+eef48svv4SDgwOaNWsGAHj+/Dnmz59fZV0AayJBENC0aVMALwvl69evw9raGn369MH69etVnF31wRXURERE1Q9noGowGxsbHD58GG3btoWTkxOePHkCCwsLHDx4EN26dVP7+ADw119/wdTUVFI8AUBBQQH27t1bKfFJtg4dOiAyMhIA0L59e8TGxgIAsrKyVJkWERERkdJxBqoGW7NmDcaMGYNp06ZJjT9//hxLliyp8LUsyo4PAHZ2dvDw8MCcOXPg7u5e4Xgkn//973+YMGEC6tWrB1dXV6xbtw4uLi7Izs5W+ubMRERERKrEAqqGSUtLw6NHjwAAv/zyC4yNjaGrqyt1zF9//YXt27crVOAoO/5/TZ48GY6Ojpg1axYSEhKwYMECiESiCselt7O2tsaJEydQUFCAhg0bYvfu3Th27Bj09PTQp08fVadHREREpDQsoGqYBw8ewMvLS3JfVqe6evXqYdSoUWoZ/3WvCiVHR0fs3r0bPj4+GDx4MBYtWlTh2PRu2tra0NbWBvCy+9yIESNUnBERERGR8nEfqBrMyckJu3btUloLZWXHNzY2RmxsLBo3bgwAKCoqwvz583Hw4EEUFBTgxo0bSjkvUWV5fX80IiIiqh7YRKIG69KlC7S0tMqM5+XlwcfHR+3jT5kyBfXr15fc19LSwqJFizBnzhzY2NhUOD5RRRQXF+Phw4coLi5+4zHTpk1Dw4YNqzArIiIiqigu4athkpKSkJGRAQDYu3cvTExMJMuwXklLS0NMTIxaxn/dmzbKdXd3Z0MJUplt27Zh586dSElJkYwZGRlh6NChGD58uNSxry93JSIiouqBS/hqmJSUFEyePBmCICA7OxvNmjVDrVr/NxEpEolQv359eHh4lPmwpw7xidRVaWkpJk6ciISEBLi5ucHKygq6urp48OABrly5gt27d6Nr165Yu3at1O8EERERVS8soGowT09PrFmzpkyXvOoSn0idbNiwAb///ju2bt2Kjz76qMzj9+7dw6hRozB8+HDOPBEREVVjLKCIiCqBi4sLJk2a9NY27kePHsXq1asRFRVVhZkRERFRZeI1UDVM+/btERMTg8aNG8PY2PiteyYp0sVO2fGJ1FVmZibMzMzeekzHjh1x586d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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 145 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:42.195926Z", + "start_time": "2024-08-20T18:50:42.180216Z" + } + }, + "cell_type": "code", + "source": [ + "pivot_table = df.pivot_table(index=['suffix1', 'suffix2'], columns='predicate', aggfunc='size', fill_value=0).reset_index()\n", + "pivot_table.to_csv(\"tmp/pivot_table.csv\", index=False)\n", + "pivot_table" + ], + "id": "575eb6dbb6024008", + "outputs": [ + { + "data": { + "text/plain": [ + "predicate suffix1 suffix2 NO_REL obo:chebi#is_conjugate_acid_of \\\n", + "0 (1+) (1-) 2 2 \n", + "1 (1+) (2+) 19 0 \n", + "2 (1+) (2-) 3 2 \n", + "3 (1+) (3+) 11 0 \n", + "4 (1+) (3-) 2 0 \n", + ".. ... ... ... ... \n", + "271 zwitterion(1-) ate 1 0 \n", + "272 zwitterion(1-) zwitterion 0 0 \n", + "273 zwitterion(2-) (3-) 0 1 \n", + "274 zwitterion(2-) acid 1 0 \n", + "275 zwitterion(2-) zwitterion 0 0 \n", + "\n", + "predicate obo:chebi#is_conjugate_base_of obo:chebi#is_tautomer_of \n", + "0 0 0 \n", + "1 19 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 0 \n", + ".. ... ... \n", + "271 0 0 \n", + "272 3 0 \n", + "273 0 0 \n", + "274 0 0 \n", + "275 1 0 \n", + "\n", + "[276 rows x 6 columns]" + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
predicatesuffix1suffix2NO_RELobo:chebi#is_conjugate_acid_ofobo:chebi#is_conjugate_base_ofobo:chebi#is_tautomer_of
0(1+)(1-)2200
1(1+)(2+)190190
2(1+)(2-)3200
3(1+)(3+)11000
4(1+)(3-)2000
.....................
271zwitterion(1-)ate1000
272zwitterion(1-)zwitterion0030
273zwitterion(2-)(3-)0100
274zwitterion(2-)acid1000
275zwitterion(2-)zwitterion0010
\n", + "

276 rows Ă— 6 columns

\n", + "
" + ] + }, + "execution_count": 146, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 146 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:42.282446Z", + "start_time": "2024-08-20T18:50:42.269431Z" + } + }, + "cell_type": "code", + "source": "df[(df[\"suffix1\"] == \"(1+)\") & (df[\"suffix2\"] == \"NO_SUFFIX\") & (df[\"predicate\"] == CBO)]", + "id": "ecff73edc212adaa", + "outputs": [ + { + "data": { + "text/plain": [ + " suffix1 suffix2 predicate chem1 \\\n", + "3026 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:141055 \n", + "10940 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:58644 \n", + "12234 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:64003 \n", + "12334 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:64364 \n", + "13410 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:72567 \n", + "14212 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:75297 \n", + "14386 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:76278 \n", + "14676 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:76819 \n", + "14702 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:76922 \n", + "16430 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:86083 \n", + "16456 (1+) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:86380 \n", + "\n", + " chem2 charge_diff charge_diff_sign \\\n", + "3026 CHEBI:141057 NaN NaN \n", + "10940 CHEBI:32818 NaN NaN \n", + "12234 CHEBI:64004 NaN NaN \n", + "12334 CHEBI:10650 NaN NaN \n", + "13410 CHEBI:6438 NaN NaN \n", + "14212 CHEBI:31057 NaN NaN \n", + "14386 CHEBI:16299 NaN NaN \n", + "14676 CHEBI:15906 NaN NaN \n", + "14702 CHEBI:77055 NaN NaN \n", + "16430 CHEBI:86085 NaN NaN \n", + "16456 CHEBI:599440 NaN NaN \n", + "\n", + " stem \n", + "3026 validoxylamine B \n", + "10940 p-coumaroylagmatine \n", + "12234 N-allyl-6-chloro-1-(3-methylphenyl)-2,3,4,5-te... \n", + "12334 sumatriptan \n", + "13410 levobunolol \n", + "14212 13-deoxydaunorubicin \n", + "14386 dehydrocoformycin \n", + "14676 demethylmacrocin \n", + "14702 argemonine \n", + "16430 (Z)-p-coumaroylagmatine \n", + "16456 amorolfine " + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
suffix1suffix2predicatechem1chem2charge_diffcharge_diff_signstem
3026(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:141055CHEBI:141057NaNNaNvalidoxylamine B
10940(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:58644CHEBI:32818NaNNaNp-coumaroylagmatine
12234(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:64003CHEBI:64004NaNNaNN-allyl-6-chloro-1-(3-methylphenyl)-2,3,4,5-te...
12334(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:64364CHEBI:10650NaNNaNsumatriptan
13410(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:72567CHEBI:6438NaNNaNlevobunolol
14212(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:75297CHEBI:31057NaNNaN13-deoxydaunorubicin
14386(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:76278CHEBI:16299NaNNaNdehydrocoformycin
14676(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:76819CHEBI:15906NaNNaNdemethylmacrocin
14702(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:76922CHEBI:77055NaNNaNargemonine
16430(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:86083CHEBI:86085NaNNaN(Z)-p-coumaroylagmatine
16456(1+)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:86380CHEBI:599440NaNNaNamorolfine
\n", + "
" + ] + }, + "execution_count": 147, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 147 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:50:42.368542Z", + "start_time": "2024-08-20T18:50:42.360114Z" + } + }, + "cell_type": "code", + "source": "df", + "id": "d20d7eb6fce43eb1", + "outputs": [ + { + "data": { + "text/plain": [ + " suffix1 suffix2 predicate chem1 \\\n", + "0 acid anion obo:chebi#is_conjugate_acid_of CHEBI:100147 \n", + "1 anion acid obo:chebi#is_conjugate_base_of CHEBI:62070 \n", + "2 acid NO_SUFFIX NO_REL CHEBI:10046 \n", + "3 NO_SUFFIX acid NO_REL CHEBI:10045 \n", + "4 acid ate obo:chebi#is_conjugate_acid_of CHEBI:10072 \n", + "... ... ... ... ... \n", + "17165 NO_SUFFIX (1-) obo:chebi#is_conjugate_acid_of CHEBI:130073 \n", + "17166 (1-) NO_SUFFIX obo:chebi#is_conjugate_base_of CHEBI:9162 \n", + "17167 NO_SUFFIX (1-) obo:chebi#is_conjugate_acid_of CHEBI:79317 \n", + "17168 ate acid obo:chebi#is_conjugate_base_of CHEBI:994 \n", + "17169 acid ate obo:chebi#is_conjugate_acid_of CHEBI:995 \n", + "\n", + " chem2 charge_diff charge_diff_sign \\\n", + "0 CHEBI:62070 NaN NaN \n", + "1 CHEBI:100147 NaN NaN \n", + "2 CHEBI:10045 NaN NaN \n", + "3 CHEBI:10046 NaN NaN \n", + "4 CHEBI:71201 NaN NaN \n", + "... ... ... ... \n", + "17165 CHEBI:91301 NaN NaN \n", + "17166 CHEBI:79317 NaN NaN \n", + "17167 CHEBI:9162 NaN NaN \n", + "17168 CHEBI:995 NaN NaN \n", + "17169 CHEBI:994 NaN NaN \n", + "\n", + " stem \n", + "0 nalidix \n", + "1 nalidix \n", + "2 Wyerone \n", + "3 Wyerone \n", + "4 xanthuren \n", + "... ... \n", + "17165 5,20-diHEPE \n", + "17166 sinigrin \n", + "17167 sinigrin \n", + "17168 cis,cis-2-amino-3-(3-oxoprop-1-enyl)but-2-enedio \n", + "17169 cis,cis-2-amino-3-(3-oxoprop-1-enyl)but-2-enedio \n", + "\n", + "[17170 rows x 8 columns]" + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
suffix1suffix2predicatechem1chem2charge_diffcharge_diff_signstem
0acidanionobo:chebi#is_conjugate_acid_ofCHEBI:100147CHEBI:62070NaNNaNnalidix
1anionacidobo:chebi#is_conjugate_base_ofCHEBI:62070CHEBI:100147NaNNaNnalidix
2acidNO_SUFFIXNO_RELCHEBI:10046CHEBI:10045NaNNaNWyerone
3NO_SUFFIXacidNO_RELCHEBI:10045CHEBI:10046NaNNaNWyerone
4acidateobo:chebi#is_conjugate_acid_ofCHEBI:10072CHEBI:71201NaNNaNxanthuren
...........................
17165NO_SUFFIX(1-)obo:chebi#is_conjugate_acid_ofCHEBI:130073CHEBI:91301NaNNaN5,20-diHEPE
17166(1-)NO_SUFFIXobo:chebi#is_conjugate_base_ofCHEBI:9162CHEBI:79317NaNNaNsinigrin
17167NO_SUFFIX(1-)obo:chebi#is_conjugate_acid_ofCHEBI:79317CHEBI:9162NaNNaNsinigrin
17168ateacidobo:chebi#is_conjugate_base_ofCHEBI:994CHEBI:995NaNNaNcis,cis-2-amino-3-(3-oxoprop-1-enyl)but-2-enedio
17169acidateobo:chebi#is_conjugate_acid_ofCHEBI:995CHEBI:994NaNNaNcis,cis-2-amino-3-(3-oxoprop-1-enyl)but-2-enedio
\n", + "

17170 rows Ă— 8 columns

\n", + "
" + ] + }, + "execution_count": 148, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 148 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Create is-a map", + "id": "d17e17831c235596" + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:50:49.574648Z", + "start_time": "2024-08-20T18:50:42.471703Z" + } + }, + "cell_type": "code", + "source": "is_as = list(chebi.relationships(predicates=[IS_A]))", + "id": "5a77f734fba5ae24", + "outputs": [], + "execution_count": 149 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:50:49.714569Z", + "start_time": "2024-08-20T18:50:49.607491Z" + } + }, + "cell_type": "code", + "source": [ + "is_a_map = defaultdict(list)\n", + "for s, _, o in is_as:\n", + " is_a_map[s].append(o)" + ], + "id": "7a7a9eb7c9110c39", + "outputs": [], + "execution_count": 150 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "## Fetch Uniprot Synonyms\n", + "\n", + "These are bio-friendly synonyms." + ], + "id": "2e35a6a093aae65c" + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:06.708351Z", + "start_time": "2024-08-20T18:50:49.719652Z" + } + }, + "cell_type": "code", + "source": [ + "from semsql.sqla.semsql import OwlAxiomAnnotation\n", + "\n", + "q = session.query(OwlAxiomAnnotation)\n", + "axiom_anns = list(q)" + ], + "id": "6ac6247a4be899da", + "outputs": [], + "execution_count": 151 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:07.045609Z", + "start_time": "2024-08-20T18:51:07.042271Z" + } + }, + "cell_type": "code", + "source": "len(axiom_anns)", + "id": "c2c109cbfa2e46a5", + "outputs": [ + { + "data": { + "text/plain": [ + "716075" + ] + }, + "execution_count": 152, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 152 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:07.758052Z", + "start_time": "2024-08-20T18:51:07.386204Z" + } + }, + "cell_type": "code", + "source": "up_axiom_anns = [row for row in axiom_anns if row.annotation_predicate == \"oio:hasDbXref\" and row.annotation_value == \"UniProt\"]", + "id": "6132886244ebdbe", + "outputs": [], + "execution_count": 153 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:08.470347Z", + "start_time": "2024-08-20T18:51:08.095353Z" + } + }, + "cell_type": "code", + "source": [ + "bio_syn_map = {row.subject: row.value for row in axiom_anns if row.annotation_predicate == \"oio:hasDbXref\" and row.annotation_value == \"UniProt\"}\n", + "len(bio_syn_map)" + ], + "id": "a021b7d4e91c99e0", + "outputs": [ + { + "data": { + "text/plain": [ + "16393" + ] + }, + "execution_count": 154, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 154 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:08.808603Z", + "start_time": "2024-08-20T18:51:08.805412Z" + } + }, + "cell_type": "code", + "source": "len(bio_syn_map)", + "id": "8ad8345e0db49f7a", + "outputs": [ + { + "data": { + "text/plain": [ + "16393" + ] + }, + "execution_count": 155, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 155 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "", + "id": "fc455907eee67b8a" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "## RHEA pH Mapping\n", + "\n", + "RHEA provides a table that maps CHEBI IDs to their pH 7.3 stable forms. The mapping may be reflexive\n", + "print((e.g.a stable form will map to itself))\n", + "\n", + "The mappings may not be complete - in particular only leaf nodes are mapped." + ], + "id": "d67387abc3bd9dc7" + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:09.141745Z", + "start_time": "2024-08-20T18:51:09.139985Z" + } + }, + "cell_type": "code", + "source": "\n", + "id": "9ab37d9db461f843", + "outputs": [], + "execution_count": 155 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:09.472235Z", + "start_time": "2024-08-20T18:51:09.470545Z" + } + }, + "cell_type": "code", + "source": "", + "id": "6c6c70e637f11eb9", + "outputs": [], + "execution_count": null + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:09.906415Z", + "start_time": "2024-08-20T18:51:09.812191Z" + } + }, + "cell_type": "code", + "source": [ + "import pystow\n", + "ph_mapping_df = pystow.ensure_csv(\"rhea\", url=\"https://ftp.expasy.org/databases/rhea/tsv/chebi_pH7_3_mapping.tsv\")\n", + "for col in [\"CHEBI\", \"CHEBI_PH7_3\"]:\n", + " ph_mapping_df[col] = \"CHEBI:\" + ph_mapping_df[col].astype(str)\n", + "\n" + ], + "id": "e5792b2c75c4a675", + "outputs": [], + "execution_count": 156 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:10.244098Z", + "start_time": "2024-08-20T18:51:10.237797Z" + } + }, + "cell_type": "code", + "source": "ph_mapping_df", + "id": "7cc020b7576cc449", + "outputs": [ + { + "data": { + "text/plain": [ + " CHEBI CHEBI_PH7_3 ORIGIN\n", + "0 CHEBI:3 CHEBI:3 computation\n", + "1 CHEBI:7 CHEBI:7 computation\n", + "2 CHEBI:8 CHEBI:8 computation\n", + "3 CHEBI:19 CHEBI:19 computation\n", + "4 CHEBI:20 CHEBI:20 computation\n", + "... ... ... ...\n", + "119802 CHEBI:691037 CHEBI:691037 computation\n", + "119803 CHEBI:691622 CHEBI:691622 computation\n", + "119804 CHEBI:741548 CHEBI:132939 computation\n", + "119805 CHEBI:744019 CHEBI:744019 computation\n", + "119806 CHEBI:746859 CHEBI:746859 computation\n", + "\n", + "[119807 rows x 3 columns]" + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CHEBICHEBI_PH7_3ORIGIN
0CHEBI:3CHEBI:3computation
1CHEBI:7CHEBI:7computation
2CHEBI:8CHEBI:8computation
3CHEBI:19CHEBI:19computation
4CHEBI:20CHEBI:20computation
............
119802CHEBI:691037CHEBI:691037computation
119803CHEBI:691622CHEBI:691622computation
119804CHEBI:741548CHEBI:132939computation
119805CHEBI:744019CHEBI:744019computation
119806CHEBI:746859CHEBI:746859computation
\n", + "

119807 rows Ă— 3 columns

\n", + "
" + ] + }, + "execution_count": 157, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 157 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:10.660646Z", + "start_time": "2024-08-20T18:51:10.628401Z" + } + }, + "cell_type": "code", + "source": "ph_mapping = dict(zip(ph_mapping_df['CHEBI'], ph_mapping_df['CHEBI_PH7_3']))", + "id": "afd7468af0f9a848", + "outputs": [], + "execution_count": 158 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:10.694812Z", + "start_time": "2024-08-20T18:51:10.691763Z" + } + }, + "cell_type": "code", + "source": "len(ph_mapping)", + "id": "feb64fe9e36bbdec", + "outputs": [ + { + "data": { + "text/plain": [ + "119807" + ] + }, + "execution_count": 159, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 159 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:10.711784Z", + "start_time": "2024-08-20T18:51:10.709198Z" + } + }, + "cell_type": "code", + "source": [ + "# we expected leaf and leaf-y nodes to be mapped\n", + "assert ph_mapping[CYSTEINATE_1_MINUS] == CYSTEINE_ZWITTERION" + ], + "id": "f960fab3cbd8c968", + "outputs": [], + "execution_count": 160 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:11.058399Z", + "start_time": "2024-08-20T18:51:11.055872Z" + } + }, + "cell_type": "code", + "source": "assert ph_mapping[CITRIC_ACID] != CITRIC_ACID", + "id": "5d984c637fc464a6", + "outputs": [], + "execution_count": 161 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:11.722648Z", + "start_time": "2024-08-20T18:51:11.720017Z" + } + }, + "cell_type": "code", + "source": [ + "# reflexivity\n", + "assert ph_mapping[L_CYSTEINE_ZWITTERION] == L_CYSTEINE_ZWITTERION\n", + "assert ph_mapping[CYSTEINE_ZWITTERION] == CYSTEINE_ZWITTERION" + ], + "id": "6215936dbaf1e9f7", + "outputs": [], + "execution_count": 162 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:11.733231Z", + "start_time": "2024-08-20T18:51:11.730857Z" + } + }, + "cell_type": "code", + "source": [ + "# groupings are not mapped\n", + "assert AMINO_ACID not in ph_mapping" + ], + "id": "41959f4eb1f532e7", + "outputs": [], + "execution_count": 163 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:12.111452Z", + "start_time": "2024-08-20T18:51:12.068035Z" + } + }, + "cell_type": "code", + "source": [ + "# create a reverse mapping\n", + "\n", + "rev_ph_mapping = defaultdict(list)\n", + "for k, v in ph_mapping.items():\n", + " rev_ph_mapping[v].append(k)\n", + " \n", + "len(rev_ph_mapping)" + ], + "id": "5a139dee44a44030", + "outputs": [ + { + "data": { + "text/plain": [ + "111077" + ] + }, + "execution_count": 164, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 164 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:12.447556Z", + "start_time": "2024-08-20T18:51:12.445087Z" + } + }, + "cell_type": "code", + "source": [ + "assert L_CYSTEINE_ZWITTERION in rev_ph_mapping[L_CYSTEINE_ZWITTERION]\n", + "assert CYSTEINATE_1_MINUS in rev_ph_mapping[CYSTEINE_ZWITTERION]\n", + "\n" + ], + "id": "9120365808e9bc04", + "outputs": [], + "execution_count": 165 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "## Pick Canonical from Conjugate Cliques\n", + "\n", + "For each clique, pick the canonical term." + ], + "id": "9ab6512f389c6a93" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:12.789084Z", + "start_time": "2024-08-20T18:51:12.783392Z" + } + }, + "cell_type": "code", + "source": [ + "\n", + "arbitrary_canonical_map = {}\n", + "def pick_canonical(ids: List[str]) -> str:\n", + " \"\"\"\n", + " Pick the canonical term from a list of ids.\n", + " \n", + " Priority order:\n", + " \n", + " 1. pH mapping\n", + " 2. Uniprot synonyms\n", + " 3. Charge 0\n", + " \n", + " :param ids: \n", + " :return: \n", + " \"\"\"\n", + " # ensure deterministic order\n", + " ids = sorted(ids)\n", + " for id in ids:\n", + " if id in ph_mapping:\n", + " return ph_mapping[id]\n", + " for id in ids:\n", + " if id in bio_syn_map:\n", + " return id\n", + " for id in ids:\n", + " if id in charges and charges[id] == 0:\n", + " return id\n", + " # prioritize shorter\n", + " ids = sorted(ids, key=lambda x: len(labels.get(x)))\n", + " for id in ids:\n", + " if id not in charges:\n", + " # last resort\n", + " return id\n", + " if len(ids) == 1:\n", + " return ids[0]\n", + " arbitrary_canonical_map[tuple(ids)] = ids[0]\n", + " return ids[0]\n", + " # raise ValueError(f\"Could not find canonical for {ids}\")\n", + "\n", + "assert pick_canonical([CITRIC_ACID]) == ph_mapping[CITRIC_ACID]\n", + "assert pick_canonical([L_CYSTEINE_ZWITTERION]) == L_CYSTEINE_ZWITTERION\n", + "assert pick_canonical([CYSTEINE_ZWITTERION, CYSTEINATE_1_MINUS, CYSTEINIUM]) == CYSTEINE_ZWITTERION\n", + "assert pick_canonical([AMINO_ACID, AMINO_ACID_ANION]) == AMINO_ACID\n", + "assert pick_canonical([ALPHA_AMINO_ACID, ALPHA_AMINO_ACID_ANION, ALPHA_AMINO_ACID_ZWITTERION]) == ALPHA_AMINO_ACID_ZWITTERION\n", + " " + ], + "id": "e878bc530b346f26", + "outputs": [], + "execution_count": 166 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:13.133279Z", + "start_time": "2024-08-20T18:51:13.129885Z" + } + }, + "cell_type": "code", + "source": "pick_canonical([ALPHA_AMINO_ACID, ALPHA_AMINO_ACID_ANION, ALPHA_AMINO_ACID_ZWITTERION])", + "id": "437cc21e6c84393c", + "outputs": [ + { + "data": { + "text/plain": [ + "'CHEBI:78608'" + ] + }, + "execution_count": 167, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 167 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:13.470030Z", + "start_time": "2024-08-20T18:51:13.468041Z" + } + }, + "cell_type": "code", + "source": "", + "id": "25942fc6d94bd016", + "outputs": [], + "execution_count": null + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:13.821214Z", + "start_time": "2024-08-20T18:51:13.807687Z" + } + }, + "cell_type": "code", + "source": [ + "from typing import Set, Tuple\n", + "\n", + "\n", + "def create_canonical_map(scc_sets: List[Set[str]]) -> Tuple[Dict[str, Set[str]], Dict[str, str]]:\n", + " \"\"\"\n", + " Create a mapping between canonical and members of the strongly connected components\n", + " :param scc_sets: \n", + " :return: \n", + " \"\"\"\n", + " canonical_to_members = {}\n", + " for scc in scc_sets:\n", + " canonical = pick_canonical(scc)\n", + " canonical_to_members[canonical] = scc\n", + " members_to_canonical = {m: c for c, ms in canonical_to_members.items() for m in ms}\n", + " return (canonical_to_members, members_to_canonical)\n", + "\n", + "canonical_to_members, members_to_canonical = create_canonical_map(sccs)\n", + "assert len(canonical_to_members) > 8000\n", + "assert members_to_canonical[CYSTEINE_ZWITTERION] == CYSTEINE_ZWITTERION\n", + "assert members_to_canonical[CYSTEINATE_1_MINUS] == CYSTEINE_ZWITTERION" + ], + "id": "5ac60d2c2ca3e36d", + "outputs": [], + "execution_count": 168 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:14.161399Z", + "start_time": "2024-08-20T18:51:14.159592Z" + } + }, + "cell_type": "code", + "source": "", + "id": "820efde068eb28fa", + "outputs": [], + "execution_count": null + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:14.509576Z", + "start_time": "2024-08-20T18:51:14.507457Z" + } + }, + "cell_type": "code", + "source": "# assert CITRIC_ACID in members_to_canonical\n", + "id": "b922566d4a6977f1", + "outputs": [], + "execution_count": 169 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:14.855823Z", + "start_time": "2024-08-20T18:51:14.840532Z" + } + }, + "cell_type": "code", + "source": [ + "chem_to_stem: Dict[str, str] = {}\n", + "for row in rows:\n", + " def _assign(chem: str, stem: str):\n", + " if chem in chem_to_stem:\n", + " if chem_to_stem[chem] != stem:\n", + " raise ValueError(f\"Conflicting stems for {chem}: {chem_to_stem[chem]} vs {stem}\")\n", + " else:\n", + " chem_to_stem[chem] = stem\n", + " stem = row[\"stem\"]\n", + " _assign(row[\"chem1\"], stem)\n", + " _assign(row[\"chem2\"], stem)" + ], + "id": "986db0b5676b022", + "outputs": [], + "execution_count": 170 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:15.204220Z", + "start_time": "2024-08-20T18:51:15.195715Z" + } + }, + "cell_type": "code", + "source": [ + "# assess completeness of the sccs\n", + "missing_in_conjugate_sccs = []\n", + "for chem in stem_to_chem.keys():\n", + " if chem not in canonical_to_members:\n", + " missing_in_conjugate_sccs.append(chem)\n", + " \n", + "len(missing_in_conjugate_sccs)\n" + ], + "id": "a021fe7fed571235", + "outputs": [ + { + "data": { + "text/plain": [ + "31416" + ] + }, + "execution_count": 171, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 171 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:15.550153Z", + "start_time": "2024-08-20T18:51:15.545126Z" + } + }, + "cell_type": "code", + "source": [ + "missing_in_lexical_analysis = []\n", + "for chem in canonical_to_members.keys():\n", + " if chem not in chem_to_stem:\n", + " missing_in_lexical_analysis.append(chem)\n", + " \n", + "len(missing_in_lexical_analysis)" + ], + "id": "803cbc15883d0c19", + "outputs": [ + { + "data": { + "text/plain": [ + "1929" + ] + }, + "execution_count": 172, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 172 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:21.437440Z", + "start_time": "2024-08-20T18:51:15.893723Z" + } + }, + "cell_type": "code", + "source": [ + "\n", + "for _, vmap in stem_to_chem.items():\n", + " for v1 in vmap.values():\n", + " for v2 in vmap.values():\n", + " if v1 > v2:\n", + " rel = (v1, \"?\", v2)\n", + " if rel not in conjrels:\n", + " conjrels.append(rel)\n", + " # conj_graph.add_edge(v1, v2))\n", + "conj_graph = calculate_conj_graph(conjrels)\n", + "full_sccs = list(nx.strongly_connected_components(conj_graph))\n", + "len(full_sccs)" + ], + "id": "c49abac57eb8498", + "outputs": [ + { + "data": { + "text/plain": [ + "9325" + ] + }, + "execution_count": 173, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 173 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:21.793968Z", + "start_time": "2024-08-20T18:51:21.782209Z" + } + }, + "cell_type": "code", + "source": [ + "canonical_to_members, members_to_canonical = create_canonical_map(full_sccs)\n", + "assert len(canonical_to_members) > 9000" + ], + "id": "7e12327ea167d1f7", + "outputs": [], + "execution_count": 174 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:22.145787Z", + "start_time": "2024-08-20T18:51:22.142195Z" + } + }, + "cell_type": "code", + "source": "labels[members_to_canonical[AMINO_ACID]]", + "id": "47d4065d938af84f", + "outputs": [ + { + "data": { + "text/plain": [ + "'amino acid'" + ] + }, + "execution_count": 175, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 175 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:22.483277Z", + "start_time": "2024-08-20T18:51:22.480509Z" + } + }, + "cell_type": "code", + "source": "assert members_to_canonical[AMINO_ACID_ANION] == AMINO_ACID", + "id": "8ae582d277664a82", + "outputs": [], + "execution_count": 176 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Exclusion List", + "id": "ff7443169be8ebfe" + }, + { + "cell_type": "code", + "source": [ + "ions = list(chebi.descendants(ION, [IS_A]))\n", + "exclusion_list = [ion for ion in ions if ion not in canonical_to_members]" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:27.039620Z", + "start_time": "2024-08-20T18:51:22.815342Z" + } + }, + "id": "6f9c14d520e38499", + "outputs": [], + "execution_count": 177 + }, + { + "cell_type": "code", + "source": [ + "len(exclusion_list)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:27.387061Z", + "start_time": "2024-08-20T18:51:27.384197Z" + } + }, + "id": "707d750e6f27b0d", + "outputs": [ + { + "data": { + "text/plain": [ + "6762" + ] + }, + "execution_count": 178, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 178 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:27.718351Z", + "start_time": "2024-08-20T18:51:27.715451Z" + } + }, + "cell_type": "code", + "source": [ + "# assert AAAC in exclusion_list, f\"expected {AAAC} in exclusion_list\"\n", + "assert CITRIC_ACID not in exclusion_list\n", + "assert AMINO_ACID not in exclusion_list" + ], + "id": "d4012fde318a42cb", + "outputs": [], + "execution_count": 179 + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:28.052294Z", + "start_time": "2024-08-20T18:51:28.049520Z" + } + }, + "cell_type": "code", + "source": [ + "def rewire(id: str) -> Optional[str]:\n", + " \"\"\"\n", + " Rewire an ID to its canonical form, if it is not in the exclusion list\n", + " :param id: \n", + " :return: \n", + " \"\"\"\n", + " rewired = members_to_canonical.get(id, id)\n", + " if rewired in exclusion_list:\n", + " return None\n", + " return rewired" + ], + "id": "eb60026fd7282828", + "outputs": [], + "execution_count": 180 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:28.389188Z", + "start_time": "2024-08-20T18:51:28.385350Z" + } + }, + "cell_type": "code", + "source": "rewire(AAAE)", + "id": "d2f7eb4cab17323e", + "outputs": [ + { + "data": { + "text/plain": [ + "'CHEBI:83410'" + ] + }, + "execution_count": 181, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 181 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:28.730553Z", + "start_time": "2024-08-20T18:51:28.726958Z" + } + }, + "cell_type": "code", + "source": [ + "assert rewire(AAAE) != AAAE\n", + "assert rewire(AAAE) not in exclusion_list" + ], + "id": "458724079e756895", + "outputs": [], + "execution_count": 182 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Generate Ontology", + "id": "3c586153bb91baeb" + }, + { + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:29.071951Z", + "start_time": "2024-08-20T18:51:29.070078Z" + } + }, + "cell_type": "code", + "source": "", + "id": "8ef381b8af27a6d7", + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "source": [ + "from typing import Tuple\n", + "from pydantic import BaseModel\n", + "\n", + "\n", + "\n", + "class Term(BaseModel):\n", + " stanza_type: str = \"Term\"\n", + " id: str\n", + " label: str\n", + " synonyms: Optional[List[str]] = None\n", + " xrefs: Optional[List[str]] = []\n", + " alt_ids: Optional[List[str]] = None\n", + " parents: List[str] = []\n", + " relationships: List[Tuple[str, str]] = []\n", + " inchi: Optional[str] = None\n", + " physiologically_stable_form: Optional[str] = None\n", + " \n", + " def as_obo(self) -> str:\n", + " name = self.label.replace('{', r'\\{')\n", + " lines = [\n", + " f\"[{self.stanza_type}]\",\n", + " f\"id: {self.id}\",\n", + " f\"name: {name}\",\n", + " ]\n", + " lines += [f\"synonym: {s}\" for s in self.synonyms or []]\n", + " lines += [f\"alt_id: {alt_id}\" for alt_id in self.alt_ids or []]\n", + " lines += [f\"is_a: {is_a}\" for is_a in self.parents or []]\n", + " lines += [f\"xref: {xref}\" for xref in self.xrefs or []]\n", + " lines += [f\"property_value: {p} {v}\" for p, v in self.relationships or []]\n", + " lines += [f\"property_value: chemrof:inchi_string \\\"{self.inchi}\\\" xsd:string\"] if self.inchi else []\n", + " lines += [f\"property_value: chemrof:has_physiologically_stable_form {self.physiologically_stable_form}\"] if self.physiologically_stable_form else []\n", + " lines += [\"\"]\n", + " return \"\\n\".join(lines)\n", + " \n", + " \n", + "class Ontology(BaseModel):\n", + " terms: List[Term] = []\n", + " \n", + " def as_obo(self) -> str:\n", + " lines = [\n", + " f\"ontology: chebi-slim\",\n", + " \"idspace: chemrof https://w3id.org/chemrof/\",\n", + " \"\",\n", + " ]\n", + " return \"\\n\".join(lines + [t.as_obo() for t in self.terms])\n", + " \n", + " \n" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:29.909837Z", + "start_time": "2024-08-20T18:51:29.894997Z" + } + }, + "id": "e1d93ec81dd98d00", + "outputs": [], + "execution_count": 183 + }, + { + "cell_type": "code", + "source": [ + "BAD_SUFFIXES = [\"zwitterion\", \"ion\", \"(1+)\", \"(2+)\"]\n", + "\n", + "def make_term(id: str) -> Optional[Term]:\n", + " \"\"\"\n", + " Make a term from an ID\n", + " \n", + " :param id: \n", + " :return: \n", + " \"\"\"\n", + " if id in exclusion_list:\n", + " return None\n", + " if members_to_canonical.get(id, id) != id:\n", + " # non-canonical members are not included\n", + " return None\n", + " #if id not in initial_terms:\n", + " # # filter for testing\n", + " # return None\n", + " label = labels.get(id, id)\n", + " if id in bio_syn_map:\n", + " label = bio_syn_map[id]\n", + " else:\n", + " for suffix in BAD_SUFFIXES:\n", + " suffix = \" \" + suffix\n", + " if label.endswith(suffix):\n", + " label = label.replace(suffix, \"\")\n", + " term = Term(id=id, label=label)\n", + " alt_ids = [x for x in canonical_to_members.get(id, []) if x != id]\n", + " if id in ph_mapping:\n", + " term.physiologically_stable_form = ph_mapping[id]\n", + " if alt_ids:\n", + " term.alt_ids = alt_ids\n", + " else:\n", + " alt_ids = []\n", + " equiv_set = [id] + alt_ids\n", + " for alt_id in equiv_set:\n", + " for parent in is_a_map.get(alt_id, []):\n", + " rewired_parent = rewire(parent)\n", + " if rewired_parent and rewired_parent not in term.parents:\n", + " term.parents.append(rewired_parent)\n", + " # TODO: xrefs\n", + " for xref in xrefs.get(alt_id, []):\n", + " if xref.startswith(\"PMID:\"):\n", + " continue\n", + " term.xrefs.append(xref)\n", + " if alt_id in inchis:\n", + " if not term.inchi:\n", + " term.inchi = inchis[alt_id]\n", + " return term\n", + "\n", + "\n", + "#assert L_CYSTEINE_ZWITTERION in initial_terms\n", + "t = make_term(L_CYSTEINE_ZWITTERION)\n", + "assert t.label == \"L-cysteine\"\n", + "print(t.as_obo())" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:29.925855Z", + "start_time": "2024-08-20T18:51:29.916298Z" + } + }, + "id": "b196288c3d4bc41c", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Term]\n", + "id: CHEBI:35235\n", + "name: L-cysteine\n", + "alt_id: CHEBI:32443\n", + "alt_id: CHEBI:17561\n", + "alt_id: CHEBI:32442\n", + "alt_id: CHEBI:32445\n", + "is_a: CHEBI:35237\n", + "is_a: CHEBI:59869\n", + "is_a: CHEBI:26650\n", + "is_a: CHEBI:83813\n", + "xref: Gmelin:49993\n", + "xref: Reaxys:5921923\n", + "xref: Gmelin:325856\n", + "xref: Beilstein:5921923\n", + "xref: YMDB:YMDB00046\n", + "xref: Wikipedia:Cysteine\n", + "xref: Reaxys:1721408\n", + "xref: PDBeChem:CYS\n", + "xref: MetaCyc:CYS\n", + "xref: KNApSAcK:C00001351\n", + "xref: KEGG:D00026\n", + "xref: KEGG:C00097\n", + "xref: HMDB:HMDB0000574\n", + "xref: Gmelin:49991\n", + "xref: ECMDB:ECMDB00574\n", + "xref: Drug_Central:769\n", + "xref: DrugBank:DB00151\n", + "xref: CAS:52-90-4\n", + "xref: Beilstein:1721408\n", + "xref: Reaxys:4128886\n", + "xref: Gmelin:325857\n", + "xref: Beilstein:4128886\n", + "xref: Gmelin:325860\n", + "property_value: chemrof:inchi_string \"InChI=1S/C3H7NO2S/c4-2(1-7)3(5)6/h2,7H,1,4H2,(H,5,6)/t2-/m0/s1\" xsd:string\n", + "property_value: chemrof:has_physiologically_stable_form CHEBI:35235\n", + "\n" + ] + } + ], + "execution_count": 184 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:30.284374Z", + "start_time": "2024-08-20T18:51:30.281353Z" + } + }, + "cell_type": "code", + "source": "assert rewire(is_a_map[CORD_E][0]) not in exclusion_list", + "id": "2a3ed58115eabd33", + "outputs": [], + "execution_count": 185 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:30.689229Z", + "start_time": "2024-08-20T18:51:30.684618Z" + } + }, + "cell_type": "code", + "source": [ + "t = make_term(CORD_E)\n", + "print(t.as_obo())\n" + ], + "id": "238e38614ea62be7", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Term]\n", + "id: CHEBI:213754\n", + "name: Cordycepamide E\n", + "is_a: CHEBI:83410\n", + "property_value: chemrof:inchi_string \"InChI=1S/C15H19NO4/c1-9(2)13-14(18)16(3)12(15(19)20-13)8-10-4-6-11(17)7-5-10/h4-7,9,12-13,17H,8H2,1-3H3/t12-,13+/m0/s1\" xsd:string\n", + "property_value: chemrof:has_physiologically_stable_form CHEBI:213754\n", + "\n" + ] + } + ], + "execution_count": 186 + }, + { + "cell_type": "code", + "source": [ + "\n", + "# assert CYSTEINE_ZWITTERION in initial_terms\n", + "t = make_term(CYSTEINE_ZWITTERION)\n", + "assert t.label == \"cysteine\"\n", + "assert \"CHEBI:78608\" in t.parents\n", + "print(t.as_obo())" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:31.392675Z", + "start_time": "2024-08-20T18:51:31.387984Z" + } + }, + "id": "bc403819eabb21f5", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Term]\n", + "id: CHEBI:35237\n", + "name: cysteine\n", + "alt_id: CHEBI:32458\n", + "alt_id: CHEBI:32457\n", + "alt_id: CHEBI:15356\n", + "alt_id: CHEBI:32456\n", + "is_a: CHEBI:33709\n", + "is_a: CHEBI:78608\n", + "is_a: CHEBI:62031\n", + "is_a: CHEBI:26834\n", + "xref: Gmelin:49992\n", + "xref: Gmelin:325859\n", + "xref: Gmelin:49990\n", + "xref: Wikipedia:Cysteine\n", + "xref: Reaxys:1721406\n", + "xref: KNApSAcK:C00007323\n", + "xref: KNApSAcK:C00001351\n", + "xref: KEGG:C00736\n", + "xref: Gmelin:2933\n", + "xref: CAS:3374-22-9\n", + "xref: Beilstein:1721406\n", + "xref: Reaxys:4128885\n", + "xref: Gmelin:363235\n", + "xref: Beilstein:4128885\n", + "property_value: chemrof:inchi_string \"InChI=1S/C3H7NO2S/c4-2(1-7)3(5)6/h2,7H,1,4H2,(H,5,6)\" xsd:string\n", + "property_value: chemrof:has_physiologically_stable_form CHEBI:35237\n", + "\n" + ] + } + ], + "execution_count": 187 + }, + { + "cell_type": "code", + "source": [ + "for is_a in t.parents:\n", + " print(is_a, labels[is_a])" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:31.419886Z", + "start_time": "2024-08-20T18:51:31.417135Z" + } + }, + "id": "79d094c451d6a3d9", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CHEBI:33709 amino acid\n", + "CHEBI:78608 alpha-amino acid zwitterion\n", + "CHEBI:62031 polar amino acid zwitterion\n", + "CHEBI:26834 sulfur-containing amino acid\n" + ] + } + ], + "execution_count": 188 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:31.768983Z", + "start_time": "2024-08-20T18:51:31.765335Z" + } + }, + "cell_type": "code", + "source": "print(make_term(ALPHA_AMINO_ACID_ZWITTERION).as_obo())", + "id": "2ae23324e2b21a47", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Term]\n", + "id: CHEBI:78608\n", + "name: an alpha-amino acid\n", + "alt_id: CHEBI:33704\n", + "alt_id: CHEBI:33558\n", + "alt_id: CHEBI:33719\n", + "is_a: CHEBI:33709\n", + "xref: MetaCyc:Alpha-Amino-Acids\n", + "xref: KEGG:C05167\n", + "xref: KEGG:C00045\n", + "property_value: chemrof:has_physiologically_stable_form CHEBI:78608\n", + "\n" + ] + } + ], + "execution_count": 189 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:32.103845Z", + "start_time": "2024-08-20T18:51:32.100101Z" + } + }, + "cell_type": "code", + "source": "bio_syn_map[ALPHA_AMINO_ACID_ZWITTERION]", + "id": "bad0eb941e50a582", + "outputs": [ + { + "data": { + "text/plain": [ + "'an alpha-amino acid'" + ] + }, + "execution_count": 190, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 190 + }, + { + "cell_type": "code", + "source": [ + "ont = Ontology(terms=[t])\n", + "print(ont.as_obo())" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:32.438839Z", + "start_time": "2024-08-20T18:51:32.436347Z" + } + }, + "id": "f8fda8f3ae80f063", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ontology: chebi-slim\n", + "idspace: chemrof https://w3id.org/chemrof/\n", + "\n", + "[Term]\n", + "id: CHEBI:35237\n", + "name: cysteine\n", + "alt_id: CHEBI:32458\n", + "alt_id: CHEBI:32457\n", + "alt_id: CHEBI:15356\n", + "alt_id: CHEBI:32456\n", + "is_a: CHEBI:33709\n", + "is_a: CHEBI:78608\n", + "is_a: CHEBI:62031\n", + "is_a: CHEBI:26834\n", + "xref: Gmelin:49992\n", + "xref: Gmelin:325859\n", + "xref: Gmelin:49990\n", + "xref: Wikipedia:Cysteine\n", + "xref: Reaxys:1721406\n", + "xref: KNApSAcK:C00007323\n", + "xref: KNApSAcK:C00001351\n", + "xref: KEGG:C00736\n", + "xref: Gmelin:2933\n", + "xref: CAS:3374-22-9\n", + "xref: Beilstein:1721406\n", + "xref: Reaxys:4128885\n", + "xref: Gmelin:363235\n", + "xref: Beilstein:4128885\n", + "property_value: chemrof:inchi_string \"InChI=1S/C3H7NO2S/c4-2(1-7)3(5)6/h2,7H,1,4H2,(H,5,6)\" xsd:string\n", + "property_value: chemrof:has_physiologically_stable_form CHEBI:35237\n", + "\n" + ] + } + ], + "execution_count": 191 + }, + { + "cell_type": "code", + "source": [ + "with open(\"tmp/t.obo\", \"w\") as file:\n", + " file.write(ont.as_obo())" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:32.774643Z", + "start_time": "2024-08-20T18:51:32.771644Z" + } + }, + "id": "b0e8b052fec4776f", + "outputs": [], + "execution_count": 192 + }, + { + "cell_type": "code", + "source": [ + "def roots(terms: List[Term]):\n", + " return [t.id for t in terms if not t.parents]" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:33.164815Z", + "start_time": "2024-08-20T18:51:33.162304Z" + } + }, + "id": "2aecf0e555b32a2a", + "outputs": [], + "execution_count": 193 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:34.008812Z", + "start_time": "2024-08-20T18:51:33.892002Z" + } + }, + "cell_type": "code", + "source": "", + "id": "61d45587ba2b1b57", + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "source": [ + "\n", + "def make_terms_for_ids(ids: List[str]) -> List[Term]:\n", + " \"\"\"\n", + " Make terms for a list of IDs\n", + " \n", + " :param ids: \n", + " :return: \n", + " \"\"\"\n", + " terms = []\n", + " n = 0\n", + " for id in ids:\n", + " n += 1\n", + " t = make_term(id)\n", + " if t:\n", + " terms.append(t)\n", + " if n % 10000 == 0:\n", + " print(f\"Processed {n} IDs, made {len(terms)} terms\")\n", + " return terms\n", + " " + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:34.608896Z", + "start_time": "2024-08-20T18:51:34.605479Z" + } + }, + "id": "6f93d120489cc7ac", + "outputs": [], + "execution_count": 194 + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:34.950432Z", + "start_time": "2024-08-20T18:51:34.948702Z" + } + }, + "id": "fb1e972e983ab1ba", + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "source": [ + "def write_terms(terms: List[Term], path: str):\n", + " \"\"\"\n", + " Write terms to a file\n", + " \n", + " :param terms: \n", + " :param path: \n", + " :return: \n", + " \"\"\"\n", + " ont = Ontology(terms=terms)\n", + " with open(path, \"w\") as file:\n", + " file.write(ont.as_obo())\n", + " \n", + " " + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:51:35.309869Z", + "start_time": "2024-08-20T18:51:35.306968Z" + } + }, + "id": "373457deffad71d3", + "outputs": [], + "execution_count": 195 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:36.027660Z", + "start_time": "2024-08-20T18:51:36.024778Z" + } + }, + "cell_type": "code", + "source": [ + "def generate_write_all(ids: List[str], path: str) -> List[Term]:\n", + " \"\"\"\n", + " Run whole pipeline\n", + " \n", + " :param ids: \n", + " :param path: \n", + " :return: \n", + " \"\"\"\n", + " terms = make_terms_for_ids(ids)\n", + " write_terms(terms, path)\n", + " return terms" + ], + "id": "4c511c4c5ff0977f", + "outputs": [], + "execution_count": 196 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:39.591460Z", + "start_time": "2024-08-20T18:51:36.367370Z" + } + }, + "cell_type": "code", + "source": [ + "amino_acid_ids = list(chebi.descendants(AMINO_ACID))\n", + "assert L_CYSTEINE_ZWITTERION in amino_acid_ids\n", + "assert len(amino_acid_ids) > 100" + ], + "id": "9a96b67935019540", + "outputs": [], + "execution_count": 197 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:43.668233Z", + "start_time": "2024-08-20T18:51:39.951740Z" + } + }, + "cell_type": "code", + "source": "terms = generate_write_all(amino_acid_ids, \"tmp/amino_acids.obo\")", + "id": "816113d92ec207d1", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processed 10000 IDs, made 7879 terms\n" + ] + } + ], + "execution_count": 198 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:51:44.008139Z", + "start_time": "2024-08-20T18:51:44.003222Z" + } + }, + "cell_type": "code", + "source": [ + "[t] = [t for t in terms if t.id == L_CYSTEINE_ZWITTERION]\n", + "print(t.as_obo())" + ], + "id": "c0b4338f1146a984", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Term]\n", + "id: CHEBI:35235\n", + "name: L-cysteine\n", + "alt_id: CHEBI:32443\n", + "alt_id: CHEBI:17561\n", + "alt_id: CHEBI:32442\n", + "alt_id: CHEBI:32445\n", + "is_a: CHEBI:35237\n", + "is_a: CHEBI:59869\n", + "is_a: CHEBI:26650\n", + "is_a: CHEBI:83813\n", + "xref: Gmelin:49993\n", + "xref: Reaxys:5921923\n", + "xref: Gmelin:325856\n", + "xref: Beilstein:5921923\n", + "xref: YMDB:YMDB00046\n", + "xref: Wikipedia:Cysteine\n", + "xref: Reaxys:1721408\n", + "xref: PDBeChem:CYS\n", + "xref: MetaCyc:CYS\n", + "xref: KNApSAcK:C00001351\n", + "xref: KEGG:D00026\n", + "xref: KEGG:C00097\n", + "xref: HMDB:HMDB0000574\n", + "xref: Gmelin:49991\n", + "xref: ECMDB:ECMDB00574\n", + "xref: Drug_Central:769\n", + "xref: DrugBank:DB00151\n", + "xref: CAS:52-90-4\n", + "xref: Beilstein:1721408\n", + "xref: Reaxys:4128886\n", + "xref: Gmelin:325857\n", + "xref: Beilstein:4128886\n", + "xref: Gmelin:325860\n", + "property_value: chemrof:inchi_string \"InChI=1S/C3H7NO2S/c4-2(1-7)3(5)6/h2,7H,1,4H2,(H,5,6)/t2-/m0/s1\" xsd:string\n", + "property_value: chemrof:has_physiologically_stable_form CHEBI:35235\n", + "\n" + ] + } + ], + "execution_count": 199 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-20T18:55:07.947246Z", + "start_time": "2024-08-20T18:51:44.353485Z" + } + }, + "cell_type": "code", + "source": [ + "all_ids = list(chebi.descendants(ROOT))\n", + "terms = generate_write_all(all_ids, \"tmp/all.obo\")\n" + ], + "id": "7fec1427e96baea2", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processed 10000 IDs, made 9192 terms\n", + "Processed 20000 IDs, made 18382 terms\n", + "Processed 30000 IDs, made 27595 terms\n", + "Processed 40000 IDs, made 36834 terms\n", + "Processed 50000 IDs, made 46076 terms\n", + "Processed 60000 IDs, made 55286 terms\n", + "Processed 70000 IDs, made 64495 terms\n", + "Processed 80000 IDs, made 73689 terms\n", + "Processed 90000 IDs, made 82886 terms\n", + "Processed 100000 IDs, made 92106 terms\n", + "Processed 110000 IDs, made 101323 terms\n", + "Processed 120000 IDs, made 110551 terms\n", + "Processed 130000 IDs, made 119755 terms\n", + "Processed 140000 IDs, made 128917 terms\n", + "Processed 150000 IDs, made 138144 terms\n", + "Processed 160000 IDs, made 147361 terms\n", + "Processed 170000 IDs, made 156616 terms\n", + "Processed 180000 IDs, made 165852 terms\n", + "Processed 190000 IDs, made 175057 terms\n", + "Processed 200000 IDs, made 184107 terms\n", + "Processed 210000 IDs, made 190965 terms\n", + "Processed 220000 IDs, made 198424 terms\n", + "Processed 230000 IDs, made 207624 terms\n", + "Processed 240000 IDs, made 216843 terms\n", + "Processed 250000 IDs, made 226039 terms\n", + "Processed 260000 IDs, made 235245 terms\n", + "Processed 270000 IDs, made 244469 terms\n", + "Processed 280000 IDs, made 253712 terms\n", + "Processed 290000 IDs, made 262933 terms\n", + "Processed 300000 IDs, made 272147 terms\n", + "Processed 310000 IDs, made 281377 terms\n", + "Processed 320000 IDs, made 290585 terms\n", + "Processed 330000 IDs, made 299798 terms\n", + "Processed 340000 IDs, made 308976 terms\n", + "Processed 350000 IDs, made 318202 terms\n", + "Processed 360000 IDs, made 327420 terms\n", + "Processed 370000 IDs, made 336655 terms\n", + "Processed 380000 IDs, made 345885 terms\n", + "Processed 390000 IDs, made 355079 terms\n", + "Processed 400000 IDs, made 364320 terms\n", + "Processed 410000 IDs, made 373533 terms\n", + "Processed 420000 IDs, made 382211 terms\n", + "Processed 430000 IDs, made 391514 terms\n", + "Processed 440000 IDs, made 400853 terms\n", + "Processed 450000 IDs, made 409434 terms\n", + "Processed 460000 IDs, made 417875 terms\n", + "Processed 470000 IDs, made 426284 terms\n", + "Processed 480000 IDs, made 434681 terms\n", + "Processed 490000 IDs, made 443094 terms\n", + "Processed 500000 IDs, made 451519 terms\n", + "Processed 510000 IDs, made 460013 terms\n", + "Processed 520000 IDs, made 468955 terms\n", + "Processed 530000 IDs, made 477808 terms\n", + "Processed 540000 IDs, made 486681 terms\n", + "Processed 550000 IDs, made 495617 terms\n", + "Processed 560000 IDs, made 502651 terms\n", + "Processed 570000 IDs, made 509659 terms\n", + "Processed 580000 IDs, made 516618 terms\n" + ] + } + ], + "execution_count": 200 + }, + { + "cell_type": "code", + "source": [ + "len(terms)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:55:08.319197Z", + "start_time": "2024-08-20T18:55:08.315691Z" + } + }, + "id": "153be3a8b30c2713", + "outputs": [ + { + "data": { + "text/plain": [ + "519952" + ] + }, + "execution_count": 201, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 201 + }, + { + "cell_type": "code", + "source": [ + "# many roots expected when we make a subset\n", + "len(roots(terms))" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:55:08.714983Z", + "start_time": "2024-08-20T18:55:08.664411Z" + } + }, + "id": "ac31bc98e2ef7ef7", + "outputs": [ + { + "data": { + "text/plain": [ + "56" + ] + }, + "execution_count": 202, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 202 + }, + { + "cell_type": "code", + "source": "#write_terms(terms, f\"tmp/{ROOT.replace(':', '_')}.obo\")", + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:55:11.185465Z", + "start_time": "2024-08-20T18:55:09.054942Z" + } + }, + "id": "858eda4cbfd8fb5d", + "outputs": [], + "execution_count": 203 + }, + { + "cell_type": "code", + "source": [ + "fertirelin = \"CHEBI:177856\"" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:55:11.891901Z", + "start_time": "2024-08-20T18:55:11.889518Z" + } + }, + "id": "dbc4c586e92c3328", + "outputs": [], + "execution_count": 204 + }, + { + "cell_type": "code", + "source": [ + "t = make_term(fertirelin)\n", + "print(t.as_obo())" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T19:10:32.972903Z", + "start_time": "2024-08-20T19:10:32.957095Z" + } + }, + "id": "90336d5cc96554c7", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Term]\n", + "id: CHEBI:177856\n", + "name: fertirelin\n", + "is_a: CHEBI:25676\n", + "xref: KEGG:D07957\n", + "xref: Chemspider:163670\n", + "xref: CAS:38234-21-8\n", + "property_value: chemrof:inchi_string \"InChI=1S/C55H76N16O12/c1-4-59-53(82)44-12-8-20-71(44)54(83)38(11-7-19-60-55(56)57)66-49(78)39(21-30(2)3)65-46(75)27-62-47(76)40(22-31-13-15-34(73)16-14-31)67-52(81)43(28-72)70-50(79)41(23-32-25-61-36-10-6-5-9-35(32)36)68-51(80)42(24-33-26-58-29-63-33)69-48(77)37-17-18-45(74)64-37/h5-6,9-10,13-16,25-26,29-30,37-44,61,72-73H,4,7-8,11-12,17-24,27-28H2,1-3H3,(H,58,63)(H,59,82)(H,62,76)(H,64,74)(H,65,75)(H,66,78)(H,67,81)(H,68,80)(H,69,77)(H,70,79)(H4,56,57,60)/t37-,38-,39-,40-,41-,42-,43-,44-/m0/s1\" xsd:string\n", + "\n" + ] + } + ], + "execution_count": 210 + }, + { + "cell_type": "code", + "source": [ + "chebi.label(is_a_map[fertirelin][0])" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:55:12.256599Z", + "start_time": "2024-08-20T18:55:12.251643Z" + } + }, + "id": "e1185be596f3b559", + "outputs": [ + { + "data": { + "text/plain": [ + "'oligopeptide'" + ] + }, + "execution_count": 206, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 206 + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-20T18:55:13.596467Z", + "start_time": "2024-08-20T18:55:13.594489Z" + } + }, + "id": "3e17588e0084f22d", + "outputs": [], + "execution_count": null + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/poetry.lock b/poetry.lock index 75f268e1a..1e3a851fb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -21,91 +21,118 @@ scikit-learn = ">=1.0" test = ["pytest", "pytest-cov"] [[package]] -name = "aiohttp" -version = "3.9.5" -description = "Async http client/server framework (asyncio)" +name = "aiohappyeyeballs" +version = "2.4.0" +description = "Happy Eyeballs for asyncio" optional = true python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, - {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, - {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, - {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, - {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, - {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, - {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, - {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, - {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, - {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, + {file = "aiohappyeyeballs-2.4.0-py3-none-any.whl", hash = "sha256:7ce92076e249169a13c2f49320d1967425eaf1f407522d707d59cac7628d62bd"}, + {file = "aiohappyeyeballs-2.4.0.tar.gz", hash = "sha256:55a1714f084e63d49639800f95716da97a1f173d46a16dfcfda0016abb93b6b2"}, ] -[package.dependencies] +[[package]] +name = "aiohttp" +version = "3.10.5" +description = "Async http client/server framework (asyncio)" +optional = true +python-versions = ">=3.8" +files = [ + {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:18a01eba2574fb9edd5f6e5fb25f66e6ce061da5dab5db75e13fe1558142e0a3"}, + {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:94fac7c6e77ccb1ca91e9eb4cb0ac0270b9fb9b289738654120ba8cebb1189c6"}, + {file = "aiohttp-3.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f1f1c75c395991ce9c94d3e4aa96e5c59c8356a15b1c9231e783865e2772699"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7acae3cf1a2a2361ec4c8e787eaaa86a94171d2417aae53c0cca6ca3118ff6"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94c4381ffba9cc508b37d2e536b418d5ea9cfdc2848b9a7fea6aebad4ec6aac1"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c31ad0c0c507894e3eaa843415841995bf8de4d6b2d24c6e33099f4bc9fc0d4f"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0912b8a8fadeb32ff67a3ed44249448c20148397c1ed905d5dac185b4ca547bb"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d93400c18596b7dc4794d48a63fb361b01a0d8eb39f28800dc900c8fbdaca91"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d00f3c5e0d764a5c9aa5a62d99728c56d455310bcc288a79cab10157b3af426f"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d742c36ed44f2798c8d3f4bc511f479b9ceef2b93f348671184139e7d708042c"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:814375093edae5f1cb31e3407997cf3eacefb9010f96df10d64829362ae2df69"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8224f98be68a84b19f48e0bdc14224b5a71339aff3a27df69989fa47d01296f3"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9a487ef090aea982d748b1b0d74fe7c3950b109df967630a20584f9a99c0683"}, + {file = "aiohttp-3.10.5-cp310-cp310-win32.whl", hash = "sha256:d9ef084e3dc690ad50137cc05831c52b6ca428096e6deb3c43e95827f531d5ef"}, + {file = "aiohttp-3.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:66bf9234e08fe561dccd62083bf67400bdbf1c67ba9efdc3dac03650e97c6088"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c6a4e5e40156d72a40241a25cc226051c0a8d816610097a8e8f517aeacd59a2"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c634a3207a5445be65536d38c13791904fda0748b9eabf908d3fe86a52941cf"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4aff049b5e629ef9b3e9e617fa6e2dfeda1bf87e01bcfecaf3949af9e210105e"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1942244f00baaacaa8155eca94dbd9e8cc7017deb69b75ef67c78e89fdad3c77"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e04a1f2a65ad2f93aa20f9ff9f1b672bf912413e5547f60749fa2ef8a644e061"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f2bfc0032a00405d4af2ba27f3c429e851d04fad1e5ceee4080a1c570476697"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:424ae21498790e12eb759040bbb504e5e280cab64693d14775c54269fd1d2bb7"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:975218eee0e6d24eb336d0328c768ebc5d617609affaca5dbbd6dd1984f16ed0"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4120d7fefa1e2d8fb6f650b11489710091788de554e2b6f8347c7a20ceb003f5"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b90078989ef3fc45cf9221d3859acd1108af7560c52397ff4ace8ad7052a132e"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ba5a8b74c2a8af7d862399cdedce1533642fa727def0b8c3e3e02fcb52dca1b1"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:02594361128f780eecc2a29939d9dfc870e17b45178a867bf61a11b2a4367277"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4fc029e135859f533025bc82047334e24b0d489e75513144f25408ecaf058"}, + {file = "aiohttp-3.10.5-cp311-cp311-win32.whl", hash = "sha256:e1ca1ef5ba129718a8fc827b0867f6aa4e893c56eb00003b7367f8a733a9b072"}, + {file = "aiohttp-3.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:349ef8a73a7c5665cca65c88ab24abe75447e28aa3bc4c93ea5093474dfdf0ff"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:305be5ff2081fa1d283a76113b8df7a14c10d75602a38d9f012935df20731487"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a1c32a19ee6bbde02f1cb189e13a71b321256cc1d431196a9f824050b160d5a"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:61645818edd40cc6f455b851277a21bf420ce347baa0b86eaa41d51ef58ba23d"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c225286f2b13bab5987425558baa5cbdb2bc925b2998038fa028245ef421e75"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ba01ebc6175e1e6b7275c907a3a36be48a2d487549b656aa90c8a910d9f3178"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8eaf44ccbc4e35762683078b72bf293f476561d8b68ec8a64f98cf32811c323e"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c43eb1ab7cbf411b8e387dc169acb31f0ca0d8c09ba63f9eac67829585b44f"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de7a5299827253023c55ea549444e058c0eb496931fa05d693b95140a947cb73"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4790f0e15f00058f7599dab2b206d3049d7ac464dc2e5eae0e93fa18aee9e7bf"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:44b324a6b8376a23e6ba25d368726ee3bc281e6ab306db80b5819999c737d820"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0d277cfb304118079e7044aad0b76685d30ecb86f83a0711fc5fb257ffe832ca"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:54d9ddea424cd19d3ff6128601a4a4d23d54a421f9b4c0fff740505813739a91"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4f1c9866ccf48a6df2b06823e6ae80573529f2af3a0992ec4fe75b1a510df8a6"}, + {file = "aiohttp-3.10.5-cp312-cp312-win32.whl", hash = "sha256:dc4826823121783dccc0871e3f405417ac116055bf184ac04c36f98b75aacd12"}, + {file = "aiohttp-3.10.5-cp312-cp312-win_amd64.whl", hash = "sha256:22c0a23a3b3138a6bf76fc553789cb1a703836da86b0f306b6f0dc1617398abc"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7f6b639c36734eaa80a6c152a238242bedcee9b953f23bb887e9102976343092"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f29930bc2921cef955ba39a3ff87d2c4398a0394ae217f41cb02d5c26c8b1b77"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f489a2c9e6455d87eabf907ac0b7d230a9786be43fbe884ad184ddf9e9c1e385"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:123dd5b16b75b2962d0fff566effb7a065e33cd4538c1692fb31c3bda2bfb972"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b98e698dc34966e5976e10bbca6d26d6724e6bdea853c7c10162a3235aba6e16"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3b9162bab7e42f21243effc822652dc5bb5e8ff42a4eb62fe7782bcbcdfacf6"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1923a5c44061bffd5eebeef58cecf68096e35003907d8201a4d0d6f6e387ccaa"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55f011da0a843c3d3df2c2cf4e537b8070a419f891c930245f05d329c4b0689"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:afe16a84498441d05e9189a15900640a2d2b5e76cf4efe8cbb088ab4f112ee57"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8112fb501b1e0567a1251a2fd0747baae60a4ab325a871e975b7bb67e59221f"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1e72589da4c90337837fdfe2026ae1952c0f4a6e793adbbfbdd40efed7c63599"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4d46c7b4173415d8e583045fbc4daa48b40e31b19ce595b8d92cf639396c15d5"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:33e6bc4bab477c772a541f76cd91e11ccb6d2efa2b8d7d7883591dfb523e5987"}, + {file = "aiohttp-3.10.5-cp313-cp313-win32.whl", hash = "sha256:c58c6837a2c2a7cf3133983e64173aec11f9c2cd8e87ec2fdc16ce727bcf1a04"}, + {file = "aiohttp-3.10.5-cp313-cp313-win_amd64.whl", hash = "sha256:38172a70005252b6893088c0f5e8a47d173df7cc2b2bd88650957eb84fcf5022"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f6f18898ace4bcd2d41a122916475344a87f1dfdec626ecde9ee802a711bc569"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5ede29d91a40ba22ac1b922ef510aab871652f6c88ef60b9dcdf773c6d32ad7a"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:673f988370f5954df96cc31fd99c7312a3af0a97f09e407399f61583f30da9bc"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58718e181c56a3c02d25b09d4115eb02aafe1a732ce5714ab70326d9776457c3"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b38b1570242fbab8d86a84128fb5b5234a2f70c2e32f3070143a6d94bc854cf"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:074d1bff0163e107e97bd48cad9f928fa5a3eb4b9d33366137ffce08a63e37fe"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd31f176429cecbc1ba499d4aba31aaccfea488f418d60376b911269d3b883c5"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7384d0b87d4635ec38db9263e6a3f1eb609e2e06087f0aa7f63b76833737b471"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8989f46f3d7ef79585e98fa991e6ded55d2f48ae56d2c9fa5e491a6e4effb589"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c83f7a107abb89a227d6c454c613e7606c12a42b9a4ca9c5d7dad25d47c776ae"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cde98f323d6bf161041e7627a5fd763f9fd829bcfcd089804a5fdce7bb6e1b7d"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:676f94c5480d8eefd97c0c7e3953315e4d8c2b71f3b49539beb2aa676c58272f"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2d21ac12dc943c68135ff858c3a989f2194a709e6e10b4c8977d7fcd67dfd511"}, + {file = "aiohttp-3.10.5-cp38-cp38-win32.whl", hash = "sha256:17e997105bd1a260850272bfb50e2a328e029c941c2708170d9d978d5a30ad9a"}, + {file = "aiohttp-3.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:1c19de68896747a2aa6257ae4cf6ef59d73917a36a35ee9d0a6f48cff0f94db8"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7e2fe37ac654032db1f3499fe56e77190282534810e2a8e833141a021faaab0e"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5bf3ead3cb66ab990ee2561373b009db5bc0e857549b6c9ba84b20bc462e172"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b2c16a919d936ca87a3c5f0e43af12a89a3ce7ccbce59a2d6784caba945b68b"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad146dae5977c4dd435eb31373b3fe9b0b1bf26858c6fc452bf6af394067e10b"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c5c6fa16412b35999320f5c9690c0f554392dc222c04e559217e0f9ae244b92"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95c4dc6f61d610bc0ee1edc6f29d993f10febfe5b76bb470b486d90bbece6b22"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da452c2c322e9ce0cfef392e469a26d63d42860f829026a63374fde6b5c5876f"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:898715cf566ec2869d5cb4d5fb4be408964704c46c96b4be267442d265390f32"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:391cc3a9c1527e424c6865e087897e766a917f15dddb360174a70467572ac6ce"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:380f926b51b92d02a34119d072f178d80bbda334d1a7e10fa22d467a66e494db"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce91db90dbf37bb6fa0997f26574107e1b9d5ff939315247b7e615baa8ec313b"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9093a81e18c45227eebe4c16124ebf3e0d893830c6aca7cc310bfca8fe59d857"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ee40b40aa753d844162dcc80d0fe256b87cba48ca0054f64e68000453caead11"}, + {file = "aiohttp-3.10.5-cp39-cp39-win32.whl", hash = "sha256:03f2645adbe17f274444953bdea69f8327e9d278d961d85657cb0d06864814c1"}, + {file = "aiohttp-3.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:d17920f18e6ee090bdd3d0bfffd769d9f2cb4c8ffde3eb203777a3895c128862"}, + {file = "aiohttp-3.10.5.tar.gz", hash = "sha256:f071854b47d39591ce9a17981c46790acb30518e2f83dfca8db2dfa091178691"}, +] + +[package.dependencies] +aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" @@ -114,7 +141,7 @@ multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" @@ -356,32 +383,32 @@ files = [ [[package]] name = "attrs" -version = "23.2.0" +version = "24.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "babel" -version = "2.15.0" +version = "2.16.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" files = [ - {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, - {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, + {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, + {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, ] [package.extras] @@ -450,17 +477,17 @@ files = [ [[package]] name = "boto3" -version = "1.34.122" +version = "1.35.5" description = "The AWS SDK for Python" optional = true python-versions = ">=3.8" files = [ - {file = "boto3-1.34.122-py3-none-any.whl", hash = "sha256:b2d7400ff84fa547e53b3d9acfa3c95d65d45b5886ba1ede1f7df4768d1cc0b1"}, - {file = "boto3-1.34.122.tar.gz", hash = "sha256:56840d8ce91654d182f1c113f0791fa2113c3aa43230c50b4481f235348a6037"}, + {file = "boto3-1.35.5-py3-none-any.whl", hash = "sha256:2cef3aa476181395c260f4b6e6c5565e5a3022a874fb6b579d8e6b169f94e0b3"}, + {file = "boto3-1.35.5.tar.gz", hash = "sha256:5724ddeda8e18c7614c20a09c20159ed87ff7439755cf5e250a1a3feaf9afb7e"}, ] [package.dependencies] -botocore = ">=1.34.122,<1.35.0" +botocore = ">=1.35.5,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -469,35 +496,35 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.122" +version = "1.35.5" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.8" files = [ - {file = "botocore-1.34.122-py3-none-any.whl", hash = "sha256:6d75df3af831b62f0c7baa109728d987e0a8d34bfadf0476eb32e2f29a079a36"}, - {file = "botocore-1.34.122.tar.gz", hash = "sha256:9374e16a36f1062c3e27816e8599b53eba99315dfac71cc84fc3aee3f5d3cbe3"}, + {file = "botocore-1.35.5-py3-none-any.whl", hash = "sha256:8116b72c7ae845c195146e437e2afd9d17538a37b3f3548dcf67c12c86ba0742"}, + {file = "botocore-1.35.5.tar.gz", hash = "sha256:3a0086c7124cb3b0d9f98563d00ffd14a942c3f9e731d8d1ccf0d3a1ac7ed884"}, ] [package.dependencies] jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" urllib3 = [ - {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, + {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, ] [package.extras] -crt = ["awscrt (==0.20.11)"] +crt = ["awscrt (==0.21.2)"] [[package]] name = "cachetools" -version = "5.3.3" +version = "5.5.0" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, - {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, + {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, + {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, ] [[package]] @@ -527,74 +554,89 @@ ujson = ["ujson (>=5.7.0)"] [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] name = "cffi" -version = "1.16.0" +version = "1.17.0" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" files = [ - {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, - {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, - {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, - {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, - {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, - {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, - {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, - {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, - {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, - {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, - {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, - {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, - {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, - {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, - {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, + {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, + {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, + {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, + {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, + {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, + {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, + {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, + {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, + {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, + {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, + {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, + {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, + {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, + {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, + {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, + {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, ] [package.dependencies] @@ -935,13 +977,13 @@ toml = ["tomli"] [[package]] name = "curies" -version = "0.7.9" +version = "0.7.10" description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." optional = false python-versions = ">=3.8" files = [ - {file = "curies-0.7.9-py3-none-any.whl", hash = "sha256:e4c5beb91642376953c94db0ee2fb5d2b011c3b16749516436114ba61442f260"}, - {file = "curies-0.7.9.tar.gz", hash = "sha256:3b63c5fea7b0e967629a3a384b1a8c59b56c503487c1dcbacddeab59e25db4d8"}, + {file = "curies-0.7.10-py3-none-any.whl", hash = "sha256:ad80f420dd76b6f3e921a245370ff6ab7473c48c29c17254970c03cd2e58af5f"}, + {file = "curies-0.7.10.tar.gz", hash = "sha256:98a7ceb94710fab3a02727a7f85ba0719dd22be5fc8b5f2ad1d7d4cfc47d64ce"}, ] [package.dependencies] @@ -974,33 +1016,33 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "debugpy" -version = "1.8.1" +version = "1.8.5" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"}, - {file = "debugpy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e"}, - {file = "debugpy-1.8.1-cp310-cp310-win32.whl", hash = "sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0"}, - {file = "debugpy-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd"}, - {file = "debugpy-1.8.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb"}, - {file = "debugpy-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099"}, - {file = "debugpy-1.8.1-cp311-cp311-win32.whl", hash = "sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146"}, - {file = "debugpy-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8"}, - {file = "debugpy-1.8.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539"}, - {file = "debugpy-1.8.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace"}, - {file = "debugpy-1.8.1-cp312-cp312-win32.whl", hash = "sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0"}, - {file = "debugpy-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98"}, - {file = "debugpy-1.8.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39"}, - {file = "debugpy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7"}, - {file = "debugpy-1.8.1-cp38-cp38-win32.whl", hash = "sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9"}, - {file = "debugpy-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234"}, - {file = "debugpy-1.8.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42"}, - {file = "debugpy-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703"}, - {file = "debugpy-1.8.1-cp39-cp39-win32.whl", hash = "sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23"}, - {file = "debugpy-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3"}, - {file = "debugpy-1.8.1-py2.py3-none-any.whl", hash = "sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242"}, - {file = "debugpy-1.8.1.zip", hash = "sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42"}, + {file = "debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7"}, + {file = "debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a"}, + {file = "debugpy-1.8.5-cp310-cp310-win32.whl", hash = "sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed"}, + {file = "debugpy-1.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e"}, + {file = "debugpy-1.8.5-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:606bccba19f7188b6ea9579c8a4f5a5364ecd0bf5a0659c8a5d0e10dcee3032a"}, + {file = "debugpy-1.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db9fb642938a7a609a6c865c32ecd0d795d56c1aaa7a7a5722d77855d5e77f2b"}, + {file = "debugpy-1.8.5-cp311-cp311-win32.whl", hash = "sha256:4fbb3b39ae1aa3e5ad578f37a48a7a303dad9a3d018d369bc9ec629c1cfa7408"}, + {file = "debugpy-1.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:345d6a0206e81eb68b1493ce2fbffd57c3088e2ce4b46592077a943d2b968ca3"}, + {file = "debugpy-1.8.5-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:5b5c770977c8ec6c40c60d6f58cacc7f7fe5a45960363d6974ddb9b62dbee156"}, + {file = "debugpy-1.8.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a65b00b7cdd2ee0c2cf4c7335fef31e15f1b7056c7fdbce9e90193e1a8c8cb"}, + {file = "debugpy-1.8.5-cp312-cp312-win32.whl", hash = "sha256:c9f7c15ea1da18d2fcc2709e9f3d6de98b69a5b0fff1807fb80bc55f906691f7"}, + {file = "debugpy-1.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:28ced650c974aaf179231668a293ecd5c63c0a671ae6d56b8795ecc5d2f48d3c"}, + {file = "debugpy-1.8.5-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:3df6692351172a42af7558daa5019651f898fc67450bf091335aa8a18fbf6f3a"}, + {file = "debugpy-1.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd04a73eb2769eb0bfe43f5bfde1215c5923d6924b9b90f94d15f207a402226"}, + {file = "debugpy-1.8.5-cp38-cp38-win32.whl", hash = "sha256:8f913ee8e9fcf9d38a751f56e6de12a297ae7832749d35de26d960f14280750a"}, + {file = "debugpy-1.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:a697beca97dad3780b89a7fb525d5e79f33821a8bc0c06faf1f1289e549743cf"}, + {file = "debugpy-1.8.5-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0a1029a2869d01cb777216af8c53cda0476875ef02a2b6ff8b2f2c9a4b04176c"}, + {file = "debugpy-1.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84c276489e141ed0b93b0af648eef891546143d6a48f610945416453a8ad406"}, + {file = "debugpy-1.8.5-cp39-cp39-win32.whl", hash = "sha256:ad84b7cde7fd96cf6eea34ff6c4a1b7887e0fe2ea46e099e53234856f9d99a34"}, + {file = "debugpy-1.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:7b0fe36ed9d26cb6836b0a51453653f8f2e347ba7348f2bbfe76bfeb670bfb1c"}, + {file = "debugpy-1.8.5-py2.py3-none-any.whl", hash = "sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44"}, + {file = "debugpy-1.8.5.zip", hash = "sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0"}, ] [[package]] @@ -1121,13 +1163,13 @@ dev = ["flake8", "ipython", "mock", "pytest", "pytest-cov", "restview", "setupto [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -1149,13 +1191,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastjsonschema" -version = "2.19.1" +version = "2.20.0" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"}, - {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"}, + {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, + {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, ] [package.extras] @@ -1218,18 +1260,18 @@ files = [ [[package]] name = "filelock" -version = "3.14.0" +version = "3.15.4" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, - {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, + {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, + {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] @@ -1281,53 +1323,53 @@ test = ["Faker (==2.0.0)", "blinker", "invoke (==2.2.0)", "mock (==3.0.5)", "pyt [[package]] name = "fonttools" -version = "4.53.0" +version = "4.53.1" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.53.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:52a6e0a7a0bf611c19bc8ec8f7592bdae79c8296c70eb05917fd831354699b20"}, - {file = "fonttools-4.53.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:099634631b9dd271d4a835d2b2a9e042ccc94ecdf7e2dd9f7f34f7daf333358d"}, - {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e40013572bfb843d6794a3ce076c29ef4efd15937ab833f520117f8eccc84fd6"}, - {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715b41c3e231f7334cbe79dfc698213dcb7211520ec7a3bc2ba20c8515e8a3b5"}, - {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74ae2441731a05b44d5988d3ac2cf784d3ee0a535dbed257cbfff4be8bb49eb9"}, - {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:95db0c6581a54b47c30860d013977b8a14febc206c8b5ff562f9fe32738a8aca"}, - {file = "fonttools-4.53.0-cp310-cp310-win32.whl", hash = "sha256:9cd7a6beec6495d1dffb1033d50a3f82dfece23e9eb3c20cd3c2444d27514068"}, - {file = "fonttools-4.53.0-cp310-cp310-win_amd64.whl", hash = "sha256:daaef7390e632283051e3cf3e16aff2b68b247e99aea916f64e578c0449c9c68"}, - {file = "fonttools-4.53.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a209d2e624ba492df4f3bfad5996d1f76f03069c6133c60cd04f9a9e715595ec"}, - {file = "fonttools-4.53.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f520d9ac5b938e6494f58a25c77564beca7d0199ecf726e1bd3d56872c59749"}, - {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eceef49f457253000e6a2d0f7bd08ff4e9fe96ec4ffce2dbcb32e34d9c1b8161"}, - {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1f3e34373aa16045484b4d9d352d4c6b5f9f77ac77a178252ccbc851e8b2ee"}, - {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:28d072169fe8275fb1a0d35e3233f6df36a7e8474e56cb790a7258ad822b6fd6"}, - {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a2a6ba400d386e904fd05db81f73bee0008af37799a7586deaa4aef8cd5971e"}, - {file = "fonttools-4.53.0-cp311-cp311-win32.whl", hash = "sha256:bb7273789f69b565d88e97e9e1da602b4ee7ba733caf35a6c2affd4334d4f005"}, - {file = "fonttools-4.53.0-cp311-cp311-win_amd64.whl", hash = "sha256:9fe9096a60113e1d755e9e6bda15ef7e03391ee0554d22829aa506cdf946f796"}, - {file = "fonttools-4.53.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d8f191a17369bd53a5557a5ee4bab91d5330ca3aefcdf17fab9a497b0e7cff7a"}, - {file = "fonttools-4.53.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:93156dd7f90ae0a1b0e8871032a07ef3178f553f0c70c386025a808f3a63b1f4"}, - {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bff98816cb144fb7b85e4b5ba3888a33b56ecef075b0e95b95bcd0a5fbf20f06"}, - {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:973d030180eca8255b1bce6ffc09ef38a05dcec0e8320cc9b7bcaa65346f341d"}, - {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c4ee5a24e281fbd8261c6ab29faa7fd9a87a12e8c0eed485b705236c65999109"}, - {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd5bc124fae781a4422f61b98d1d7faa47985f663a64770b78f13d2c072410c2"}, - {file = "fonttools-4.53.0-cp312-cp312-win32.whl", hash = "sha256:a239afa1126b6a619130909c8404070e2b473dd2b7fc4aacacd2e763f8597fea"}, - {file = "fonttools-4.53.0-cp312-cp312-win_amd64.whl", hash = "sha256:45b4afb069039f0366a43a5d454bc54eea942bfb66b3fc3e9a2c07ef4d617380"}, - {file = "fonttools-4.53.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:93bc9e5aaa06ff928d751dc6be889ff3e7d2aa393ab873bc7f6396a99f6fbb12"}, - {file = "fonttools-4.53.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2367d47816cc9783a28645bc1dac07f8ffc93e0f015e8c9fc674a5b76a6da6e4"}, - {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:907fa0b662dd8fc1d7c661b90782ce81afb510fc4b7aa6ae7304d6c094b27bce"}, - {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e0ad3c6ea4bd6a289d958a1eb922767233f00982cf0fe42b177657c86c80a8f"}, - {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:73121a9b7ff93ada888aaee3985a88495489cc027894458cb1a736660bdfb206"}, - {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ee595d7ba9bba130b2bec555a40aafa60c26ce68ed0cf509983e0f12d88674fd"}, - {file = "fonttools-4.53.0-cp38-cp38-win32.whl", hash = "sha256:fca66d9ff2ac89b03f5aa17e0b21a97c21f3491c46b583bb131eb32c7bab33af"}, - {file = "fonttools-4.53.0-cp38-cp38-win_amd64.whl", hash = "sha256:31f0e3147375002aae30696dd1dc596636abbd22fca09d2e730ecde0baad1d6b"}, - {file = "fonttools-4.53.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d6166192dcd925c78a91d599b48960e0a46fe565391c79fe6de481ac44d20ac"}, - {file = "fonttools-4.53.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef50ec31649fbc3acf6afd261ed89d09eb909b97cc289d80476166df8438524d"}, - {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f193f060391a455920d61684a70017ef5284ccbe6023bb056e15e5ac3de11d1"}, - {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9f09ff17f947392a855e3455a846f9855f6cf6bec33e9a427d3c1d254c712f"}, - {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0c555e039d268445172b909b1b6bdcba42ada1cf4a60e367d68702e3f87e5f64"}, - {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4788036201c908079e89ae3f5399b33bf45b9ea4514913f4dbbe4fac08efe0"}, - {file = "fonttools-4.53.0-cp39-cp39-win32.whl", hash = "sha256:d1a24f51a3305362b94681120c508758a88f207fa0a681c16b5a4172e9e6c7a9"}, - {file = "fonttools-4.53.0-cp39-cp39-win_amd64.whl", hash = "sha256:1e677bfb2b4bd0e5e99e0f7283e65e47a9814b0486cb64a41adf9ef110e078f2"}, - {file = "fonttools-4.53.0-py3-none-any.whl", hash = "sha256:6b4f04b1fbc01a3569d63359f2227c89ab294550de277fd09d8fca6185669fa4"}, - {file = "fonttools-4.53.0.tar.gz", hash = "sha256:c93ed66d32de1559b6fc348838c7572d5c0ac1e4a258e76763a5caddd8944002"}, + {file = "fonttools-4.53.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397"}, + {file = "fonttools-4.53.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3"}, + {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b96cd370a61f4d083c9c0053bf634279b094308d52fdc2dd9a22d8372fdd590d"}, + {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1c7c5aa18dd3b17995898b4a9b5929d69ef6ae2af5b96d585ff4005033d82f0"}, + {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e013aae589c1c12505da64a7d8d023e584987e51e62006e1bb30d72f26522c41"}, + {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9efd176f874cb6402e607e4cc9b4a9cd584d82fc34a4b0c811970b32ba62501f"}, + {file = "fonttools-4.53.1-cp310-cp310-win32.whl", hash = "sha256:c8696544c964500aa9439efb6761947393b70b17ef4e82d73277413f291260a4"}, + {file = "fonttools-4.53.1-cp310-cp310-win_amd64.whl", hash = "sha256:8959a59de5af6d2bec27489e98ef25a397cfa1774b375d5787509c06659b3671"}, + {file = "fonttools-4.53.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da33440b1413bad53a8674393c5d29ce64d8c1a15ef8a77c642ffd900d07bfe1"}, + {file = "fonttools-4.53.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ff7e5e9bad94e3a70c5cd2fa27f20b9bb9385e10cddab567b85ce5d306ea923"}, + {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6e7170d675d12eac12ad1a981d90f118c06cf680b42a2d74c6c931e54b50719"}, + {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee32ea8765e859670c4447b0817514ca79054463b6b79784b08a8df3a4d78e3"}, + {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e08f572625a1ee682115223eabebc4c6a2035a6917eac6f60350aba297ccadb"}, + {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b21952c092ffd827504de7e66b62aba26fdb5f9d1e435c52477e6486e9d128b2"}, + {file = "fonttools-4.53.1-cp311-cp311-win32.whl", hash = "sha256:9dfdae43b7996af46ff9da520998a32b105c7f098aeea06b2226b30e74fbba88"}, + {file = "fonttools-4.53.1-cp311-cp311-win_amd64.whl", hash = "sha256:d4d0096cb1ac7a77b3b41cd78c9b6bc4a400550e21dc7a92f2b5ab53ed74eb02"}, + {file = "fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d92d3c2a1b39631a6131c2fa25b5406855f97969b068e7e08413325bc0afba58"}, + {file = "fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3b3c8ebafbee8d9002bd8f1195d09ed2bd9ff134ddec37ee8f6a6375e6a4f0e8"}, + {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32f029c095ad66c425b0ee85553d0dc326d45d7059dbc227330fc29b43e8ba60"}, + {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f5e6c3510b79ea27bb1ebfcc67048cde9ec67afa87c7dd7efa5c700491ac7f"}, + {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f677ce218976496a587ab17140da141557beb91d2a5c1a14212c994093f2eae2"}, + {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9e6ceba2a01b448e36754983d376064730690401da1dd104ddb543519470a15f"}, + {file = "fonttools-4.53.1-cp312-cp312-win32.whl", hash = "sha256:791b31ebbc05197d7aa096bbc7bd76d591f05905d2fd908bf103af4488e60670"}, + {file = "fonttools-4.53.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ed170b5e17da0264b9f6fae86073be3db15fa1bd74061c8331022bca6d09bab"}, + {file = "fonttools-4.53.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c818c058404eb2bba05e728d38049438afd649e3c409796723dfc17cd3f08749"}, + {file = "fonttools-4.53.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:651390c3b26b0c7d1f4407cad281ee7a5a85a31a110cbac5269de72a51551ba2"}, + {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e54f1bba2f655924c1138bbc7fa91abd61f45c68bd65ab5ed985942712864bbb"}, + {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9cd19cf4fe0595ebdd1d4915882b9440c3a6d30b008f3cc7587c1da7b95be5f"}, + {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2af40ae9cdcb204fc1d8f26b190aa16534fcd4f0df756268df674a270eab575d"}, + {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:35250099b0cfb32d799fb5d6c651220a642fe2e3c7d2560490e6f1d3f9ae9169"}, + {file = "fonttools-4.53.1-cp38-cp38-win32.whl", hash = "sha256:f08df60fbd8d289152079a65da4e66a447efc1d5d5a4d3f299cdd39e3b2e4a7d"}, + {file = "fonttools-4.53.1-cp38-cp38-win_amd64.whl", hash = "sha256:7b6b35e52ddc8fb0db562133894e6ef5b4e54e1283dff606fda3eed938c36fc8"}, + {file = "fonttools-4.53.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75a157d8d26c06e64ace9df037ee93a4938a4606a38cb7ffaf6635e60e253b7a"}, + {file = "fonttools-4.53.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4824c198f714ab5559c5be10fd1adf876712aa7989882a4ec887bf1ef3e00e31"}, + {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:becc5d7cb89c7b7afa8321b6bb3dbee0eec2b57855c90b3e9bf5fb816671fa7c"}, + {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ec3fb43befb54be490147b4a922b5314e16372a643004f182babee9f9c3407"}, + {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:73379d3ffdeecb376640cd8ed03e9d2d0e568c9d1a4e9b16504a834ebadc2dfb"}, + {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:02569e9a810f9d11f4ae82c391ebc6fb5730d95a0657d24d754ed7763fb2d122"}, + {file = "fonttools-4.53.1-cp39-cp39-win32.whl", hash = "sha256:aae7bd54187e8bf7fd69f8ab87b2885253d3575163ad4d669a262fe97f0136cb"}, + {file = "fonttools-4.53.1-cp39-cp39-win_amd64.whl", hash = "sha256:e5b708073ea3d684235648786f5f6153a48dc8762cdfe5563c57e80787c29fbb"}, + {file = "fonttools-4.53.1-py3-none-any.whl", hash = "sha256:f1f8758a2ad110bd6432203a344269f445a2907dc24ef6bccfd0ac4e14e0d71d"}, + {file = "fonttools-4.53.1.tar.gz", hash = "sha256:e128778a8e9bc11159ce5447f76766cefbd876f44bd79aff030287254e4752c4"}, ] [package.extras] @@ -1462,22 +1504,23 @@ rfc3987 = "*" [[package]] name = "gilda" -version = "1.2.0" +version = "1.2.1" description = "Grounding for biomedical entities with contextual disambiguation" optional = true python-versions = "*" files = [ - {file = "gilda-1.2.0-py3-none-any.whl", hash = "sha256:0ed74847d4f52cea9d48e38aa32c431e787f905676c1a5e111a9f59ae20e9696"}, - {file = "gilda-1.2.0.tar.gz", hash = "sha256:5ef630d6de7d03704ed57408ce5b8679f1f42e4e72ea3dfc0eaf4c50555686dd"}, + {file = "gilda-1.2.1-py3-none-any.whl", hash = "sha256:380a76a7e7533b92ac8f861c04bb6e25b65dcb0605ea4fd9c26ce715b15ba424"}, + {file = "gilda-1.2.1.tar.gz", hash = "sha256:2c97217e5d8e675302a6cbc75c007b72e4cb7ff1885bb86512a432fd8ccf5f7b"}, ] [package.dependencies] -adeft = ">=0.11.0" +adeft = "*" boto3 = "*" flask = ">=3.0,<4.0" flask-restx = ">=1.3.0" pystow = ">=0.1.10" regex = "*" +scikit-learn = "<1.5" unidecode = "*" werkzeug = "*" @@ -1654,13 +1697,13 @@ socks = ["socksio (==1.*)"] [[package]] name = "idna" -version = "3.7" +version = "3.8" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, + {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, ] [[package]] @@ -1779,40 +1822,44 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.1.0" +version = "8.4.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, - {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, + {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, + {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "importlib-resources" -version = "6.4.0" +version = "6.4.4" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, - {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, + {file = "importlib_resources-6.4.4-py3-none-any.whl", hash = "sha256:dda242603d1c9cd836c3368b1174ed74cb4049ecd209e7a1a0104620c18c5c11"}, + {file = "importlib_resources-6.4.4.tar.gz", hash = "sha256:20600c8b7361938dc0bb2d5ec0297802e575df486f5a544fa414da65e13721f7"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] +type = ["pytest-mypy"] [[package]] name = "iniconfig" @@ -1827,13 +1874,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.4" +version = "6.29.5" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, - {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, + {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, + {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, ] [package.dependencies] @@ -1897,21 +1944,21 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa [[package]] name = "ipywidgets" -version = "8.1.3" +version = "8.1.5" description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" files = [ - {file = "ipywidgets-8.1.3-py3-none-any.whl", hash = "sha256:efafd18f7a142248f7cb0ba890a68b96abd4d6e88ddbda483c9130d12667eaf2"}, - {file = "ipywidgets-8.1.3.tar.gz", hash = "sha256:f5f9eeaae082b1823ce9eac2575272952f40d748893972956dc09700a6392d9c"}, + {file = "ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245"}, + {file = "ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17"}, ] [package.dependencies] comm = ">=0.1.3" ipython = ">=6.1.0" -jupyterlab-widgets = ">=3.0.11,<3.1.0" +jupyterlab-widgets = ">=3.0.12,<3.1.0" traitlets = ">=4.3.1" -widgetsnbextension = ">=4.0.11,<4.1.0" +widgetsnbextension = ">=4.0.12,<4.1.0" [package.extras] test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] @@ -1991,6 +2038,76 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "jiter" +version = "0.5.0" +description = "Fast iterable JSON parser." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, + {file = "jiter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e"}, + {file = "jiter-0.5.0-cp310-none-win32.whl", hash = "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf"}, + {file = "jiter-0.5.0-cp310-none-win_amd64.whl", hash = "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646"}, + {file = "jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb"}, + {file = "jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338"}, + {file = "jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4"}, + {file = "jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6"}, + {file = "jiter-0.5.0-cp38-none-win32.whl", hash = "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e"}, + {file = "jiter-0.5.0-cp38-none-win_amd64.whl", hash = "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb"}, + {file = "jiter-0.5.0-cp39-none-win32.whl", hash = "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61"}, + {file = "jiter-0.5.0-cp39-none-win_amd64.whl", hash = "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1"}, + {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, +] + [[package]] name = "jmespath" version = "1.0.1" @@ -2108,24 +2225,24 @@ ply = "*" [[package]] name = "jsonpointer" -version = "2.4" +version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +python-versions = ">=3.7" files = [ - {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, - {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, ] [[package]] name = "jsonschema" -version = "4.22.0" +version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, - {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, ] [package.dependencies] @@ -2141,11 +2258,14 @@ rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \" rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} rpds-py = ">=0.7.1" uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = [ + {version = ">=1.11", optional = true, markers = "extra == \"format\""}, + {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""}, +] [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] [[package]] name = "jsonschema-specifications" @@ -2290,13 +2410,13 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.14.1" +version = "2.14.2" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.14.1-py3-none-any.whl", hash = "sha256:16f7177c3a4ea8fe37784e2d31271981a812f0b2874af17339031dc3510cc2a5"}, - {file = "jupyter_server-2.14.1.tar.gz", hash = "sha256:12558d158ec7a0653bf96cc272bc7ad79e0127d503b982ed144399346694f726"}, + {file = "jupyter_server-2.14.2-py3-none-any.whl", hash = "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd"}, + {file = "jupyter_server-2.14.2.tar.gz", hash = "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b"}, ] [package.dependencies] @@ -2345,13 +2465,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.2.1" +version = "4.2.4" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.2.1-py3-none-any.whl", hash = "sha256:6ac6e3827b3c890e6e549800e8a4f4aaea6a69321e2240007902aa7a0c56a8e4"}, - {file = "jupyterlab-4.2.1.tar.gz", hash = "sha256:a10fb71085a6900820c62d43324005046402ffc8f0fde696103e37238a839507"}, + {file = "jupyterlab-4.2.4-py3-none-any.whl", hash = "sha256:807a7ec73637744f879e112060d4b9d9ebe028033b7a429b2d1f4fc523d00245"}, + {file = "jupyterlab-4.2.4.tar.gz", hash = "sha256:343a979fb9582fd08c8511823e320703281cd072a0049bcdafdc7afeda7f2537"}, ] [package.dependencies] @@ -2366,6 +2486,7 @@ jupyter-server = ">=2.4.0,<3" jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2" packaging = "*" +setuptools = ">=40.1.0" tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} tornado = ">=6.2.0" traitlets = "*" @@ -2375,7 +2496,7 @@ dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] docs-screenshots = ["altair (==5.3.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.2)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.1.post2)", "matplotlib (==3.8.3)", "nbconvert (>=7.0.0)", "pandas (==2.2.1)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] -upgrade-extension = ["copier (>=8,<10)", "jinja2-time (<0.3)", "pydantic (<2.0)", "pyyaml-include (<2.0)", "tomli-w (<2.0)"] +upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] [[package]] name = "jupyterlab-pygments" @@ -2390,13 +2511,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.27.2" +version = "2.27.3" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab_server-2.27.2-py3-none-any.whl", hash = "sha256:54aa2d64fd86383b5438d9f0c032f043c4d8c0264b8af9f60bd061157466ea43"}, - {file = "jupyterlab_server-2.27.2.tar.gz", hash = "sha256:15cbb349dc45e954e09bacf81b9f9bcb10815ff660fb2034ecd7417db3a7ea27"}, + {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, + {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, ] [package.dependencies] @@ -2416,13 +2537,13 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v [[package]] name = "jupyterlab-widgets" -version = "3.0.11" +version = "3.0.13" description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_widgets-3.0.11-py3-none-any.whl", hash = "sha256:78287fd86d20744ace330a61625024cf5521e1c012a352ddc0a3cdc2348becd0"}, - {file = "jupyterlab_widgets-3.0.11.tar.gz", hash = "sha256:dd5ac679593c969af29c9bed054c24f26842baa51352114736756bc035deee27"}, + {file = "jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54"}, + {file = "jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed"}, ] [[package]] @@ -2572,13 +2693,13 @@ files = [ [[package]] name = "lark" -version = "1.1.9" +version = "1.2.2" description = "a modern parsing library" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "lark-1.1.9-py3-none-any.whl", hash = "sha256:a0dd3a87289f8ccbb325901e4222e723e7d745dbfc1803eaf5f3d2ace19cf2db"}, - {file = "lark-1.1.9.tar.gz", hash = "sha256:15fa5236490824c2c4aba0e22d2d6d823575dcaf4cdd1848e34b6ad836240fba"}, + {file = "lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c"}, + {file = "lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80"}, ] [package.extras] @@ -2589,13 +2710,13 @@ regex = ["regex"] [[package]] name = "linkml" -version = "1.7.10" +version = "1.8.3" description = "Linked Open Data Modeling Language" optional = false python-versions = "<4.0.0,>=3.8.1" files = [ - {file = "linkml-1.7.10-py3-none-any.whl", hash = "sha256:bf21cce814e9d1509489f1e6e15a7e86e4f11d949490d9a7a5c3f6b5b412ec62"}, - {file = "linkml-1.7.10.tar.gz", hash = "sha256:1c38601c3cd495e34490b8cf7277fd3674ec68dcbe9f5efcec2658093801ce91"}, + {file = "linkml-1.8.3-py3-none-any.whl", hash = "sha256:ced1af3055312d15335cfe8846847c0491519c9af28cce5ebd8e4e26e4361754"}, + {file = "linkml-1.8.3.tar.gz", hash = "sha256:6bf65f3d6c4ce9e88af0fda71b954ae4c6f5e885f8b4d74c1090380d565e76ba"}, ] [package.dependencies] @@ -2608,7 +2729,7 @@ jinja2 = ">=3.1.0" jsonasobj2 = ">=1.0.3,<2.0.0" jsonschema = {version = ">=4.0.0", extras = ["format"]} linkml-dataops = "*" -linkml-runtime = ">=1.7.4" +linkml-runtime = ">=1.8.1,<2.0.0" openpyxl = "*" parse = "*" prefixcommons = ">=0.1.7" @@ -2649,13 +2770,13 @@ linkml-runtime = ">=1.1.6" [[package]] name = "linkml-renderer" -version = "0.3.0" +version = "0.3.1" description = "linkml-renderer" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "linkml_renderer-0.3.0-py3-none-any.whl", hash = "sha256:9b2c0207751c8b5abb814b67fa1ae0f2a4dce80637d56ed770f74a40d4fee614"}, - {file = "linkml_renderer-0.3.0.tar.gz", hash = "sha256:59441022182d1386ef761ad4d055a23cef5707e0070400e2f6860893751c05f8"}, + {file = "linkml_renderer-0.3.1-py3-none-any.whl", hash = "sha256:3737247ecc349c270b849c55593719fb457b385223ef8f75e7e7b0da11eb12e3"}, + {file = "linkml_renderer-0.3.1.tar.gz", hash = "sha256:f600ca96d603e53b7187abe1dc9c417334bd96756d3e4f704a96892f6b28ba5a"}, ] [package.dependencies] @@ -2666,13 +2787,13 @@ pydantic = "*" [[package]] name = "linkml-runtime" -version = "1.7.6" +version = "1.8.2" description = "Runtime environment for LinkML, the Linked open data modeling language" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "linkml_runtime-1.7.6-py3-none-any.whl", hash = "sha256:71403ca655733ec4697147e18a7b108d864bd7f285c472f2f25bf401567886a4"}, - {file = "linkml_runtime-1.7.6.tar.gz", hash = "sha256:c7a82ab6eb5082a7861e91ff547bb6e70b9d4ed5eedf0fc45ffa15d01b380b8d"}, + {file = "linkml_runtime-1.8.2-py3-none-any.whl", hash = "sha256:a66d7b5b82cb57b2d6c603c75ca22db4bae0409e0fb2b9e7835f921a23716096"}, + {file = "linkml_runtime-1.8.2.tar.gz", hash = "sha256:f5067aeeb96c8d3ca1761b55b82d927af88d810459d533fb1f7876a90224b130"}, ] [package.dependencies] @@ -2720,153 +2841,149 @@ test = ["black (>=24.1.0)", "cogapp", "mypy (>=1.10.0)", "numpy", "pytest", "pyt [[package]] name = "lxml" -version = "5.2.2" +version = "5.3.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.6" files = [ - {file = "lxml-5.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:364d03207f3e603922d0d3932ef363d55bbf48e3647395765f9bfcbdf6d23632"}, - {file = "lxml-5.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50127c186f191b8917ea2fb8b206fbebe87fd414a6084d15568c27d0a21d60db"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74e4f025ef3db1c6da4460dd27c118d8cd136d0391da4e387a15e48e5c975147"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981a06a3076997adf7c743dcd0d7a0415582661e2517c7d961493572e909aa1d"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aef5474d913d3b05e613906ba4090433c515e13ea49c837aca18bde190853dff"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e275ea572389e41e8b039ac076a46cb87ee6b8542df3fff26f5baab43713bca"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5b65529bb2f21ac7861a0e94fdbf5dc0daab41497d18223b46ee8515e5ad297"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bcc98f911f10278d1daf14b87d65325851a1d29153caaf146877ec37031d5f36"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:b47633251727c8fe279f34025844b3b3a3e40cd1b198356d003aa146258d13a2"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:fbc9d316552f9ef7bba39f4edfad4a734d3d6f93341232a9dddadec4f15d425f"}, - {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:13e69be35391ce72712184f69000cda04fc89689429179bc4c0ae5f0b7a8c21b"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b6a30a9ab040b3f545b697cb3adbf3696c05a3a68aad172e3fd7ca73ab3c835"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a233bb68625a85126ac9f1fc66d24337d6e8a0f9207b688eec2e7c880f012ec0"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:dfa7c241073d8f2b8e8dbc7803c434f57dbb83ae2a3d7892dd068d99e96efe2c"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1a7aca7964ac4bb07680d5c9d63b9d7028cace3e2d43175cb50bba8c5ad33316"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ae4073a60ab98529ab8a72ebf429f2a8cc612619a8c04e08bed27450d52103c0"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ffb2be176fed4457e445fe540617f0252a72a8bc56208fd65a690fdb1f57660b"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e290d79a4107d7d794634ce3e985b9ae4f920380a813717adf61804904dc4393"}, - {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:96e85aa09274955bb6bd483eaf5b12abadade01010478154b0ec70284c1b1526"}, - {file = "lxml-5.2.2-cp310-cp310-win32.whl", hash = "sha256:f956196ef61369f1685d14dad80611488d8dc1ef00be57c0c5a03064005b0f30"}, - {file = "lxml-5.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:875a3f90d7eb5c5d77e529080d95140eacb3c6d13ad5b616ee8095447b1d22e7"}, - {file = "lxml-5.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:45f9494613160d0405682f9eee781c7e6d1bf45f819654eb249f8f46a2c22545"}, - {file = "lxml-5.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0b3f2df149efb242cee2ffdeb6674b7f30d23c9a7af26595099afaf46ef4e88"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d28cb356f119a437cc58a13f8135ab8a4c8ece18159eb9194b0d269ec4e28083"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:657a972f46bbefdbba2d4f14413c0d079f9ae243bd68193cb5061b9732fa54c1"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b9ea10063efb77a965a8d5f4182806fbf59ed068b3c3fd6f30d2ac7bee734"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07542787f86112d46d07d4f3c4e7c760282011b354d012dc4141cc12a68cef5f"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:303f540ad2dddd35b92415b74b900c749ec2010e703ab3bfd6660979d01fd4ed"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2eb2227ce1ff998faf0cd7fe85bbf086aa41dfc5af3b1d80867ecfe75fb68df3"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:1d8a701774dfc42a2f0b8ccdfe7dbc140500d1049e0632a611985d943fcf12df"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:56793b7a1a091a7c286b5f4aa1fe4ae5d1446fe742d00cdf2ffb1077865db10d"}, - {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eb00b549b13bd6d884c863554566095bf6fa9c3cecb2e7b399c4bc7904cb33b5"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a2569a1f15ae6c8c64108a2cd2b4a858fc1e13d25846be0666fc144715e32ab"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:8cf85a6e40ff1f37fe0f25719aadf443686b1ac7652593dc53c7ef9b8492b115"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:d237ba6664b8e60fd90b8549a149a74fcc675272e0e95539a00522e4ca688b04"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0b3f5016e00ae7630a4b83d0868fca1e3d494c78a75b1c7252606a3a1c5fc2ad"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23441e2b5339bc54dc949e9e675fa35efe858108404ef9aa92f0456929ef6fe8"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2fb0ba3e8566548d6c8e7dd82a8229ff47bd8fb8c2da237607ac8e5a1b8312e5"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:79d1fb9252e7e2cfe4de6e9a6610c7cbb99b9708e2c3e29057f487de5a9eaefa"}, - {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6dcc3d17eac1df7859ae01202e9bb11ffa8c98949dcbeb1069c8b9a75917e01b"}, - {file = "lxml-5.2.2-cp311-cp311-win32.whl", hash = "sha256:4c30a2f83677876465f44c018830f608fa3c6a8a466eb223535035fbc16f3438"}, - {file = "lxml-5.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:49095a38eb333aaf44c06052fd2ec3b8f23e19747ca7ec6f6c954ffea6dbf7be"}, - {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7429e7faa1a60cad26ae4227f4dd0459efde239e494c7312624ce228e04f6391"}, - {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:50ccb5d355961c0f12f6cf24b7187dbabd5433f29e15147a67995474f27d1776"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc911208b18842a3a57266d8e51fc3cfaccee90a5351b92079beed912a7914c2"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33ce9e786753743159799fdf8e92a5da351158c4bfb6f2db0bf31e7892a1feb5"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec87c44f619380878bd49ca109669c9f221d9ae6883a5bcb3616785fa8f94c97"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08ea0f606808354eb8f2dfaac095963cb25d9d28e27edcc375d7b30ab01abbf6"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75a9632f1d4f698b2e6e2e1ada40e71f369b15d69baddb8968dcc8e683839b18"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74da9f97daec6928567b48c90ea2c82a106b2d500f397eeb8941e47d30b1ca85"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:0969e92af09c5687d769731e3f39ed62427cc72176cebb54b7a9d52cc4fa3b73"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:9164361769b6ca7769079f4d426a41df6164879f7f3568be9086e15baca61466"}, - {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d26a618ae1766279f2660aca0081b2220aca6bd1aa06b2cf73f07383faf48927"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab67ed772c584b7ef2379797bf14b82df9aa5f7438c5b9a09624dd834c1c1aaf"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3d1e35572a56941b32c239774d7e9ad724074d37f90c7a7d499ab98761bd80cf"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:8268cbcd48c5375f46e000adb1390572c98879eb4f77910c6053d25cc3ac2c67"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e282aedd63c639c07c3857097fc0e236f984ceb4089a8b284da1c526491e3f3d"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfdc2bfe69e9adf0df4915949c22a25b39d175d599bf98e7ddf620a13678585"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4aefd911793b5d2d7a921233a54c90329bf3d4a6817dc465f12ffdfe4fc7b8fe"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8b8df03a9e995b6211dafa63b32f9d405881518ff1ddd775db4e7b98fb545e1c"}, - {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f11ae142f3a322d44513de1018b50f474f8f736bc3cd91d969f464b5bfef8836"}, - {file = "lxml-5.2.2-cp312-cp312-win32.whl", hash = "sha256:16a8326e51fcdffc886294c1e70b11ddccec836516a343f9ed0f82aac043c24a"}, - {file = "lxml-5.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:bbc4b80af581e18568ff07f6395c02114d05f4865c2812a1f02f2eaecf0bfd48"}, - {file = "lxml-5.2.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e3d9d13603410b72787579769469af730c38f2f25505573a5888a94b62b920f8"}, - {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38b67afb0a06b8575948641c1d6d68e41b83a3abeae2ca9eed2ac59892b36706"}, - {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c689d0d5381f56de7bd6966a4541bff6e08bf8d3871bbd89a0c6ab18aa699573"}, - {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:cf2a978c795b54c539f47964ec05e35c05bd045db5ca1e8366988c7f2fe6b3ce"}, - {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:739e36ef7412b2bd940f75b278749106e6d025e40027c0b94a17ef7968d55d56"}, - {file = "lxml-5.2.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d8bbcd21769594dbba9c37d3c819e2d5847656ca99c747ddb31ac1701d0c0ed9"}, - {file = "lxml-5.2.2-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:2304d3c93f2258ccf2cf7a6ba8c761d76ef84948d87bf9664e14d203da2cd264"}, - {file = "lxml-5.2.2-cp36-cp36m-win32.whl", hash = "sha256:02437fb7308386867c8b7b0e5bc4cd4b04548b1c5d089ffb8e7b31009b961dc3"}, - {file = "lxml-5.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:edcfa83e03370032a489430215c1e7783128808fd3e2e0a3225deee278585196"}, - {file = "lxml-5.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:28bf95177400066596cdbcfc933312493799382879da504633d16cf60bba735b"}, - {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a745cc98d504d5bd2c19b10c79c61c7c3df9222629f1b6210c0368177589fb8"}, - {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b590b39ef90c6b22ec0be925b211298e810b4856909c8ca60d27ffbca6c12e6"}, - {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b336b0416828022bfd5a2e3083e7f5ba54b96242159f83c7e3eebaec752f1716"}, - {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:c2faf60c583af0d135e853c86ac2735ce178f0e338a3c7f9ae8f622fd2eb788c"}, - {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:4bc6cb140a7a0ad1f7bc37e018d0ed690b7b6520ade518285dc3171f7a117905"}, - {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7ff762670cada8e05b32bf1e4dc50b140790909caa8303cfddc4d702b71ea184"}, - {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:57f0a0bbc9868e10ebe874e9f129d2917750adf008fe7b9c1598c0fbbfdde6a6"}, - {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:a6d2092797b388342c1bc932077ad232f914351932353e2e8706851c870bca1f"}, - {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:60499fe961b21264e17a471ec296dcbf4365fbea611bf9e303ab69db7159ce61"}, - {file = "lxml-5.2.2-cp37-cp37m-win32.whl", hash = "sha256:d9b342c76003c6b9336a80efcc766748a333573abf9350f4094ee46b006ec18f"}, - {file = "lxml-5.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b16db2770517b8799c79aa80f4053cd6f8b716f21f8aca962725a9565ce3ee40"}, - {file = "lxml-5.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7ed07b3062b055d7a7f9d6557a251cc655eed0b3152b76de619516621c56f5d3"}, - {file = "lxml-5.2.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60fdd125d85bf9c279ffb8e94c78c51b3b6a37711464e1f5f31078b45002421"}, - {file = "lxml-5.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7e24cb69ee5f32e003f50e016d5fde438010c1022c96738b04fc2423e61706"}, - {file = "lxml-5.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23cfafd56887eaed93d07bc4547abd5e09d837a002b791e9767765492a75883f"}, - {file = "lxml-5.2.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:19b4e485cd07b7d83e3fe3b72132e7df70bfac22b14fe4bf7a23822c3a35bff5"}, - {file = "lxml-5.2.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7ce7ad8abebe737ad6143d9d3bf94b88b93365ea30a5b81f6877ec9c0dee0a48"}, - {file = "lxml-5.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e49b052b768bb74f58c7dda4e0bdf7b79d43a9204ca584ffe1fb48a6f3c84c66"}, - {file = "lxml-5.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d14a0d029a4e176795cef99c056d58067c06195e0c7e2dbb293bf95c08f772a3"}, - {file = "lxml-5.2.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:be49ad33819d7dcc28a309b86d4ed98e1a65f3075c6acd3cd4fe32103235222b"}, - {file = "lxml-5.2.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a6d17e0370d2516d5bb9062c7b4cb731cff921fc875644c3d751ad857ba9c5b1"}, - {file = "lxml-5.2.2-cp38-cp38-win32.whl", hash = "sha256:5b8c041b6265e08eac8a724b74b655404070b636a8dd6d7a13c3adc07882ef30"}, - {file = "lxml-5.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:f61efaf4bed1cc0860e567d2ecb2363974d414f7f1f124b1df368bbf183453a6"}, - {file = "lxml-5.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fb91819461b1b56d06fa4bcf86617fac795f6a99d12239fb0c68dbeba41a0a30"}, - {file = "lxml-5.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d4ed0c7cbecde7194cd3228c044e86bf73e30a23505af852857c09c24e77ec5d"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54401c77a63cc7d6dc4b4e173bb484f28a5607f3df71484709fe037c92d4f0ed"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:625e3ef310e7fa3a761d48ca7ea1f9d8718a32b1542e727d584d82f4453d5eeb"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:519895c99c815a1a24a926d5b60627ce5ea48e9f639a5cd328bda0515ea0f10c"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7079d5eb1c1315a858bbf180000757db8ad904a89476653232db835c3114001"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:343ab62e9ca78094f2306aefed67dcfad61c4683f87eee48ff2fd74902447726"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:cd9e78285da6c9ba2d5c769628f43ef66d96ac3085e59b10ad4f3707980710d3"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:546cf886f6242dff9ec206331209db9c8e1643ae642dea5fdbecae2453cb50fd"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:02f6a8eb6512fdc2fd4ca10a49c341c4e109aa6e9448cc4859af5b949622715a"}, - {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:339ee4a4704bc724757cd5dd9dc8cf4d00980f5d3e6e06d5847c1b594ace68ab"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0a028b61a2e357ace98b1615fc03f76eb517cc028993964fe08ad514b1e8892d"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f90e552ecbad426eab352e7b2933091f2be77115bb16f09f78404861c8322981"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d83e2d94b69bf31ead2fa45f0acdef0757fa0458a129734f59f67f3d2eb7ef32"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a02d3c48f9bb1e10c7788d92c0c7db6f2002d024ab6e74d6f45ae33e3d0288a3"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6d68ce8e7b2075390e8ac1e1d3a99e8b6372c694bbe612632606d1d546794207"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:453d037e09a5176d92ec0fd282e934ed26d806331a8b70ab431a81e2fbabf56d"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:3b019d4ee84b683342af793b56bb35034bd749e4cbdd3d33f7d1107790f8c472"}, - {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb3942960f0beb9f46e2a71a3aca220d1ca32feb5a398656be934320804c0df9"}, - {file = "lxml-5.2.2-cp39-cp39-win32.whl", hash = "sha256:ac6540c9fff6e3813d29d0403ee7a81897f1d8ecc09a8ff84d2eea70ede1cdbf"}, - {file = "lxml-5.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:610b5c77428a50269f38a534057444c249976433f40f53e3b47e68349cca1425"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b537bd04d7ccd7c6350cdaaaad911f6312cbd61e6e6045542f781c7f8b2e99d2"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4820c02195d6dfb7b8508ff276752f6b2ff8b64ae5d13ebe02e7667e035000b9"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a09f6184f17a80897172863a655467da2b11151ec98ba8d7af89f17bf63dae"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:76acba4c66c47d27c8365e7c10b3d8016a7da83d3191d053a58382311a8bf4e1"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b128092c927eaf485928cec0c28f6b8bead277e28acf56800e972aa2c2abd7a2"}, - {file = "lxml-5.2.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ae791f6bd43305aade8c0e22f816b34f3b72b6c820477aab4d18473a37e8090b"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a2f6a1bc2460e643785a2cde17293bd7a8f990884b822f7bca47bee0a82fc66b"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e8d351ff44c1638cb6e980623d517abd9f580d2e53bfcd18d8941c052a5a009"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bec4bd9133420c5c52d562469c754f27c5c9e36ee06abc169612c959bd7dbb07"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:55ce6b6d803890bd3cc89975fca9de1dff39729b43b73cb15ddd933b8bc20484"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ab6a358d1286498d80fe67bd3d69fcbc7d1359b45b41e74c4a26964ca99c3f8"}, - {file = "lxml-5.2.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:06668e39e1f3c065349c51ac27ae430719d7806c026fec462e5693b08b95696b"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9cd5323344d8ebb9fb5e96da5de5ad4ebab993bbf51674259dbe9d7a18049525"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89feb82ca055af0fe797a2323ec9043b26bc371365847dbe83c7fd2e2f181c34"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e481bba1e11ba585fb06db666bfc23dbe181dbafc7b25776156120bf12e0d5a6"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9d6c6ea6a11ca0ff9cd0390b885984ed31157c168565702959c25e2191674a14"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3d98de734abee23e61f6b8c2e08a88453ada7d6486dc7cdc82922a03968928db"}, - {file = "lxml-5.2.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:69ab77a1373f1e7563e0fb5a29a8440367dec051da6c7405333699d07444f511"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:34e17913c431f5ae01d8658dbf792fdc457073dcdfbb31dc0cc6ab256e664a8d"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f8757b03208c3f50097761be2dea0aba02e94f0dc7023ed73a7bb14ff11eb0"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a520b4f9974b0a0a6ed73c2154de57cdfd0c8800f4f15ab2b73238ffed0b36e"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5e097646944b66207023bc3c634827de858aebc226d5d4d6d16f0b77566ea182"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b5e4ef22ff25bfd4ede5f8fb30f7b24446345f3e79d9b7455aef2836437bc38a"}, - {file = "lxml-5.2.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff69a9a0b4b17d78170c73abe2ab12084bdf1691550c5629ad1fe7849433f324"}, - {file = "lxml-5.2.2.tar.gz", hash = "sha256:bb2dc4898180bea79863d5487e5f9c7c34297414bad54bcd0f0852aee9cfdb87"}, + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"}, + {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"}, + {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"}, + {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"}, + {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"}, + {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"}, + {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"}, + {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"}, + {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"}, + {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"}, + {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"}, + {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"}, + {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"}, + {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"}, + {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"}, + {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"}, + {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"}, + {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"}, + {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"}, + {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"}, + {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"}, + {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"}, ] [package.extras] @@ -2874,7 +2991,7 @@ cssselect = ["cssselect (>=0.7)"] html-clean = ["lxml-html-clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.10)"] +source = ["Cython (>=3.0.11)"] [[package]] name = "markdown-it-py" @@ -2971,40 +3088,51 @@ files = [ [[package]] name = "matplotlib" -version = "3.9.0" +version = "3.9.2" description = "Python plotting package" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2bcee1dffaf60fe7656183ac2190bd630842ff87b3153afb3e384d966b57fe56"}, - {file = "matplotlib-3.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f988bafb0fa39d1074ddd5bacd958c853e11def40800c5824556eb630f94d3b"}, - {file = "matplotlib-3.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe428e191ea016bb278758c8ee82a8129c51d81d8c4bc0846c09e7e8e9057241"}, - {file = "matplotlib-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaf3978060a106fab40c328778b148f590e27f6fa3cd15a19d6892575bce387d"}, - {file = "matplotlib-3.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e7f03e5cbbfacdd48c8ea394d365d91ee8f3cae7e6ec611409927b5ed997ee4"}, - {file = "matplotlib-3.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:13beb4840317d45ffd4183a778685e215939be7b08616f431c7795276e067463"}, - {file = "matplotlib-3.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:063af8587fceeac13b0936c42a2b6c732c2ab1c98d38abc3337e430e1ff75e38"}, - {file = "matplotlib-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a2fa6d899e17ddca6d6526cf6e7ba677738bf2a6a9590d702c277204a7c6152"}, - {file = "matplotlib-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:550cdda3adbd596078cca7d13ed50b77879104e2e46392dcd7c75259d8f00e85"}, - {file = "matplotlib-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cce0f31b351e3551d1f3779420cf8f6ec0d4a8cf9c0237a3b549fd28eb4abb"}, - {file = "matplotlib-3.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c53aeb514ccbbcbab55a27f912d79ea30ab21ee0531ee2c09f13800efb272674"}, - {file = "matplotlib-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5be985db2596d761cdf0c2eaf52396f26e6a64ab46bd8cd810c48972349d1be"}, - {file = "matplotlib-3.9.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c79f3a585f1368da6049318bdf1f85568d8d04b2e89fc24b7e02cc9b62017382"}, - {file = "matplotlib-3.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bdd1ecbe268eb3e7653e04f451635f0fb0f77f07fd070242b44c076c9106da84"}, - {file = "matplotlib-3.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d38e85a1a6d732f645f1403ce5e6727fd9418cd4574521d5803d3d94911038e5"}, - {file = "matplotlib-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a490715b3b9984fa609116481b22178348c1a220a4499cda79132000a79b4db"}, - {file = "matplotlib-3.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8146ce83cbc5dc71c223a74a1996d446cd35cfb6a04b683e1446b7e6c73603b7"}, - {file = "matplotlib-3.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:d91a4ffc587bacf5c4ce4ecfe4bcd23a4b675e76315f2866e588686cc97fccdf"}, - {file = "matplotlib-3.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:616fabf4981a3b3c5a15cd95eba359c8489c4e20e03717aea42866d8d0465956"}, - {file = "matplotlib-3.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd53c79fd02f1c1808d2cfc87dd3cf4dbc63c5244a58ee7944497107469c8d8a"}, - {file = "matplotlib-3.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06a478f0d67636554fa78558cfbcd7b9dba85b51f5c3b5a0c9be49010cf5f321"}, - {file = "matplotlib-3.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81c40af649d19c85f8073e25e5806926986806fa6d54be506fbf02aef47d5a89"}, - {file = "matplotlib-3.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52146fc3bd7813cc784562cb93a15788be0b2875c4655e2cc6ea646bfa30344b"}, - {file = "matplotlib-3.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:0fc51eaa5262553868461c083d9adadb11a6017315f3a757fc45ec6ec5f02888"}, - {file = "matplotlib-3.9.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bd4f2831168afac55b881db82a7730992aa41c4f007f1913465fb182d6fb20c0"}, - {file = "matplotlib-3.9.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:290d304e59be2b33ef5c2d768d0237f5bd132986bdcc66f80bc9bcc300066a03"}, - {file = "matplotlib-3.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff2e239c26be4f24bfa45860c20ffccd118d270c5b5d081fa4ea409b5469fcd"}, - {file = "matplotlib-3.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:af4001b7cae70f7eaacfb063db605280058246de590fa7874f00f62259f2df7e"}, - {file = "matplotlib-3.9.0.tar.gz", hash = "sha256:e6d29ea6c19e34b30fb7d88b7081f869a03014f66fe06d62cc77d5a6ea88ed7a"}, + {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, + {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66"}, + {file = "matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a"}, + {file = "matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447"}, + {file = "matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e"}, + {file = "matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c"}, + {file = "matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e"}, + {file = "matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413"}, + {file = "matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b"}, + {file = "matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c"}, + {file = "matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca"}, + {file = "matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea"}, + {file = "matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697"}, + {file = "matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92"}, ] [package.dependencies] @@ -3302,13 +3430,13 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "ndex2" -version = "3.8.0" +version = "3.9.0" description = "Nice CX Python includes a client and a data model." optional = false python-versions = "*" files = [ - {file = "ndex2-3.8.0-py2.py3-none-any.whl", hash = "sha256:c00e4748489f3f523df2524917b7be921c590fffd8a860a5077e1504f47afcc2"}, - {file = "ndex2-3.8.0.tar.gz", hash = "sha256:9f4d7f4b9594664191fba5c6512e315ed47b13bc416df5769802f87a7c22d1c8"}, + {file = "ndex2-3.9.0-py2.py3-none-any.whl", hash = "sha256:168a6ed3209f2c9596752897fe535599b11f87305c10d55446bf8ffef4762283"}, + {file = "ndex2-3.9.0.tar.gz", hash = "sha256:388b2f110b2eb1ba787298bc4210ca0cea821c462ec71a4ec4cb6eb0e1b74f70"}, ] [package.dependencies] @@ -3352,13 +3480,13 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "nltk" -version = "3.8.1" +version = "3.9.1" description = "Natural Language Toolkit" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "nltk-3.8.1-py3-none-any.whl", hash = "sha256:fd5c9109f976fa86bcadba8f91e47f5e9293bd034474752e92a520f81c93dda5"}, - {file = "nltk-3.8.1.zip", hash = "sha256:1834da3d0682cba4f2cede2f9aad6b0fafb6461ba451db0efb6f9c39798d64d3"}, + {file = "nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1"}, + {file = "nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868"}, ] [package.dependencies] @@ -3417,47 +3545,56 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "1.26.4" +version = "2.0.1" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fbb536eac80e27a2793ffd787895242b7f18ef792563d742c2d673bfcb75134"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:69ff563d43c69b1baba77af455dd0a839df8d25e8590e79c90fcbe1499ebde42"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:1b902ce0e0a5bb7704556a217c4f63a7974f8f43e090aff03fcf262e0b135e02"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:f1659887361a7151f89e79b276ed8dff3d75877df906328f14d8bb40bb4f5101"}, + {file = "numpy-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4658c398d65d1b25e1760de3157011a80375da861709abd7cef3bad65d6543f9"}, + {file = "numpy-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4127d4303b9ac9f94ca0441138acead39928938660ca58329fe156f84b9f3015"}, + {file = "numpy-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e5eeca8067ad04bc8a2a8731183d51d7cbaac66d86085d5f4766ee6bf19c7f87"}, + {file = "numpy-2.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9adbd9bb520c866e1bfd7e10e1880a1f7749f1f6e5017686a5fbb9b72cf69f82"}, + {file = "numpy-2.0.1-cp310-cp310-win32.whl", hash = "sha256:7b9853803278db3bdcc6cd5beca37815b133e9e77ff3d4733c247414e78eb8d1"}, + {file = "numpy-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:81b0893a39bc5b865b8bf89e9ad7807e16717f19868e9d234bdaf9b1f1393868"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75b4e316c5902d8163ef9d423b1c3f2f6252226d1aa5cd8a0a03a7d01ffc6268"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6e4eeb6eb2fced786e32e6d8df9e755ce5be920d17f7ce00bc38fcde8ccdbf9e"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a1e01dcaab205fbece13c1410253a9eea1b1c9b61d237b6fa59bcc46e8e89343"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a8fc2de81ad835d999113ddf87d1ea2b0f4704cbd947c948d2f5513deafe5a7b"}, + {file = "numpy-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a3d94942c331dd4e0e1147f7a8699a4aa47dffc11bf8a1523c12af8b2e91bbe"}, + {file = "numpy-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15eb4eca47d36ec3f78cde0a3a2ee24cf05ca7396ef808dda2c0ddad7c2bde67"}, + {file = "numpy-2.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b83e16a5511d1b1f8a88cbabb1a6f6a499f82c062a4251892d9ad5d609863fb7"}, + {file = "numpy-2.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f87fec1f9bc1efd23f4227becff04bd0e979e23ca50cc92ec88b38489db3b55"}, + {file = "numpy-2.0.1-cp311-cp311-win32.whl", hash = "sha256:36d3a9405fd7c511804dc56fc32974fa5533bdeb3cd1604d6b8ff1d292b819c4"}, + {file = "numpy-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:08458fbf403bff5e2b45f08eda195d4b0c9b35682311da5a5a0a0925b11b9bd8"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bf4e6f4a2a2e26655717a1983ef6324f2664d7011f6ef7482e8c0b3d51e82ac"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6fddc5fe258d3328cd8e3d7d3e02234c5d70e01ebe377a6ab92adb14039cb4"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5daab361be6ddeb299a918a7c0864fa8618af66019138263247af405018b04e1"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:ea2326a4dca88e4a274ba3a4405eb6c6467d3ffbd8c7d38632502eaae3820587"}, + {file = "numpy-2.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529af13c5f4b7a932fb0e1911d3a75da204eff023ee5e0e79c1751564221a5c8"}, + {file = "numpy-2.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6790654cb13eab303d8402354fabd47472b24635700f631f041bd0b65e37298a"}, + {file = "numpy-2.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbab9fc9c391700e3e1287666dfd82d8666d10e69a6c4a09ab97574c0b7ee0a7"}, + {file = "numpy-2.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99d0d92a5e3613c33a5f01db206a33f8fdf3d71f2912b0de1739894668b7a93b"}, + {file = "numpy-2.0.1-cp312-cp312-win32.whl", hash = "sha256:173a00b9995f73b79eb0191129f2455f1e34c203f559dd118636858cc452a1bf"}, + {file = "numpy-2.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:bb2124fdc6e62baae159ebcfa368708867eb56806804d005860b6007388df171"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc085b28d62ff4009364e7ca34b80a9a080cbd97c2c0630bb5f7f770dae9414"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8fae4ebbf95a179c1156fab0b142b74e4ba4204c87bde8d3d8b6f9c34c5825ef"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:72dc22e9ec8f6eaa206deb1b1355eb2e253899d7347f5e2fae5f0af613741d06"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:ec87f5f8aca726117a1c9b7083e7656a9d0d606eec7299cc067bb83d26f16e0c"}, + {file = "numpy-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f682ea61a88479d9498bf2091fdcd722b090724b08b31d63e022adc063bad59"}, + {file = "numpy-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8efc84f01c1cd7e34b3fb310183e72fcdf55293ee736d679b6d35b35d80bba26"}, + {file = "numpy-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3fdabe3e2a52bc4eff8dc7a5044342f8bd9f11ef0934fcd3289a788c0eb10018"}, + {file = "numpy-2.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:24a0e1befbfa14615b49ba9659d3d8818a0f4d8a1c5822af8696706fbda7310c"}, + {file = "numpy-2.0.1-cp39-cp39-win32.whl", hash = "sha256:f9cf5ea551aec449206954b075db819f52adc1638d46a6738253a712d553c7b4"}, + {file = "numpy-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:e9e81fa9017eaa416c056e5d9e71be93d05e2c3c2ab308d23307a8bc4443c368"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61728fba1e464f789b11deb78a57805c70b2ed02343560456190d0501ba37b0f"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:12f5d865d60fb9734e60a60f1d5afa6d962d8d4467c120a1c0cda6eb2964437d"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eacf3291e263d5a67d8c1a581a8ebbcfd6447204ef58828caf69a5e3e8c75990"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2c3a346ae20cfd80b6cfd3e60dc179963ef2ea58da5ec074fd3d9e7a1e7ba97f"}, + {file = "numpy-2.0.1.tar.gz", hash = "sha256:485b87235796410c3519a699cfe1faab097e509e90ebb05dcd098db2ae87e7b3"}, ] [[package]] @@ -3503,36 +3640,37 @@ tests = ["coverage", "pytest", "unittest-templates"] [[package]] name = "openai" -version = "1.33.0" +version = "1.42.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.33.0-py3-none-any.whl", hash = "sha256:621163b56570897ab8389d187f686a53d4771fd6ce95d481c0a9611fe8bc4229"}, - {file = "openai-1.33.0.tar.gz", hash = "sha256:1169211a7b326ecbc821cafb427c29bfd0871f9a3e0947dd9e51acb3b0f1df78"}, + {file = "openai-1.42.0-py3-none-any.whl", hash = "sha256:dc91e0307033a4f94931e5d03cc3b29b9717014ad5e73f9f2051b6cb5eda4d80"}, + {file = "openai-1.42.0.tar.gz", hash = "sha256:c9d31853b4e0bc2dc8bd08003b462a006035655a701471695d0bfdc08529cde3"}, ] [package.dependencies] anyio = ">=3.5.0,<5" distro = ">=1.7.0,<2" httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" pydantic = ">=1.9.0,<3" sniffio = "*" tqdm = ">4" -typing-extensions = ">=4.7,<5" +typing-extensions = ">=4.11,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "openpyxl" -version = "3.1.3" +version = "3.1.5" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "openpyxl-3.1.3-py2.py3-none-any.whl", hash = "sha256:25071b558db709de9e8782c3d3e058af3b23ffb2fc6f40c8f0c45a154eced2c3"}, - {file = "openpyxl-3.1.3.tar.gz", hash = "sha256:8dd482e5350125b2388070bb2477927be2e8ebc27df61178709bc8c8751da2f9"}, + {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, + {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, ] [package.dependencies] @@ -3551,13 +3689,13 @@ files = [ [[package]] name = "packaging" -version = "24.0" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] @@ -3600,9 +3738,9 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.22.4", markers = "python_version < \"3.11\""}, {version = ">=1.23.2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -3662,13 +3800,13 @@ sqlalchemy = "*" [[package]] name = "parse" -version = "1.20.1" +version = "1.20.2" description = "parse() is the opposite of format()" optional = false python-versions = "*" files = [ - {file = "parse-1.20.1-py2.py3-none-any.whl", hash = "sha256:76ddd5214255ae711db4c512be636151fbabaa948c6f30115aecc440422ca82c"}, - {file = "parse-1.20.1.tar.gz", hash = "sha256:09002ca350ad42e76629995f71f7b518670bcf93548bdde3684fd55d2be51975"}, + {file = "parse-1.20.2-py2.py3-none-any.whl", hash = "sha256:967095588cb802add9177d0c0b6133b5ba33b1ea9007ca800e526f42a85af558"}, + {file = "parse-1.20.2.tar.gz", hash = "sha256:b41d604d16503c79d81af5165155c0b20f6c8d6c559efa66b4b695c3e5a0a0ce"}, ] [[package]] @@ -3702,84 +3840,95 @@ ptyprocess = ">=0.5" [[package]] name = "pillow" -version = "10.3.0" +version = "10.4.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, - {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, - {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, - {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, - {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, - {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, - {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, - {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, - {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, - {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, - {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, - {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, - {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, - {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, - {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, - {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, - {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] + {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, + {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, + {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, + {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, + {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, + {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, + {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, + {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, + {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, + {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, + {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, + {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, + {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, + {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, + {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, + {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, + {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, + {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, + {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] @@ -3788,13 +3937,13 @@ xmp = ["defusedxml"] [[package]] name = "pip" -version = "24.0" +version = "24.2" description = "The PyPA recommended tool for installing Python packages." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pip-24.0-py3-none-any.whl", hash = "sha256:ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc"}, - {file = "pip-24.0.tar.gz", hash = "sha256:ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2"}, + {file = "pip-24.2-py3-none-any.whl", hash = "sha256:2cd581cf58ab7fcfca4ce8efa6dcacd0de5bf8d0a3eb9ec927e07405f4d9e2a2"}, + {file = "pip-24.2.tar.gz", hash = "sha256:5b5e490b5e9cb275c879595064adce9ebd31b854e3e803740b72f9ccf34a45b8"}, ] [[package]] @@ -3858,13 +4007,13 @@ requests = ">=2.28.1,<3.0.0" [[package]] name = "prefixmaps" -version = "0.2.4" +version = "0.2.5" description = "A python library for retrieving semantic prefix maps" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "prefixmaps-0.2.4-py3-none-any.whl", hash = "sha256:89bf0e6fb08c276f754f9624c42adf2e87c64ee92a3dde1f7eff01f22d85b512"}, - {file = "prefixmaps-0.2.4.tar.gz", hash = "sha256:ae86a1b31189d0516d199756d5808f75f44b39e86546c356cc78c0fe8d2078af"}, + {file = "prefixmaps-0.2.5-py3-none-any.whl", hash = "sha256:68caa04b3a6a8e058aa1c55affe32c62e44b564d031d63f768e267b796a1f3ee"}, + {file = "prefixmaps-0.2.5.tar.gz", hash = "sha256:aaccd2425ade2ea97a502c58be49fe8f3536e3d5e919712ae0358a39fc800799"}, ] [package.dependencies] @@ -3887,13 +4036,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.46" +version = "3.0.47" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.46-py3-none-any.whl", hash = "sha256:45abe60a8300f3c618b23c16c4bb98c6fc80af8ce8b17c7ae92db48db3ee63c1"}, - {file = "prompt_toolkit-3.0.46.tar.gz", hash = "sha256:869c50d682152336e23c4db7f74667639b5047494202ffe7670817053fd57795"}, + {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, + {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, ] [package.dependencies] @@ -3918,27 +4067,28 @@ python-dateutil = ">=2.8,<3.0" [[package]] name = "psutil" -version = "5.9.8" +version = "6.0.0" description = "Cross-platform lib for process and system monitoring in Python." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, - {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, - {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, - {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, - {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, - {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, - {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, - {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, - {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, - {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, + {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"}, + {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"}, + {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"}, + {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"}, + {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"}, + {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"}, + {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"}, + {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"}, + {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"}, + {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"}, ] [package.extras] @@ -3957,13 +4107,13 @@ files = [ [[package]] name = "pure-eval" -version = "0.2.2" +version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" files = [ - {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, - {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, ] [package.extras] @@ -3982,109 +4132,122 @@ files = [ [[package]] name = "pydantic" -version = "2.7.3" +version = "2.8.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.3-py3-none-any.whl", hash = "sha256:ea91b002777bf643bb20dd717c028ec43216b24a6001a280f83877fd2655d0b4"}, - {file = "pydantic-2.7.3.tar.gz", hash = "sha256:c46c76a40bb1296728d7a8b99aa73dd70a48c3510111ff290034f860c99c419e"}, + {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, + {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.18.4" -typing-extensions = ">=4.6.1" +pydantic-core = "2.20.1" +typing-extensions = [ + {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, + {version = ">=4.6.1", markers = "python_version < \"3.13\""}, +] [package.extras] email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.18.4" +version = "2.20.1" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"}, - {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"}, - {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"}, - {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"}, - {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"}, - {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"}, - {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"}, - {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"}, - {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"}, - {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"}, - {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"}, - {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"}, - {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"}, - {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"}, - {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"}, - {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"}, - {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"}, - {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"}, - {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"}, - {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"}, - {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"}, - {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"}, - {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"}, - {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"}, - {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"}, - {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"}, - {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"}, - {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"}, - {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"}, - {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"}, - {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"}, - {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"}, - {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"}, + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, + {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, + {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, + {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, + {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, + {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, + {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, + {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, + {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, + {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, + {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, + {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, + {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, + {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, ] [package.dependencies] @@ -4135,22 +4298,22 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyproject-api" -version = "1.6.1" +version = "1.7.1" description = "API to interact with the python pyproject.toml based projects" optional = false python-versions = ">=3.8" files = [ - {file = "pyproject_api-1.6.1-py3-none-any.whl", hash = "sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675"}, - {file = "pyproject_api-1.6.1.tar.gz", hash = "sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538"}, + {file = "pyproject_api-1.7.1-py3-none-any.whl", hash = "sha256:2dc1654062c2b27733d8fd4cdda672b22fe8741ef1dde8e3a998a9547b071eeb"}, + {file = "pyproject_api-1.7.1.tar.gz", hash = "sha256:7ebc6cd10710f89f4cf2a2731710a98abce37ebff19427116ff2174c9236a827"}, ] [package.dependencies] -packaging = ">=23.1" +packaging = ">=24.1" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [package.extras] -docs = ["furo (>=2023.8.19)", "sphinx (<7.2)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "setuptools (>=68.1.2)", "wheel (>=0.41.2)"] +docs = ["furo (>=2024.5.6)", "sphinx-autodoc-typehints (>=2.2.1)"] +testing = ["covdefaults (>=2.3)", "pytest (>=8.2.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "setuptools (>=70.1)"] [[package]] name = "pyreadline3" @@ -4306,13 +4469,13 @@ files = [ [[package]] name = "python-ulid" -version = "2.6.0" +version = "2.7.0" description = "Universally unique lexicographically sortable identifier" optional = false python-versions = ">=3.9" files = [ - {file = "python_ulid-2.6.0-py3-none-any.whl", hash = "sha256:b47cc7a427b82f7526af96385d7702685df808e9b4922523dd5988a3ba98a89d"}, - {file = "python_ulid-2.6.0.tar.gz", hash = "sha256:904e19093dd6578a5ce01a8274e3e228d556d47be3bda328da2d3601c5240c4f"}, + {file = "python_ulid-2.7.0-py3-none-any.whl", hash = "sha256:c81658e382f69bad8c6d365155c4ae21843ae4226b94f72c12d7adcbb545a251"}, + {file = "python_ulid-2.7.0.tar.gz", hash = "sha256:18eb595885140851a490a95b0da4447911ff69fa9f434732067b97f6956f9fe9"}, ] [package.extras] @@ -4383,159 +4546,182 @@ files = [ [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] name = "pyzmq" -version = "26.0.3" +version = "26.2.0" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.7" files = [ - {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:44dd6fc3034f1eaa72ece33588867df9e006a7303725a12d64c3dff92330f625"}, - {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acb704195a71ac5ea5ecf2811c9ee19ecdc62b91878528302dd0be1b9451cc90"}, - {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbb9c997932473a27afa93954bb77a9f9b786b4ccf718d903f35da3232317de"}, - {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bcb34f869d431799c3ee7d516554797f7760cb2198ecaa89c3f176f72d062be"}, - {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ece17ec5f20d7d9b442e5174ae9f020365d01ba7c112205a4d59cf19dc38ee"}, - {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ba6e5e6588e49139a0979d03a7deb9c734bde647b9a8808f26acf9c547cab1bf"}, - {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3bf8b000a4e2967e6dfdd8656cd0757d18c7e5ce3d16339e550bd462f4857e59"}, - {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2136f64fbb86451dbbf70223635a468272dd20075f988a102bf8a3f194a411dc"}, - {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e8918973fbd34e7814f59143c5f600ecd38b8038161239fd1a3d33d5817a38b8"}, - {file = "pyzmq-26.0.3-cp310-cp310-win32.whl", hash = "sha256:0aaf982e68a7ac284377d051c742610220fd06d330dcd4c4dbb4cdd77c22a537"}, - {file = "pyzmq-26.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:f1a9b7d00fdf60b4039f4455afd031fe85ee8305b019334b72dcf73c567edc47"}, - {file = "pyzmq-26.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:80b12f25d805a919d53efc0a5ad7c0c0326f13b4eae981a5d7b7cc343318ebb7"}, - {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:a72a84570f84c374b4c287183debc776dc319d3e8ce6b6a0041ce2e400de3f32"}, - {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ca684ee649b55fd8f378127ac8462fb6c85f251c2fb027eb3c887e8ee347bcd"}, - {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e222562dc0f38571c8b1ffdae9d7adb866363134299264a1958d077800b193b7"}, - {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f17cde1db0754c35a91ac00b22b25c11da6eec5746431d6e5092f0cd31a3fea9"}, - {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7c0c0b3244bb2275abe255d4a30c050d541c6cb18b870975553f1fb6f37527"}, - {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac97a21de3712afe6a6c071abfad40a6224fd14fa6ff0ff8d0c6e6cd4e2f807a"}, - {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:88b88282e55fa39dd556d7fc04160bcf39dea015f78e0cecec8ff4f06c1fc2b5"}, - {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:72b67f966b57dbd18dcc7efbc1c7fc9f5f983e572db1877081f075004614fcdd"}, - {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4b6cecbbf3b7380f3b61de3a7b93cb721125dc125c854c14ddc91225ba52f83"}, - {file = "pyzmq-26.0.3-cp311-cp311-win32.whl", hash = "sha256:eed56b6a39216d31ff8cd2f1d048b5bf1700e4b32a01b14379c3b6dde9ce3aa3"}, - {file = "pyzmq-26.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:3191d312c73e3cfd0f0afdf51df8405aafeb0bad71e7ed8f68b24b63c4f36500"}, - {file = "pyzmq-26.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:b6907da3017ef55139cf0e417c5123a84c7332520e73a6902ff1f79046cd3b94"}, - {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:068ca17214038ae986d68f4a7021f97e187ed278ab6dccb79f837d765a54d753"}, - {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7821d44fe07335bea256b9f1f41474a642ca55fa671dfd9f00af8d68a920c2d4"}, - {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeb438a26d87c123bb318e5f2b3d86a36060b01f22fbdffd8cf247d52f7c9a2b"}, - {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69ea9d6d9baa25a4dc9cef5e2b77b8537827b122214f210dd925132e34ae9b12"}, - {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7daa3e1369355766dea11f1d8ef829905c3b9da886ea3152788dc25ee6079e02"}, - {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6ca7a9a06b52d0e38ccf6bca1aeff7be178917893f3883f37b75589d42c4ac20"}, - {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1b7d0e124948daa4d9686d421ef5087c0516bc6179fdcf8828b8444f8e461a77"}, - {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e746524418b70f38550f2190eeee834db8850088c834d4c8406fbb9bc1ae10b2"}, - {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6b3146f9ae6af82c47a5282ac8803523d381b3b21caeae0327ed2f7ecb718798"}, - {file = "pyzmq-26.0.3-cp312-cp312-win32.whl", hash = "sha256:2b291d1230845871c00c8462c50565a9cd6026fe1228e77ca934470bb7d70ea0"}, - {file = "pyzmq-26.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:926838a535c2c1ea21c903f909a9a54e675c2126728c21381a94ddf37c3cbddf"}, - {file = "pyzmq-26.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:5bf6c237f8c681dfb91b17f8435b2735951f0d1fad10cc5dfd96db110243370b"}, - {file = "pyzmq-26.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c0991f5a96a8e620f7691e61178cd8f457b49e17b7d9cfa2067e2a0a89fc1d5"}, - {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dbf012d8fcb9f2cf0643b65df3b355fdd74fc0035d70bb5c845e9e30a3a4654b"}, - {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:01fbfbeb8249a68d257f601deb50c70c929dc2dfe683b754659569e502fbd3aa"}, - {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c8eb19abe87029c18f226d42b8a2c9efdd139d08f8bf6e085dd9075446db450"}, - {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5344b896e79800af86ad643408ca9aa303a017f6ebff8cee5a3163c1e9aec987"}, - {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:204e0f176fd1d067671157d049466869b3ae1fc51e354708b0dc41cf94e23a3a"}, - {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a42db008d58530efa3b881eeee4991146de0b790e095f7ae43ba5cc612decbc5"}, - {file = "pyzmq-26.0.3-cp37-cp37m-win32.whl", hash = "sha256:8d7a498671ca87e32b54cb47c82a92b40130a26c5197d392720a1bce1b3c77cf"}, - {file = "pyzmq-26.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:3b4032a96410bdc760061b14ed6a33613ffb7f702181ba999df5d16fb96ba16a"}, - {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2cc4e280098c1b192c42a849de8de2c8e0f3a84086a76ec5b07bfee29bda7d18"}, - {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bde86a2ed3ce587fa2b207424ce15b9a83a9fa14422dcc1c5356a13aed3df9d"}, - {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34106f68e20e6ff253c9f596ea50397dbd8699828d55e8fa18bd4323d8d966e6"}, - {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ebbbd0e728af5db9b04e56389e2299a57ea8b9dd15c9759153ee2455b32be6ad"}, - {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b1d1c631e5940cac5a0b22c5379c86e8df6a4ec277c7a856b714021ab6cfad"}, - {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e891ce81edd463b3b4c3b885c5603c00141151dd9c6936d98a680c8c72fe5c67"}, - {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9b273ecfbc590a1b98f014ae41e5cf723932f3b53ba9367cfb676f838038b32c"}, - {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b32bff85fb02a75ea0b68f21e2412255b5731f3f389ed9aecc13a6752f58ac97"}, - {file = "pyzmq-26.0.3-cp38-cp38-win32.whl", hash = "sha256:f6c21c00478a7bea93caaaef9e7629145d4153b15a8653e8bb4609d4bc70dbfc"}, - {file = "pyzmq-26.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:3401613148d93ef0fd9aabdbddb212de3db7a4475367f49f590c837355343972"}, - {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2ed8357f4c6e0daa4f3baf31832df8a33334e0fe5b020a61bc8b345a3db7a606"}, - {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1c8f2a2ca45292084c75bb6d3a25545cff0ed931ed228d3a1810ae3758f975f"}, - {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b63731993cdddcc8e087c64e9cf003f909262b359110070183d7f3025d1c56b5"}, - {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3cd31f859b662ac5d7f4226ec7d8bd60384fa037fc02aee6ff0b53ba29a3ba8"}, - {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115f8359402fa527cf47708d6f8a0f8234f0e9ca0cab7c18c9c189c194dbf620"}, - {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:715bdf952b9533ba13dfcf1f431a8f49e63cecc31d91d007bc1deb914f47d0e4"}, - {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e1258c639e00bf5e8a522fec6c3eaa3e30cf1c23a2f21a586be7e04d50c9acab"}, - {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15c59e780be8f30a60816a9adab900c12a58d79c1ac742b4a8df044ab2a6d920"}, - {file = "pyzmq-26.0.3-cp39-cp39-win32.whl", hash = "sha256:d0cdde3c78d8ab5b46595054e5def32a755fc028685add5ddc7403e9f6de9879"}, - {file = "pyzmq-26.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:ce828058d482ef860746bf532822842e0ff484e27f540ef5c813d516dd8896d2"}, - {file = "pyzmq-26.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:788f15721c64109cf720791714dc14afd0f449d63f3a5487724f024345067381"}, - {file = "pyzmq-26.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c18645ef6294d99b256806e34653e86236eb266278c8ec8112622b61db255de"}, - {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e6bc96ebe49604df3ec2c6389cc3876cabe475e6bfc84ced1bf4e630662cb35"}, - {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:971e8990c5cc4ddcff26e149398fc7b0f6a042306e82500f5e8db3b10ce69f84"}, - {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8416c23161abd94cc7da80c734ad7c9f5dbebdadfdaa77dad78244457448223"}, - {file = "pyzmq-26.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:082a2988364b60bb5de809373098361cf1dbb239623e39e46cb18bc035ed9c0c"}, - {file = "pyzmq-26.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d57dfbf9737763b3a60d26e6800e02e04284926329aee8fb01049635e957fe81"}, - {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:77a85dca4c2430ac04dc2a2185c2deb3858a34fe7f403d0a946fa56970cf60a1"}, - {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c82a6d952a1d555bf4be42b6532927d2a5686dd3c3e280e5f63225ab47ac1f5"}, - {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4496b1282c70c442809fc1b151977c3d967bfb33e4e17cedbf226d97de18f709"}, - {file = "pyzmq-26.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e4946d6bdb7ba972dfda282f9127e5756d4f299028b1566d1245fa0d438847e6"}, - {file = "pyzmq-26.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03c0ae165e700364b266876d712acb1ac02693acd920afa67da2ebb91a0b3c09"}, - {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3e3070e680f79887d60feeda051a58d0ac36622e1759f305a41059eff62c6da7"}, - {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6ca08b840fe95d1c2bd9ab92dac5685f949fc6f9ae820ec16193e5ddf603c3b2"}, - {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e76654e9dbfb835b3518f9938e565c7806976c07b37c33526b574cc1a1050480"}, - {file = "pyzmq-26.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:871587bdadd1075b112e697173e946a07d722459d20716ceb3d1bd6c64bd08ce"}, - {file = "pyzmq-26.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d0a2d1bd63a4ad79483049b26514e70fa618ce6115220da9efdff63688808b17"}, - {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0270b49b6847f0d106d64b5086e9ad5dc8a902413b5dbbb15d12b60f9c1747a4"}, - {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:703c60b9910488d3d0954ca585c34f541e506a091a41930e663a098d3b794c67"}, - {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74423631b6be371edfbf7eabb02ab995c2563fee60a80a30829176842e71722a"}, - {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4adfbb5451196842a88fda3612e2c0414134874bffb1c2ce83ab4242ec9e027d"}, - {file = "pyzmq-26.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3516119f4f9b8671083a70b6afaa0a070f5683e431ab3dc26e9215620d7ca1ad"}, - {file = "pyzmq-26.0.3.tar.gz", hash = "sha256:dba7d9f2e047dfa2bca3b01f4f84aa5246725203d6284e3790f2ca15fba6b40a"}, + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea"}, + {file = "pyzmq-26.2.0-cp310-cp310-win32.whl", hash = "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa"}, + {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218"}, + {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6"}, + {file = "pyzmq-26.2.0-cp311-cp311-win32.whl", hash = "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4"}, + {file = "pyzmq-26.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5"}, + {file = "pyzmq-26.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003"}, + {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9"}, + {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b"}, + {file = "pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7"}, + {file = "pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a"}, + {file = "pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b"}, + {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726"}, + {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e"}, + {file = "pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5"}, + {file = "pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad"}, + {file = "pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797"}, + {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a"}, + {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0"}, + {file = "pyzmq-26.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b55a4229ce5da9497dd0452b914556ae58e96a4381bb6f59f1305dfd7e53fc8"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9cb3a6460cdea8fe8194a76de8895707e61ded10ad0be97188cc8463ffa7e3a8"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ab5cad923cc95c87bffee098a27856c859bd5d0af31bd346035aa816b081fe1"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ed69074a610fad1c2fda66180e7b2edd4d31c53f2d1872bc2d1211563904cd9"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cccba051221b916a4f5e538997c45d7d136a5646442b1231b916d0164067ea27"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0eaa83fc4c1e271c24eaf8fb083cbccef8fde77ec8cd45f3c35a9a123e6da097"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9edda2df81daa129b25a39b86cb57dfdfe16f7ec15b42b19bfac503360d27a93"}, + {file = "pyzmq-26.2.0-cp37-cp37m-win32.whl", hash = "sha256:ea0eb6af8a17fa272f7b98d7bebfab7836a0d62738e16ba380f440fceca2d951"}, + {file = "pyzmq-26.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4ff9dc6bc1664bb9eec25cd17506ef6672d506115095411e237d571e92a58231"}, + {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2eb7735ee73ca1b0d71e0e67c3739c689067f055c764f73aac4cc8ecf958ee3f"}, + {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a534f43bc738181aa7cbbaf48e3eca62c76453a40a746ab95d4b27b1111a7d2"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aedd5dd8692635813368e558a05266b995d3d020b23e49581ddd5bbe197a8ab6"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8be4700cd8bb02cc454f630dcdf7cfa99de96788b80c51b60fe2fe1dac480289"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcc03fa4997c447dce58264e93b5aa2d57714fbe0f06c07b7785ae131512732"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:402b190912935d3db15b03e8f7485812db350d271b284ded2b80d2e5704be780"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8685fa9c25ff00f550c1fec650430c4b71e4e48e8d852f7ddcf2e48308038640"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:76589c020680778f06b7e0b193f4b6dd66d470234a16e1df90329f5e14a171cd"}, + {file = "pyzmq-26.2.0-cp38-cp38-win32.whl", hash = "sha256:8423c1877d72c041f2c263b1ec6e34360448decfb323fa8b94e85883043ef988"}, + {file = "pyzmq-26.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:76589f2cd6b77b5bdea4fca5992dc1c23389d68b18ccc26a53680ba2dc80ff2f"}, + {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2"}, + {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940"}, + {file = "pyzmq-26.2.0-cp39-cp39-win32.whl", hash = "sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44"}, + {file = "pyzmq-26.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec"}, + {file = "pyzmq-26.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2ea4ad4e6a12e454de05f2949d4beddb52460f3de7c8b9d5c46fbb7d7222e02c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fc4f7a173a5609631bb0c42c23d12c49df3966f89f496a51d3eb0ec81f4519d6"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:878206a45202247781472a2d99df12a176fef806ca175799e1c6ad263510d57c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17c412bad2eb9468e876f556eb4ee910e62d721d2c7a53c7fa31e643d35352e6"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0d987a3ae5a71c6226b203cfd298720e0086c7fe7c74f35fa8edddfbd6597eed"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:39887ac397ff35b7b775db7201095fc6310a35fdbae85bac4523f7eb3b840e20"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fdb5b3e311d4d4b0eb8b3e8b4d1b0a512713ad7e6a68791d0923d1aec433d919"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:226af7dcb51fdb0109f0016449b357e182ea0ceb6b47dfb5999d569e5db161d5"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bed0e799e6120b9c32756203fb9dfe8ca2fb8467fed830c34c877e25638c3fc"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:29c7947c594e105cb9e6c466bace8532dc1ca02d498684128b339799f5248277"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f"}, + {file = "pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f"}, ] [package.dependencies] @@ -4660,90 +4846,90 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2024.5.15" +version = "2024.7.24" description = "Alternative regular expression module, to replace re." optional = true python-versions = ">=3.8" files = [ - {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, - {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, - {file = "regex-2024.5.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53"}, - {file = "regex-2024.5.15-cp310-cp310-win32.whl", hash = "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3"}, - {file = "regex-2024.5.15-cp310-cp310-win_amd64.whl", hash = "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68"}, - {file = "regex-2024.5.15-cp311-cp311-win32.whl", hash = "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa"}, - {file = "regex-2024.5.15-cp311-cp311-win_amd64.whl", hash = "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80"}, - {file = "regex-2024.5.15-cp312-cp312-win32.whl", hash = "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe"}, - {file = "regex-2024.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741"}, - {file = "regex-2024.5.15-cp38-cp38-win32.whl", hash = "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9"}, - {file = "regex-2024.5.15-cp38-cp38-win_amd64.whl", hash = "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456"}, - {file = "regex-2024.5.15-cp39-cp39-win32.whl", hash = "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694"}, - {file = "regex-2024.5.15-cp39-cp39-win_amd64.whl", hash = "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388"}, - {file = "regex-2024.5.15.tar.gz", hash = "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa"}, + {file = "regex-2024.7.24-cp310-cp310-win32.whl", hash = "sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66"}, + {file = "regex-2024.7.24-cp310-cp310-win_amd64.whl", hash = "sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e"}, + {file = "regex-2024.7.24-cp311-cp311-win32.whl", hash = "sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c"}, + {file = "regex-2024.7.24-cp311-cp311-win_amd64.whl", hash = "sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38"}, + {file = "regex-2024.7.24-cp312-cp312-win32.whl", hash = "sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc"}, + {file = "regex-2024.7.24-cp312-cp312-win_amd64.whl", hash = "sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8"}, + {file = "regex-2024.7.24-cp38-cp38-win32.whl", hash = "sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96"}, + {file = "regex-2024.7.24-cp38-cp38-win_amd64.whl", hash = "sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9"}, + {file = "regex-2024.7.24-cp39-cp39-win32.whl", hash = "sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1"}, + {file = "regex-2024.7.24-cp39-cp39-win_amd64.whl", hash = "sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9"}, + {file = "regex-2024.7.24.tar.gz", hash = "sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506"}, ] [[package]] @@ -4769,13 +4955,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requests-cache" -version = "1.2.0" +version = "1.2.1" description = "A persistent cache for python requests" optional = false python-versions = ">=3.8" files = [ - {file = "requests_cache-1.2.0-py3-none-any.whl", hash = "sha256:490324301bf0cb924ff4e6324bd2613453e7e1f847353928b08adb0fdfb7f722"}, - {file = "requests_cache-1.2.0.tar.gz", hash = "sha256:db1c709ca343cc1cd5b6c8b1a5387298eceed02306a6040760db538c885e3838"}, + {file = "requests_cache-1.2.1-py3-none-any.whl", hash = "sha256:1285151cddf5331067baa82598afe2d47c7495a1334bfe7a7d329b43e9fd3603"}, + {file = "requests_cache-1.2.1.tar.gz", hash = "sha256:68abc986fdc5b8d0911318fbb5f7c80eebcd4d01bfacc6685ecf8876052511d1"}, ] [package.dependencies] @@ -4849,110 +5035,114 @@ files = [ [[package]] name = "rpds-py" -version = "0.18.1" +version = "0.20.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"}, - {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"}, - {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"}, - {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"}, - {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"}, - {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"}, - {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"}, - {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"}, - {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"}, - {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"}, - {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"}, - {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"}, - {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"}, - {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"}, - {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"}, - {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"}, - {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"}, - {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"}, - {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"}, - {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"}, - {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"}, - {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"}, - {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"}, - {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"}, - {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"}, - {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"}, - {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"}, - {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"}, - {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"}, - {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"}, - {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"}, - {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"}, - {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"}, - {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"}, - {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"}, - {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"}, + {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, + {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, + {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, + {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, + {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, + {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, + {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, + {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, + {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, + {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, + {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, + {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, + {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, + {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, + {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, ] [[package]] @@ -5034,13 +5224,13 @@ files = [ [[package]] name = "s3transfer" -version = "0.10.1" +version = "0.10.2" description = "An Amazon S3 Transfer Manager" optional = true -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "s3transfer-0.10.1-py3-none-any.whl", hash = "sha256:ceb252b11bcf87080fb7850a224fb6e05c8a776bab8f2b64b7f25b969464839d"}, - {file = "s3transfer-0.10.1.tar.gz", hash = "sha256:5683916b4c724f799e600f41dd9e10a9ff19871bf87623cc8f491cb4f5fa0a19"}, + {file = "s3transfer-0.10.2-py3-none-any.whl", hash = "sha256:eca1c20de70a39daee580aef4986996620f365c4e0fda6a86100231d62f1bf69"}, + {file = "s3transfer-0.10.2.tar.gz", hash = "sha256:0711534e9356d3cc692fdde846b4a1e4b0cb6519971860796e6bc4c7aea00ef6"}, ] [package.dependencies] @@ -5051,48 +5241,45 @@ crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] [[package]] name = "scikit-learn" -version = "1.5.0" +version = "1.4.2" description = "A set of python modules for machine learning and data mining" optional = true python-versions = ">=3.9" files = [ - {file = "scikit_learn-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12e40ac48555e6b551f0a0a5743cc94cc5a765c9513fe708e01f0aa001da2801"}, - {file = "scikit_learn-1.5.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f405c4dae288f5f6553b10c4ac9ea7754d5180ec11e296464adb5d6ac68b6ef5"}, - {file = "scikit_learn-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df8ccabbf583315f13160a4bb06037bde99ea7d8211a69787a6b7c5d4ebb6fc3"}, - {file = "scikit_learn-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c75ea812cd83b1385bbfa94ae971f0d80adb338a9523f6bbcb5e0b0381151d4"}, - {file = "scikit_learn-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:a90c5da84829a0b9b4bf00daf62754b2be741e66b5946911f5bdfaa869fcedd6"}, - {file = "scikit_learn-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a65af2d8a6cce4e163a7951a4cfbfa7fceb2d5c013a4b593686c7f16445cf9d"}, - {file = "scikit_learn-1.5.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:4c0c56c3005f2ec1db3787aeaabefa96256580678cec783986836fc64f8ff622"}, - {file = "scikit_learn-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f77547165c00625551e5c250cefa3f03f2fc92c5e18668abd90bfc4be2e0bff"}, - {file = "scikit_learn-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:118a8d229a41158c9f90093e46b3737120a165181a1b58c03461447aa4657415"}, - {file = "scikit_learn-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:a03b09f9f7f09ffe8c5efffe2e9de1196c696d811be6798ad5eddf323c6f4d40"}, - {file = "scikit_learn-1.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:460806030c666addee1f074788b3978329a5bfdc9b7d63e7aad3f6d45c67a210"}, - {file = "scikit_learn-1.5.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:1b94d6440603752b27842eda97f6395f570941857456c606eb1d638efdb38184"}, - {file = "scikit_learn-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d82c2e573f0f2f2f0be897e7a31fcf4e73869247738ab8c3ce7245549af58ab8"}, - {file = "scikit_learn-1.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3a10e1d9e834e84d05e468ec501a356226338778769317ee0b84043c0d8fb06"}, - {file = "scikit_learn-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:855fc5fa8ed9e4f08291203af3d3e5fbdc4737bd617a371559aaa2088166046e"}, - {file = "scikit_learn-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:40fb7d4a9a2db07e6e0cae4dc7bdbb8fada17043bac24104d8165e10e4cff1a2"}, - {file = "scikit_learn-1.5.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:47132440050b1c5beb95f8ba0b2402bbd9057ce96ec0ba86f2f445dd4f34df67"}, - {file = "scikit_learn-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174beb56e3e881c90424e21f576fa69c4ffcf5174632a79ab4461c4c960315ac"}, - {file = "scikit_learn-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261fe334ca48f09ed64b8fae13f9b46cc43ac5f580c4a605cbb0a517456c8f71"}, - {file = "scikit_learn-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:057b991ac64b3e75c9c04b5f9395eaf19a6179244c089afdebaad98264bff37c"}, - {file = "scikit_learn-1.5.0.tar.gz", hash = "sha256:789e3db01c750ed6d496fa2db7d50637857b451e57bcae863bff707c1247bef7"}, + {file = "scikit-learn-1.4.2.tar.gz", hash = "sha256:daa1c471d95bad080c6e44b4946c9390a4842adc3082572c20e4f8884e39e959"}, + {file = "scikit_learn-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8539a41b3d6d1af82eb629f9c57f37428ff1481c1e34dddb3b9d7af8ede67ac5"}, + {file = "scikit_learn-1.4.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:68b8404841f944a4a1459b07198fa2edd41a82f189b44f3e1d55c104dbc2e40c"}, + {file = "scikit_learn-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81bf5d8bbe87643103334032dd82f7419bc8c8d02a763643a6b9a5c7288c5054"}, + {file = "scikit_learn-1.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36f0ea5d0f693cb247a073d21a4123bdf4172e470e6d163c12b74cbb1536cf38"}, + {file = "scikit_learn-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:87440e2e188c87db80ea4023440923dccbd56fbc2d557b18ced00fef79da0727"}, + {file = "scikit_learn-1.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:45dee87ac5309bb82e3ea633955030df9bbcb8d2cdb30383c6cd483691c546cc"}, + {file = "scikit_learn-1.4.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1d0b25d9c651fd050555aadd57431b53d4cf664e749069da77f3d52c5ad14b3b"}, + {file = "scikit_learn-1.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0203c368058ab92efc6168a1507d388d41469c873e96ec220ca8e74079bf62e"}, + {file = "scikit_learn-1.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44c62f2b124848a28fd695db5bc4da019287abf390bfce602ddc8aa1ec186aae"}, + {file = "scikit_learn-1.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:5cd7b524115499b18b63f0c96f4224eb885564937a0b3477531b2b63ce331904"}, + {file = "scikit_learn-1.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:90378e1747949f90c8f385898fff35d73193dfcaec3dd75d6b542f90c4e89755"}, + {file = "scikit_learn-1.4.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ff4effe5a1d4e8fed260a83a163f7dbf4f6087b54528d8880bab1d1377bd78be"}, + {file = "scikit_learn-1.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:671e2f0c3f2c15409dae4f282a3a619601fa824d2c820e5b608d9d775f91780c"}, + {file = "scikit_learn-1.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d36d0bc983336bbc1be22f9b686b50c964f593c8a9a913a792442af9bf4f5e68"}, + {file = "scikit_learn-1.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:d762070980c17ba3e9a4a1e043ba0518ce4c55152032f1af0ca6f39b376b5928"}, + {file = "scikit_learn-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9993d5e78a8148b1d0fdf5b15ed92452af5581734129998c26f481c46586d68"}, + {file = "scikit_learn-1.4.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:426d258fddac674fdf33f3cb2d54d26f49406e2599dbf9a32b4d1696091d4256"}, + {file = "scikit_learn-1.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5460a1a5b043ae5ae4596b3126a4ec33ccba1b51e7ca2c5d36dac2169f62ab1d"}, + {file = "scikit_learn-1.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49d64ef6cb8c093d883e5a36c4766548d974898d378e395ba41a806d0e824db8"}, + {file = "scikit_learn-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:c97a50b05c194be9146d61fe87dbf8eac62b203d9e87a3ccc6ae9aed2dfaf361"}, ] [package.dependencies] joblib = ">=1.2.0" numpy = ">=1.19.5" scipy = ">=1.6.0" -threadpoolctl = ">=3.1.0" +threadpoolctl = ">=2.0.0" [package.extras] -benchmark = ["matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "pandas (>=1.1.5)"] -build = ["cython (>=3.0.10)", "meson-python (>=0.15.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.23)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.15.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +benchmark = ["matplotlib (>=3.3.4)", "memory-profiler (>=0.57.0)", "pandas (>=1.1.5)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.15.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"] -install = ["joblib (>=1.2.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)", "threadpoolctl (>=3.1.0)"] -maintenance = ["conda-lock (==2.5.6)"] -tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.20.23)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.2.1)", "scikit-image (>=0.17.2)"] +tests = ["black (>=23.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.19.12)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.17.2)"] [[package]] name = "scipy" @@ -5235,18 +5422,19 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "70.0.0" +version = "73.0.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, - {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, + {file = "setuptools-73.0.1-py3-none-any.whl", hash = "sha256:b208925fcb9f7af924ed2dc04708ea89791e24bde0d3020b27df0e116088b34e"}, + {file = "setuptools-73.0.1.tar.gz", hash = "sha256:d59a3e788ab7e012ab2c4baed1b376da6366883ee20d7a5fc426816e3d7b1193"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.11.*)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (<0.4)", "pytest-ruff (>=0.2.1)", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] [[package]] name = "shexjsg" @@ -5308,13 +5496,13 @@ files = [ [[package]] name = "soupsieve" -version = "2.5" +version = "2.6" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" files = [ - {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, - {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, + {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, + {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, ] [[package]] @@ -5444,49 +5632,49 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.8" +version = "2.0.0" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_applehelp-1.0.8-py3-none-any.whl", hash = "sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"}, - {file = "sphinxcontrib_applehelp-1.0.8.tar.gz", hash = "sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"}, + {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, + {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.6" +version = "2.0.0" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_devhelp-1.0.6-py3-none-any.whl", hash = "sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f"}, - {file = "sphinxcontrib_devhelp-1.0.6.tar.gz", hash = "sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"}, + {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, + {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.5" +version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_htmlhelp-2.0.5-py3-none-any.whl", hash = "sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04"}, - {file = "sphinxcontrib_htmlhelp-2.0.5.tar.gz", hash = "sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015"}, + {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, + {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] @@ -5531,96 +5719,96 @@ files = [ [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.7" +version = "2.0.0" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_qthelp-1.0.7-py3-none-any.whl", hash = "sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"}, - {file = "sphinxcontrib_qthelp-1.0.7.tar.gz", hash = "sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"}, + {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, + {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] -test = ["pytest"] +test = ["defusedxml (>=0.7.1)", "pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.10" +version = "2.0.0" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_serializinghtml-1.1.10-py3-none-any.whl", hash = "sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7"}, - {file = "sphinxcontrib_serializinghtml-1.1.10.tar.gz", hash = "sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"}, + {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, + {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sqlalchemy" -version = "2.0.30" +version = "2.0.32" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b48154678e76445c7ded1896715ce05319f74b1e73cf82d4f8b59b46e9c0ddc"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2753743c2afd061bb95a61a51bbb6a1a11ac1c44292fad898f10c9839a7f75b2"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7bfc726d167f425d4c16269a9a10fe8630ff6d14b683d588044dcef2d0f6be7"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f61ada6979223013d9ab83a3ed003ded6959eae37d0d685db2c147e9143797"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a365eda439b7a00732638f11072907c1bc8e351c7665e7e5da91b169af794af"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bba002a9447b291548e8d66fd8c96a6a7ed4f2def0bb155f4f0a1309fd2735d5"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-win32.whl", hash = "sha256:0138c5c16be3600923fa2169532205d18891b28afa817cb49b50e08f62198bb8"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-win_amd64.whl", hash = "sha256:99650e9f4cf3ad0d409fed3eec4f071fadd032e9a5edc7270cd646a26446feeb"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:955991a09f0992c68a499791a753523f50f71a6885531568404fa0f231832aa0"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f69e4c756ee2686767eb80f94c0125c8b0a0b87ede03eacc5c8ae3b54b99dc46"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69c9db1ce00e59e8dd09d7bae852a9add716efdc070a3e2068377e6ff0d6fdaa"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1429a4b0f709f19ff3b0cf13675b2b9bfa8a7e79990003207a011c0db880a13"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:efedba7e13aa9a6c8407c48facfdfa108a5a4128e35f4c68f20c3407e4376aa9"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16863e2b132b761891d6c49f0a0f70030e0bcac4fd208117f6b7e053e68668d0"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-win32.whl", hash = "sha256:2ecabd9ccaa6e914e3dbb2aa46b76dede7eadc8cbf1b8083c94d936bcd5ffb49"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-win_amd64.whl", hash = "sha256:0b3f4c438e37d22b83e640f825ef0f37b95db9aa2d68203f2c9549375d0b2260"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5a79d65395ac5e6b0c2890935bad892eabb911c4aa8e8015067ddb37eea3d56c"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a5baf9267b752390252889f0c802ea13b52dfee5e369527da229189b8bd592e"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cb5a646930c5123f8461f6468901573f334c2c63c795b9af350063a736d0134"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:296230899df0b77dec4eb799bcea6fbe39a43707ce7bb166519c97b583cfcab3"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c62d401223f468eb4da32627bffc0c78ed516b03bb8a34a58be54d618b74d472"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3b69e934f0f2b677ec111b4d83f92dc1a3210a779f69bf905273192cf4ed433e"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-win32.whl", hash = "sha256:77d2edb1f54aff37e3318f611637171e8ec71472f1fdc7348b41dcb226f93d90"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-win_amd64.whl", hash = "sha256:b6c7ec2b1f4969fc19b65b7059ed00497e25f54069407a8701091beb69e591a5"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a8e3b0a7e09e94be7510d1661339d6b52daf202ed2f5b1f9f48ea34ee6f2d57"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b60203c63e8f984df92035610c5fb76d941254cf5d19751faab7d33b21e5ddc0"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1dc3eabd8c0232ee8387fbe03e0a62220a6f089e278b1f0aaf5e2d6210741ad"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:40ad017c672c00b9b663fcfcd5f0864a0a97828e2ee7ab0c140dc84058d194cf"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e42203d8d20dc704604862977b1470a122e4892791fe3ed165f041e4bf447a1b"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-win32.whl", hash = "sha256:2a4f4da89c74435f2bc61878cd08f3646b699e7d2eba97144030d1be44e27584"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-win_amd64.whl", hash = "sha256:b6bf767d14b77f6a18b6982cbbf29d71bede087edae495d11ab358280f304d8e"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc0c53579650a891f9b83fa3cecd4e00218e071d0ba00c4890f5be0c34887ed3"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:311710f9a2ee235f1403537b10c7687214bb1f2b9ebb52702c5aa4a77f0b3af7"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:408f8b0e2c04677e9c93f40eef3ab22f550fecb3011b187f66a096395ff3d9fd"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37a4b4fb0dd4d2669070fb05b8b8824afd0af57587393015baee1cf9890242d9"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a943d297126c9230719c27fcbbeab57ecd5d15b0bd6bfd26e91bfcfe64220621"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a089e218654e740a41388893e090d2e2c22c29028c9d1353feb38638820bbeb"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-win32.whl", hash = "sha256:fa561138a64f949f3e889eb9ab8c58e1504ab351d6cf55259dc4c248eaa19da6"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-win_amd64.whl", hash = "sha256:7d74336c65705b986d12a7e337ba27ab2b9d819993851b140efdf029248e818e"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae8c62fe2480dd61c532ccafdbce9b29dacc126fe8be0d9a927ca3e699b9491a"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2383146973a15435e4717f94c7509982770e3e54974c71f76500a0136f22810b"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8409de825f2c3b62ab15788635ccaec0c881c3f12a8af2b12ae4910a0a9aeef6"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0094c5dc698a5f78d3d1539853e8ecec02516b62b8223c970c86d44e7a80f6c7"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:edc16a50f5e1b7a06a2dcc1f2205b0b961074c123ed17ebda726f376a5ab0953"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f7703c2010355dd28f53deb644a05fc30f796bd8598b43f0ba678878780b6e4c"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-win32.whl", hash = "sha256:1f9a727312ff6ad5248a4367358e2cf7e625e98b1028b1d7ab7b806b7d757513"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-win_amd64.whl", hash = "sha256:a0ef36b28534f2a5771191be6edb44cc2673c7b2edf6deac6562400288664221"}, - {file = "SQLAlchemy-2.0.30-py3-none-any.whl", hash = "sha256:7108d569d3990c71e26a42f60474b4c02c8586c4681af5fd67e51a044fdea86a"}, - {file = "SQLAlchemy-2.0.30.tar.gz", hash = "sha256:2b1708916730f4830bc69d6f49d37f7698b5bd7530aca7f04f785f8849e95255"}, -] - -[package.dependencies] -greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} + {file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0c9045ecc2e4db59bfc97b20516dfdf8e41d910ac6fb667ebd3a79ea54084619"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1467940318e4a860afd546ef61fefb98a14d935cd6817ed07a228c7f7c62f389"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5954463675cb15db8d4b521f3566a017c8789222b8316b1e6934c811018ee08b"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:167e7497035c303ae50651b351c28dc22a40bb98fbdb8468cdc971821b1ae533"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b27dfb676ac02529fb6e343b3a482303f16e6bc3a4d868b73935b8792edb52d0"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bf2360a5e0f7bd75fa80431bf8ebcfb920c9f885e7956c7efde89031695cafb8"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-win32.whl", hash = "sha256:306fe44e754a91cd9d600a6b070c1f2fadbb4a1a257b8781ccf33c7067fd3e4d"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-win_amd64.whl", hash = "sha256:99db65e6f3ab42e06c318f15c98f59a436f1c78179e6a6f40f529c8cc7100b22"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21b053be28a8a414f2ddd401f1be8361e41032d2ef5884b2f31d31cb723e559f"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b178e875a7a25b5938b53b006598ee7645172fccafe1c291a706e93f48499ff5"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723a40ee2cc7ea653645bd4cf024326dea2076673fc9d3d33f20f6c81db83e1d"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:295ff8689544f7ee7e819529633d058bd458c1fd7f7e3eebd0f9268ebc56c2a0"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49496b68cd190a147118af585173ee624114dfb2e0297558c460ad7495f9dfe2"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:acd9b73c5c15f0ec5ce18128b1fe9157ddd0044abc373e6ecd5ba376a7e5d961"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-win32.whl", hash = "sha256:9365a3da32dabd3e69e06b972b1ffb0c89668994c7e8e75ce21d3e5e69ddef28"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-win_amd64.whl", hash = "sha256:8bd63d051f4f313b102a2af1cbc8b80f061bf78f3d5bd0843ff70b5859e27924"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bab3db192a0c35e3c9d1560eb8332463e29e5507dbd822e29a0a3c48c0a8d92"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:19d98f4f58b13900d8dec4ed09dd09ef292208ee44cc9c2fe01c1f0a2fe440e9"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd33c61513cb1b7371fd40cf221256456d26a56284e7d19d1f0b9f1eb7dd7e8"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6ba0497c1d066dd004e0f02a92426ca2df20fac08728d03f67f6960271feec"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2b6be53e4fde0065524f1a0a7929b10e9280987b320716c1509478b712a7688c"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:916a798f62f410c0b80b63683c8061f5ebe237b0f4ad778739304253353bc1cb"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-win32.whl", hash = "sha256:31983018b74908ebc6c996a16ad3690301a23befb643093fcfe85efd292e384d"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-win_amd64.whl", hash = "sha256:4363ed245a6231f2e2957cccdda3c776265a75851f4753c60f3004b90e69bfeb"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8afd5b26570bf41c35c0121801479958b4446751a3971fb9a480c1afd85558e"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c750987fc876813f27b60d619b987b057eb4896b81117f73bb8d9918c14f1cad"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada0102afff4890f651ed91120c1120065663506b760da4e7823913ebd3258be"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:78c03d0f8a5ab4f3034c0e8482cfcc415a3ec6193491cfa1c643ed707d476f16"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:3bd1cae7519283ff525e64645ebd7a3e0283f3c038f461ecc1c7b040a0c932a1"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-win32.whl", hash = "sha256:01438ebcdc566d58c93af0171c74ec28efe6a29184b773e378a385e6215389da"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-win_amd64.whl", hash = "sha256:4979dc80fbbc9d2ef569e71e0896990bc94df2b9fdbd878290bd129b65ab579c"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c742be912f57586ac43af38b3848f7688863a403dfb220193a882ea60e1ec3a"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:62e23d0ac103bcf1c5555b6c88c114089587bc64d048fef5bbdb58dfd26f96da"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:251f0d1108aab8ea7b9aadbd07fb47fb8e3a5838dde34aa95a3349876b5a1f1d"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef18a84e5116340e38eca3e7f9eeaaef62738891422e7c2a0b80feab165905f"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3eb6a97a1d39976f360b10ff208c73afb6a4de86dd2a6212ddf65c4a6a2347d5"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0c1c9b673d21477cec17ab10bc4decb1322843ba35b481585facd88203754fc5"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-win32.whl", hash = "sha256:c41a2b9ca80ee555decc605bd3c4520cc6fef9abde8fd66b1cf65126a6922d65"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-win_amd64.whl", hash = "sha256:8a37e4d265033c897892279e8adf505c8b6b4075f2b40d77afb31f7185cd6ecd"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:52fec964fba2ef46476312a03ec8c425956b05c20220a1a03703537824b5e8e1"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:328429aecaba2aee3d71e11f2477c14eec5990fb6d0e884107935f7fb6001632"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85a01b5599e790e76ac3fe3aa2f26e1feba56270023d6afd5550ed63c68552b3"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf04784797dcdf4c0aa952c8d234fa01974c4729db55c45732520ce12dd95b4"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4488120becf9b71b3ac718f4138269a6be99a42fe023ec457896ba4f80749525"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:14e09e083a5796d513918a66f3d6aedbc131e39e80875afe81d98a03312889e6"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-win32.whl", hash = "sha256:0d322cc9c9b2154ba7e82f7bf25ecc7c36fbe2d82e2933b3642fc095a52cfc78"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-win_amd64.whl", hash = "sha256:7dd8583df2f98dea28b5cd53a1beac963f4f9d087888d75f22fcc93a07cf8d84"}, + {file = "SQLAlchemy-2.0.32-py3-none-any.whl", hash = "sha256:e567a8793a692451f706b363ccf3c45e056b67d90ead58c3bc9471af5d212202"}, + {file = "SQLAlchemy-2.0.32.tar.gz", hash = "sha256:c1b88cc8b02b6a5f0efb0345a03672d4c897dc7d92585176f88c67346f565ea8"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "python_version < \"3.13\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} typing-extensions = ">=4.6.0" [package.extras] @@ -5709,13 +5897,13 @@ test = ["black", "mypy", "pytest", "ruff"] [[package]] name = "sqlite-utils" -version = "3.36" +version = "3.37" description = "CLI tool and Python library for manipulating SQLite databases" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "sqlite-utils-3.36.tar.gz", hash = "sha256:dcc311394fe86dc16f65037b0075e238efcfd2e12e65d53ed196954502996f3c"}, - {file = "sqlite_utils-3.36-py3-none-any.whl", hash = "sha256:b71e829755c2efbdcd6931a31968dee4e8bd71b3c14f0fe648b22377027c5bec"}, + {file = "sqlite_utils-3.37-py3-none-any.whl", hash = "sha256:4fb0dc9e61b1f9226a14eb1f072e984cf3cb69058dc2838887600a0771e9624f"}, + {file = "sqlite_utils-3.37.tar.gz", hash = "sha256:542a71033d4e7936fe909230ac9794d3e200021838ab63dbaf3ce8f5bc2273a4"}, ] [package.dependencies] @@ -5730,18 +5918,18 @@ tabulate = "*" docs = ["beanbag-docutils (>=2.0)", "codespell", "furo", "pygments-csv-lexer", "sphinx-autobuild", "sphinx-copybutton"] flake8 = ["flake8"] mypy = ["data-science-types", "mypy", "types-click", "types-pluggy", "types-python-dateutil", "types-tabulate"] -test = ["black", "cogapp", "hypothesis", "pytest"] +test = ["black (>=24.1.1)", "cogapp", "hypothesis", "pytest"] tui = ["trogon"] [[package]] name = "sssom" -version = "0.4.9" +version = "0.4.11" description = "Operations on SSSOM mapping tables" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "sssom-0.4.9-py3-none-any.whl", hash = "sha256:54af580957947175dfcc96e7ce2323ea3b476eb58b6e7a2e95d8c3e10c6393f4"}, - {file = "sssom-0.4.9.tar.gz", hash = "sha256:16674d58aa37ab82c1f6f69d317c0bdc6eedd59e8d809fcbc87f5f1e1eefdbf1"}, + {file = "sssom-0.4.11-py3-none-any.whl", hash = "sha256:4642f126a6ec8a4201bef77107a5ac76ed69b8f624014b5b77e56745969c0f76"}, + {file = "sssom-0.4.11.tar.gz", hash = "sha256:5043390657a396f9e5d064e5788990a52ec19c395c6380514abfe01b85a5eebc"}, ] [package.dependencies] @@ -5809,13 +5997,13 @@ widechars = ["wcwidth"] [[package]] name = "tenacity" -version = "8.3.0" +version = "9.0.0" description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" files = [ - {file = "tenacity-8.3.0-py3-none-any.whl", hash = "sha256:3649f6443dbc0d9b01b9d8020a9c4ec7a1ff5f6f3c6c8a036ef371f573fe9185"}, - {file = "tenacity-8.3.0.tar.gz", hash = "sha256:953d4e6ad24357bceffbc9707bc74349aca9d245f68eb65419cf0c249a1949a2"}, + {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, + {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, ] [package.extras] @@ -5905,40 +6093,40 @@ files = [ [[package]] name = "tox" -version = "4.15.1" +version = "4.18.0" description = "tox is a generic virtualenv management and test command line tool" optional = false python-versions = ">=3.8" files = [ - {file = "tox-4.15.1-py3-none-any.whl", hash = "sha256:f00a5dc4222b358e69694e47e3da0227ac41253509bca9f45aa8f012053e8d9d"}, - {file = "tox-4.15.1.tar.gz", hash = "sha256:53a092527d65e873e39213ebd4bd027a64623320b6b0326136384213f95b7076"}, + {file = "tox-4.18.0-py3-none-any.whl", hash = "sha256:0a457400cf70615dc0627eb70d293e80cd95d8ce174bb40ac011011f0c03a249"}, + {file = "tox-4.18.0.tar.gz", hash = "sha256:5dfa1cab9f146becd6e351333a82f9e0ade374451630ba65ee54584624c27b58"}, ] [package.dependencies] -cachetools = ">=5.3.2" +cachetools = ">=5.4" chardet = ">=5.2" colorama = ">=0.4.6" -filelock = ">=3.13.1" -packaging = ">=23.2" -platformdirs = ">=4.1" -pluggy = ">=1.3" -pyproject-api = ">=1.6.1" +filelock = ">=3.15.4" +packaging = ">=24.1" +platformdirs = ">=4.2.2" +pluggy = ">=1.5" +pyproject-api = ">=1.7.1" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} -virtualenv = ">=20.25" +virtualenv = ">=20.26.3" [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-argparse-cli (>=1.11.1)", "sphinx-autodoc-typehints (>=1.25.2)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.11)"] -testing = ["build[virtualenv] (>=1.0.3)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.2)", "devpi-process (>=1)", "diff-cover (>=8.0.2)", "distlib (>=0.3.8)", "flaky (>=3.7)", "hatch-vcs (>=0.4)", "hatchling (>=1.21)", "psutil (>=5.9.7)", "pytest (>=7.4.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-xdist (>=3.5)", "re-assert (>=1.1)", "time-machine (>=2.13)", "wheel (>=0.42)"] +docs = ["furo (>=2024.7.18)", "sphinx (>=7.4.7)", "sphinx-argparse-cli (>=1.16)", "sphinx-autodoc-typehints (>=2.2.3)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.11)"] +testing = ["build[virtualenv] (>=1.2.1)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.2)", "devpi-process (>=1)", "diff-cover (>=9.1.1)", "distlib (>=0.3.8)", "flaky (>=3.8.1)", "hatch-vcs (>=0.4)", "hatchling (>=1.25)", "psutil (>=6)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-xdist (>=3.6.1)", "re-assert (>=1.1)", "setuptools (>=70.3)", "time-machine (>=2.14.2)", "wheel (>=0.43)"] [[package]] name = "tqdm" -version = "4.66.4" +version = "4.66.5" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, - {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, + {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, + {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, ] [package.dependencies] @@ -5967,13 +6155,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "types-python-dateutil" -version = "2.9.0.20240316" +version = "2.9.0.20240821" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, - {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, + {file = "types-python-dateutil-2.9.0.20240821.tar.gz", hash = "sha256:9649d1dcb6fef1046fb18bebe9ea2aa0028b160918518c34589a46045f6ebd98"}, + {file = "types_python_dateutil-2.9.0.20240821-py3-none-any.whl", hash = "sha256:f5889fcb4e63ed4aaa379b44f93c32593d50b9a94c9a60a0c854d8cc3511cd57"}, ] [[package]] @@ -6039,13 +6227,13 @@ six = "*" [[package]] name = "urllib3" -version = "1.26.18" +version = "1.26.19" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, - {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, + {file = "urllib3-1.26.19-py2.py3-none-any.whl", hash = "sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3"}, + {file = "urllib3-1.26.19.tar.gz", hash = "sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429"}, ] [package.extras] @@ -6055,24 +6243,27 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "validators" -version = "0.28.3" +version = "0.33.0" description = "Python Data Validation for Humans™" optional = false python-versions = ">=3.8" files = [ - {file = "validators-0.28.3-py3-none-any.whl", hash = "sha256:53cafa854f13850156259d9cc479b864ee901f6a96e6b109e6fc33f98f37d99f"}, - {file = "validators-0.28.3.tar.gz", hash = "sha256:c6c79840bcde9ba77b19f6218f7738188115e27830cbaff43264bc4ed24c429d"}, + {file = "validators-0.33.0-py3-none-any.whl", hash = "sha256:134b586a98894f8139865953899fc2daeb3d0c35569552c5518f089ae43ed075"}, + {file = "validators-0.33.0.tar.gz", hash = "sha256:535867e9617f0100e676a1257ba1e206b9bfd847ddc171e4d44811f07ff0bfbf"}, ] +[package.extras] +crypto-eth-addresses = ["eth-hash[pycryptodome] (>=0.7.0)"] + [[package]] name = "virtualenv" -version = "20.26.2" +version = "20.26.3" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, - {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, + {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, + {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, ] [package.dependencies] @@ -6086,43 +6277,46 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "watchdog" -version = "4.0.1" +version = "4.0.2" description = "Filesystem events monitoring" optional = false python-versions = ">=3.8" files = [ - {file = "watchdog-4.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:da2dfdaa8006eb6a71051795856bedd97e5b03e57da96f98e375682c48850645"}, - {file = "watchdog-4.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e93f451f2dfa433d97765ca2634628b789b49ba8b504fdde5837cdcf25fdb53b"}, - {file = "watchdog-4.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ef0107bbb6a55f5be727cfc2ef945d5676b97bffb8425650dadbb184be9f9a2b"}, - {file = "watchdog-4.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:17e32f147d8bf9657e0922c0940bcde863b894cd871dbb694beb6704cfbd2fb5"}, - {file = "watchdog-4.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:03e70d2df2258fb6cb0e95bbdbe06c16e608af94a3ffbd2b90c3f1e83eb10767"}, - {file = "watchdog-4.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:123587af84260c991dc5f62a6e7ef3d1c57dfddc99faacee508c71d287248459"}, - {file = "watchdog-4.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:093b23e6906a8b97051191a4a0c73a77ecc958121d42346274c6af6520dec175"}, - {file = "watchdog-4.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:611be3904f9843f0529c35a3ff3fd617449463cb4b73b1633950b3d97fa4bfb7"}, - {file = "watchdog-4.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:62c613ad689ddcb11707f030e722fa929f322ef7e4f18f5335d2b73c61a85c28"}, - {file = "watchdog-4.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d4925e4bf7b9bddd1c3de13c9b8a2cdb89a468f640e66fbfabaf735bd85b3e35"}, - {file = "watchdog-4.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cad0bbd66cd59fc474b4a4376bc5ac3fc698723510cbb64091c2a793b18654db"}, - {file = "watchdog-4.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a3c2c317a8fb53e5b3d25790553796105501a235343f5d2bf23bb8649c2c8709"}, - {file = "watchdog-4.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c9904904b6564d4ee8a1ed820db76185a3c96e05560c776c79a6ce5ab71888ba"}, - {file = "watchdog-4.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:667f3c579e813fcbad1b784db7a1aaa96524bed53437e119f6a2f5de4db04235"}, - {file = "watchdog-4.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d10a681c9a1d5a77e75c48a3b8e1a9f2ae2928eda463e8d33660437705659682"}, - {file = "watchdog-4.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0144c0ea9997b92615af1d94afc0c217e07ce2c14912c7b1a5731776329fcfc7"}, - {file = "watchdog-4.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:998d2be6976a0ee3a81fb8e2777900c28641fb5bfbd0c84717d89bca0addcdc5"}, - {file = "watchdog-4.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e7921319fe4430b11278d924ef66d4daa469fafb1da679a2e48c935fa27af193"}, - {file = "watchdog-4.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:f0de0f284248ab40188f23380b03b59126d1479cd59940f2a34f8852db710625"}, - {file = "watchdog-4.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bca36be5707e81b9e6ce3208d92d95540d4ca244c006b61511753583c81c70dd"}, - {file = "watchdog-4.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab998f567ebdf6b1da7dc1e5accfaa7c6992244629c0fdaef062f43249bd8dee"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:dddba7ca1c807045323b6af4ff80f5ddc4d654c8bce8317dde1bd96b128ed253"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:4513ec234c68b14d4161440e07f995f231be21a09329051e67a2118a7a612d2d"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_i686.whl", hash = "sha256:4107ac5ab936a63952dea2a46a734a23230aa2f6f9db1291bf171dac3ebd53c6"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:6e8c70d2cd745daec2a08734d9f63092b793ad97612470a0ee4cbb8f5f705c57"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f27279d060e2ab24c0aa98363ff906d2386aa6c4dc2f1a374655d4e02a6c5e5e"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:f8affdf3c0f0466e69f5b3917cdd042f89c8c63aebdb9f7c078996f607cdb0f5"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ac7041b385f04c047fcc2951dc001671dee1b7e0615cde772e84b01fbf68ee84"}, - {file = "watchdog-4.0.1-py3-none-win32.whl", hash = "sha256:206afc3d964f9a233e6ad34618ec60b9837d0582b500b63687e34011e15bb429"}, - {file = "watchdog-4.0.1-py3-none-win_amd64.whl", hash = "sha256:7577b3c43e5909623149f76b099ac49a1a01ca4e167d1785c76eb52fa585745a"}, - {file = "watchdog-4.0.1-py3-none-win_ia64.whl", hash = "sha256:d7b9f5f3299e8dd230880b6c55504a1f69cf1e4316275d1b215ebdd8187ec88d"}, - {file = "watchdog-4.0.1.tar.gz", hash = "sha256:eebaacf674fa25511e8867028d281e602ee6500045b57f43b08778082f7f8b44"}, + {file = "watchdog-4.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ede7f010f2239b97cc79e6cb3c249e72962404ae3865860855d5cbe708b0fd22"}, + {file = "watchdog-4.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a2cffa171445b0efa0726c561eca9a27d00a1f2b83846dbd5a4f639c4f8ca8e1"}, + {file = "watchdog-4.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c50f148b31b03fbadd6d0b5980e38b558046b127dc483e5e4505fcef250f9503"}, + {file = "watchdog-4.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7c7d4bf585ad501c5f6c980e7be9c4f15604c7cc150e942d82083b31a7548930"}, + {file = "watchdog-4.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:914285126ad0b6eb2258bbbcb7b288d9dfd655ae88fa28945be05a7b475a800b"}, + {file = "watchdog-4.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:984306dc4720da5498b16fc037b36ac443816125a3705dfde4fd90652d8028ef"}, + {file = "watchdog-4.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1cdcfd8142f604630deef34722d695fb455d04ab7cfe9963055df1fc69e6727a"}, + {file = "watchdog-4.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d7ab624ff2f663f98cd03c8b7eedc09375a911794dfea6bf2a359fcc266bff29"}, + {file = "watchdog-4.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:132937547a716027bd5714383dfc40dc66c26769f1ce8a72a859d6a48f371f3a"}, + {file = "watchdog-4.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:cd67c7df93eb58f360c43802acc945fa8da70c675b6fa37a241e17ca698ca49b"}, + {file = "watchdog-4.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcfd02377be80ef3b6bc4ce481ef3959640458d6feaae0bd43dd90a43da90a7d"}, + {file = "watchdog-4.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:980b71510f59c884d684b3663d46e7a14b457c9611c481e5cef08f4dd022eed7"}, + {file = "watchdog-4.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:aa160781cafff2719b663c8a506156e9289d111d80f3387cf3af49cedee1f040"}, + {file = "watchdog-4.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f6ee8dedd255087bc7fe82adf046f0b75479b989185fb0bdf9a98b612170eac7"}, + {file = "watchdog-4.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0b4359067d30d5b864e09c8597b112fe0a0a59321a0f331498b013fb097406b4"}, + {file = "watchdog-4.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:770eef5372f146997638d737c9a3c597a3b41037cfbc5c41538fc27c09c3a3f9"}, + {file = "watchdog-4.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eeea812f38536a0aa859972d50c76e37f4456474b02bd93674d1947cf1e39578"}, + {file = "watchdog-4.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b2c45f6e1e57ebb4687690c05bc3a2c1fb6ab260550c4290b8abb1335e0fd08b"}, + {file = "watchdog-4.0.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:10b6683df70d340ac3279eff0b2766813f00f35a1d37515d2c99959ada8f05fa"}, + {file = "watchdog-4.0.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f7c739888c20f99824f7aa9d31ac8a97353e22d0c0e54703a547a218f6637eb3"}, + {file = "watchdog-4.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c100d09ac72a8a08ddbf0629ddfa0b8ee41740f9051429baa8e31bb903ad7508"}, + {file = "watchdog-4.0.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:f5315a8c8dd6dd9425b974515081fc0aadca1d1d61e078d2246509fd756141ee"}, + {file = "watchdog-4.0.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2d468028a77b42cc685ed694a7a550a8d1771bb05193ba7b24006b8241a571a1"}, + {file = "watchdog-4.0.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f15edcae3830ff20e55d1f4e743e92970c847bcddc8b7509bcd172aa04de506e"}, + {file = "watchdog-4.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:936acba76d636f70db8f3c66e76aa6cb5136a936fc2a5088b9ce1c7a3508fc83"}, + {file = "watchdog-4.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:e252f8ca942a870f38cf785aef420285431311652d871409a64e2a0a52a2174c"}, + {file = "watchdog-4.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:0e83619a2d5d436a7e58a1aea957a3c1ccbf9782c43c0b4fed80580e5e4acd1a"}, + {file = "watchdog-4.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:88456d65f207b39f1981bf772e473799fcdc10801062c36fd5ad9f9d1d463a73"}, + {file = "watchdog-4.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:32be97f3b75693a93c683787a87a0dc8db98bb84701539954eef991fb35f5fbc"}, + {file = "watchdog-4.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:c82253cfc9be68e3e49282831afad2c1f6593af80c0daf1287f6a92657986757"}, + {file = "watchdog-4.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c0b14488bd336c5b1845cee83d3e631a1f8b4e9c5091ec539406e4a324f882d8"}, + {file = "watchdog-4.0.2-py3-none-win32.whl", hash = "sha256:0d8a7e523ef03757a5aa29f591437d64d0d894635f8a50f370fe37f913ce4e19"}, + {file = "watchdog-4.0.2-py3-none-win_amd64.whl", hash = "sha256:c344453ef3bf875a535b0488e3ad28e341adbd5a9ffb0f7d62cefacc8824ef2b"}, + {file = "watchdog-4.0.2-py3-none-win_ia64.whl", hash = "sha256:baececaa8edff42cd16558a639a9b0ddf425f93d892e8392a56bf904f5eff22c"}, + {file = "watchdog-4.0.2.tar.gz", hash = "sha256:b4dfbb6c49221be4535623ea4474a4d6ee0a9cef4a80b20c28db4d858b64e270"}, ] [package.extras] @@ -6141,13 +6335,13 @@ files = [ [[package]] name = "webcolors" -version = "24.6.0" +version = "24.8.0" description = "A library for working with the color formats defined by HTML and CSS." optional = false python-versions = ">=3.8" files = [ - {file = "webcolors-24.6.0-py3-none-any.whl", hash = "sha256:8cf5bc7e28defd1d48b9e83d5fc30741328305a8195c29a8e668fa45586568a1"}, - {file = "webcolors-24.6.0.tar.gz", hash = "sha256:1d160d1de46b3e81e58d0a280d0c78b467dc80f47294b91b1ad8029d2cedb55b"}, + {file = "webcolors-24.8.0-py3-none-any.whl", hash = "sha256:fc4c3b59358ada164552084a8ebee637c221e4059267d0f8325b3b560f6c7f0a"}, + {file = "webcolors-24.8.0.tar.gz", hash = "sha256:08b07af286a01bcd30d583a7acadf629583d1f79bfef27dd2c2c5c263817277d"}, ] [package.extras] @@ -6183,13 +6377,13 @@ test = ["websockets"] [[package]] name = "werkzeug" -version = "3.0.3" +version = "3.0.4" description = "The comprehensive WSGI web application library." optional = true python-versions = ">=3.8" files = [ - {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, - {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, + {file = "werkzeug-3.0.4-py3-none-any.whl", hash = "sha256:02c9eb92b7d6c06f31a782811505d2157837cea66aaede3e217c7c27c039476c"}, + {file = "werkzeug-3.0.4.tar.gz", hash = "sha256:34f2371506b250df4d4f84bfe7b0921e4762525762bbd936614909fe25cd7306"}, ] [package.dependencies] @@ -6200,13 +6394,13 @@ watchdog = ["watchdog (>=2.3)"] [[package]] name = "widgetsnbextension" -version = "4.0.11" +version = "4.0.13" description = "Jupyter interactive widgets for Jupyter Notebook" optional = false python-versions = ">=3.7" files = [ - {file = "widgetsnbextension-4.0.11-py3-none-any.whl", hash = "sha256:55d4d6949d100e0d08b94948a42efc3ed6dfdc0e9468b2c4b128c9a2ce3a7a36"}, - {file = "widgetsnbextension-4.0.11.tar.gz", hash = "sha256:8b22a8f1910bfd188e596fe7fc05dcbd87e810c8a4ba010bdb3da86637398474"}, + {file = "widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71"}, + {file = "widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6"}, ] [[package]] @@ -6393,13 +6587,13 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.19.2" +version = "3.20.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.19.2-py3-none-any.whl", hash = "sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c"}, - {file = "zipp-3.19.2.tar.gz", hash = "sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19"}, + {file = "zipp-3.20.0-py3-none-any.whl", hash = "sha256:58da6168be89f0be59beb194da1250516fdaa062ccebd30127ac65d30045e10d"}, + {file = "zipp-3.20.0.tar.gz", hash = "sha256:0145e43d89664cfe1a2e533adc75adafed82fe2da404b4bbb6b026c0157bdb31"}, ] [package.extras] @@ -6416,4 +6610,4 @@ semsimian = ["semsimian"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0.0" -content-hash = "ecbdea318e89d4be044c9934c6ac50432cbd36ea2660badb8fe197a5d275e675" +content-hash = "f833e8ce7b579dd027a0c893e04e3085a6ee417f608988599e802285b6a84de6" diff --git a/pyproject.toml b/pyproject.toml index 6ad0f134f..e85608c4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ jupyter = ">=1.0.0" sphinx-rtd-theme = "^1.0.0" sphinx-click = ">=4.4.0" myst-parser = ">=1.0.0" -linkml = "^1.5.5" +linkml = ">=1.8.0" sphinxcontrib-mermaid = "^0.8.1" sphinx-copybutton = "0.5.1" coverage = "^6.3.2" diff --git a/src/oaklib/cli.py b/src/oaklib/cli.py index 8fd51aa5e..41e75dd2f 100644 --- a/src/oaklib/cli.py +++ b/src/oaklib/cli.py @@ -1540,11 +1540,7 @@ def viz( elif gap_fill: logging.info("Using gap-fill strategy") if isinstance(impl, SubsetterInterface): - rels = impl.gap_fill_relationships(curies, predicates=actual_predicates) - if isinstance(impl, OboGraphInterface): - graph = impl.relationships_to_graph(rels) - else: - raise AssertionError(f"{impl} needs to of type OboGraphInterface") + graph = impl.extract_gap_filled_graph(curies, predicates=actual_predicates) else: raise NotImplementedError(f"{impl} needs to implement Subsetter for --gap-fill") else: @@ -1552,7 +1548,7 @@ def viz( if max_hops is not None: logging.info(f"Trimming graph, max_hops={max_hops}") graph = trim_graph(graph, curies, distance=max_hops, include_intermediates=True) - logging.info(f"Drawing graph seeded from {curies}") + logging.info(f"Drawing graph seeded from {len(curies)} curies: {curies}") if meta: impl.add_metadata(graph) if not graph.nodes: @@ -2236,34 +2232,26 @@ def dump(terms, output, output_type: str, config_file: str = None, **kwargs): ) def transform(terms, transform, output, output_type: str, config_file: str = None, **kwargs): """ - Transforms an ontology - - Example: + Applies a defined transformation to an ontology (EXPERIMENTAL). - runoak -i pato.obo dump -o pato.json -O json - - Example: + Transformations include: - runoak -i pato.owl dump -o pato.ttl -O turtle + - SEPTransform: implements Structured-Entities-Parts (SEP) design pattern + - EdgeFilterTransformer: filters edges based on a predicate - You can also pass in a JSON configuration file to parameterize the dump process. - - Currently this is only used for fhirjson dumps, the configuration options are specified here: - - https://incatools.github.io/ontology-access-kit/converters/obo-graph-to-fhir.html + Note that for most transformation operations, we recommend using ROBOT + and commands such as remove, filter, query. Example: - runoak -i pato.owl dump -o pato.ttl -O fhirjson -c fhir_config.json -o pato.fhir.json + runoak -i xao.obo transform -t SEPTransform -o xao.sep.obo - Currently each implementation only supports a subset of formats. + Removes all P part-of Ws from XAO and replaces occurrences with triads of the form: - The dump command is also blocked for remote endpoints such as Ubergraph, - to avoid killer queries. - - Python API: - - https://incatools.github.io/ontology-access-kit/interfaces/basic + - W subClassOf W-structure + - W subClassOf W-structure + - W-Part subClassOf W-structure + - P subClassOf W-Part """ if terms: @@ -4204,6 +4192,11 @@ def apply_taxon_constraints( "-P", multiple=True, ) +@click.option( + "--include-unused/--no-include-unused", + default=True, + show_default=True, +) @click.argument("terms", nargs=-1) def usages( terms, @@ -4241,6 +4234,10 @@ def usages( This will include usages over multiple ontologies + Using ontobee: + + runoak -i ubergraph: usages CL:0000540 + You can multiple queries over multiple sources (an AggregatorImplementation): runoak -i sqlite:obo:go -a ubergraph: -a amigo: -a quickgo: usages GO:0031969 @@ -4565,6 +4562,13 @@ def associations_counts( show_default=True, help="Include entities (e.g. genes) in the output, otherwise just the counts", ) +@click.option( + "--main-score-field", + "-S", + default="proportion_subjects_in_common", + show_default=True, + help="Score used for summarization", +) @click.argument("terms", nargs=-1) def associations_matrix( terms, @@ -4574,6 +4578,7 @@ def associations_matrix( autolabel: bool, output_type: str, output: str, + main_score_field: str, **kwargs, ): """ @@ -4585,18 +4590,36 @@ def associations_matrix( Example: - runoak -i amigo:NCBITaxon:9606 associations-matrix -p i,p GO:0042416 GO:0014046 + This results in a 2x2 matrix (shown as a long table) + As a heatmap: - runoak -i amigo:NCBITaxon:9606 associations-matrix -p i,p GO:0042416 GO:0014046 -o heatmap > /tmp/heatmap.png + runoak -i amigo:NCBITaxon:9606 associations-matrix -p i,p GO:0042416 GO:0014046 -O heatmap > /tmp/heatmap.png + + By default the heatmap will show the percentage of overlap between the two terms. To change this + to be either the percentage of the first term in the second, or the percentage of the second term in the first, + use the --main-score-field (-S) option, with "1" or "2". + + You can plug in as many terms as you like, it will perform an all-by-all + + To compare one set with another, use the "@" separator. + You can also substitute OAK expression language query terms + + runoak --stacktrace -i amigo:NCBITaxon:9606 associations-matrix -p i,p .idfile cp.txt @ .idfile ct.txt """ impl = settings.impl writer = _get_writer(output_type, impl, StreamingCsvWriter) writer.autolabel = autolabel writer.output = output + if main_score_field and isinstance(writer, HeatmapWriter): + if main_score_field == "1": + main_score_field = "proportion_entity1_subjects_in_entity2" + if main_score_field == "2": + main_score_field = "proportion_entity2_subjects_in_entity1" + writer.value_field = main_score_field actual_predicates = _process_predicates_arg(predicates) actual_association_predicates = _process_predicates_arg(association_predicates) if not isinstance(impl, AssociationProviderInterface): @@ -4619,6 +4642,7 @@ def associations_matrix( **kwargs, ) jaccards = [] + n = 0 for pair in pairs_it: # TODO: more elegant way to handle this pair.associations_for_subjects_in_common = None @@ -4627,8 +4651,10 @@ def associations_matrix( pair, label_fields=["object1", "object2"], ) - logging.info(f"Average Jaccard index: {stats.mean(jaccards)}") + n += 1 + logging.info(f"Emitted {n} pairs") writer.finish() + logging.info(f"Average Jaccard index: {stats.mean([j for j in jaccards if j is not None])}") @main.command() @@ -6349,6 +6375,10 @@ def fill_table( metadata.dependencies.append(ColumnDependency(**d_args)) for d_str in list(relation): d_args = yaml.safe_load(d_str) + if "relation" not in d_args: + d_args["relation"] = "label" + if "dependent_column" not in d_args: + d_args["dependent_column"] = d_args["primary_key"] + "_label" metadata.dependencies.append(ColumnDependency(**d_args)) else: metadata = tf.infer_metadata(input_table[0]) diff --git a/src/oaklib/conf/obograph-style.json b/src/oaklib/conf/obograph-style.json index 91bba2066..d8717ce14 100644 --- a/src/oaklib/conf/obograph-style.json +++ b/src/oaklib/conf/obograph-style.json @@ -6,7 +6,7 @@ ], "fillcolor": "white", - "excludeSingletons": "true", + "excludeSingletons": "false", "relationProperties": { "rdfs:subClassOf": { "color": "black", diff --git a/src/oaklib/datamodels/association.py b/src/oaklib/datamodels/association.py index eef50080c..595a1fe29 100644 --- a/src/oaklib/datamodels/association.py +++ b/src/oaklib/datamodels/association.py @@ -1,5 +1,5 @@ # Auto generated from association.yaml by pythongen.py version: 0.0.1 -# Generation date: 2024-03-23T16:11:34 +# Generation date: 2024-08-07T13:29:21 # Schema: association # # id: https://w3id.org/oak/association @@ -22,6 +22,7 @@ from jsonasobj2 import JsonObj, as_dict from typing import Optional, List, Union, Dict, ClassVar, Any from dataclasses import dataclass +from datetime import date, datetime from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue, PvFormulaOptions from linkml_runtime.utils.slot import Slot @@ -270,6 +271,8 @@ class PairwiseCoAssociation(YAMLRoot): number_subject_unique_to_entity2: Optional[int] = None subjects_in_common: Optional[Union[str, List[str]]] = empty_list() associations_for_subjects_in_common: Optional[Union[Union[dict, Association], List[Union[dict, Association]]]] = empty_list() + proportion_entity1_subjects_in_entity2: Optional[float] = None + proportion_entity2_subjects_in_entity1: Optional[float] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.object1): @@ -311,6 +314,12 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.associations_for_subjects_in_common = [self.associations_for_subjects_in_common] if self.associations_for_subjects_in_common is not None else [] self.associations_for_subjects_in_common = [v if isinstance(v, Association) else Association(**as_dict(v)) for v in self.associations_for_subjects_in_common] + if self.proportion_entity1_subjects_in_entity2 is not None and not isinstance(self.proportion_entity1_subjects_in_entity2, float): + self.proportion_entity1_subjects_in_entity2 = float(self.proportion_entity1_subjects_in_entity2) + + if self.proportion_entity2_subjects_in_entity1 is not None and not isinstance(self.proportion_entity2_subjects_in_entity1, float): + self.proportion_entity2_subjects_in_entity1 = float(self.proportion_entity2_subjects_in_entity1) + super().__post_init__(**kwargs) @@ -619,6 +628,12 @@ class slots: slots.proportion_subjects_in_common = Slot(uri=ONTOASSOC.proportion_subjects_in_common, name="proportion_subjects_in_common", curie=ONTOASSOC.curie('proportion_subjects_in_common'), model_uri=ONTOASSOC.proportion_subjects_in_common, domain=None, range=Optional[float]) +slots.proportion_entity1_subjects_in_entity2 = Slot(uri=ONTOASSOC.proportion_entity1_subjects_in_entity2, name="proportion_entity1_subjects_in_entity2", curie=ONTOASSOC.curie('proportion_entity1_subjects_in_entity2'), + model_uri=ONTOASSOC.proportion_entity1_subjects_in_entity2, domain=None, range=Optional[float]) + +slots.proportion_entity2_subjects_in_entity1 = Slot(uri=ONTOASSOC.proportion_entity2_subjects_in_entity1, name="proportion_entity2_subjects_in_entity1", curie=ONTOASSOC.curie('proportion_entity2_subjects_in_entity1'), + model_uri=ONTOASSOC.proportion_entity2_subjects_in_entity1, domain=None, range=Optional[float]) + slots.number_subjects_in_union = Slot(uri=ONTOASSOC.number_subjects_in_union, name="number_subjects_in_union", curie=ONTOASSOC.curie('number_subjects_in_union'), model_uri=ONTOASSOC.number_subjects_in_union, domain=None, range=Optional[int]) diff --git a/src/oaklib/datamodels/association.yaml b/src/oaklib/datamodels/association.yaml index b367ad895..52a0bbd46 100644 --- a/src/oaklib/datamodels/association.yaml +++ b/src/oaklib/datamodels/association.yaml @@ -92,6 +92,8 @@ classes: - number_subject_unique_to_entity2 - subjects_in_common - associations_for_subjects_in_common + - proportion_entity1_subjects_in_entity2 + - proportion_entity2_subjects_in_entity1 ParserConfiguration: description: Settings that determine behavior when parsing associations. @@ -397,6 +399,10 @@ slots: range: integer proportion_subjects_in_common: range: float + proportion_entity1_subjects_in_entity2: + range: float + proportion_entity2_subjects_in_entity1: + range: float number_subjects_in_union: range: integer number_subject_unique_to_entity1: diff --git a/src/oaklib/implementations/amigo/amigo_implementation.py b/src/oaklib/implementations/amigo/amigo_implementation.py index af9afbc85..03703bd75 100644 --- a/src/oaklib/implementations/amigo/amigo_implementation.py +++ b/src/oaklib/implementations/amigo/amigo_implementation.py @@ -12,7 +12,7 @@ from oaklib.datamodels.association import Association from oaklib.datamodels.search import SearchConfiguration from oaklib.datamodels.vocabulary import IS_A, PART_OF, RDFS_LABEL -from oaklib.interfaces import SearchInterface +from oaklib.interfaces import OboGraphInterface, SearchInterface from oaklib.interfaces.association_provider_interface import ( AssociationProviderInterface, ) @@ -133,6 +133,7 @@ def _normalize(curie: CURIE) -> CURIE: @dataclass class AmiGOImplementation( AssociationProviderInterface, + OboGraphInterface, SearchInterface, UsagesInterface, SemanticSimilarityInterface, @@ -162,11 +163,19 @@ class AmiGOImplementation( _solr: pysolr.Solr = None _source: str = None + _go_adapter: OboGraphInterface = None def __post_init__(self): self._source = self.resource.slug self._solr = pysolr.Solr(AMIGO_ENDPOINT) + def go_adapter(self) -> OboGraphInterface: + if not self._go_adapter: + from oaklib import get_adapter + + self._go_adapter = get_adapter("sqlite:obo:go") + return self._go_adapter + def _cache_nodes(self, nodes: List[Dict], curies: Iterable[CURIE]): for node in nodes: curie = node["id"] @@ -513,3 +522,19 @@ def information_content_scores( yield term, ic logger.info(f"Iterated {n} counts") + + # delegation + + def descendants( + self, + *args, + **kwargs, + ) -> Iterable[CURIE]: + yield from self.go_adapter().descendants(*args, **kwargs) + + def ancestors( + self, + *args, + **kwargs, + ) -> Iterable[CURIE]: + yield from self.go_adapter().ancestors(*args, **kwargs) diff --git a/src/oaklib/implementations/sparql/abstract_sparql_implementation.py b/src/oaklib/implementations/sparql/abstract_sparql_implementation.py index 743917a73..7d07f7b0c 100644 --- a/src/oaklib/implementations/sparql/abstract_sparql_implementation.py +++ b/src/oaklib/implementations/sparql/abstract_sparql_implementation.py @@ -509,17 +509,94 @@ def relationships( :param include_entailed: :return: """ - if not subjects: - subjects = list(self.entities()) - logging.info(f"Subjects: {len(subjects)}") - for subject in subjects: - for this_predicate, this_objects in self.outgoing_relationship_map(subject).items(): - if predicates and this_predicate not in predicates: - continue - for this_object in this_objects: - if objects and this_object not in objects: - continue - yield subject, this_predicate, this_object + s_uris = [self.curie_to_sparql(x) for x in subjects] if subjects else None + p_uris = [self.curie_to_sparql(x) for x in predicates] if predicates else None + o_uris = [self.curie_to_sparql(x) for x in objects] if objects else None + builtins = {IS_A} + selected_builtins = builtins.intersection(predicates) if predicates else builtins + selected_non_builtins = set(predicates) - builtins if predicates else None + if selected_builtins: + q = SparqlQuery( + distinct=True, + select=["?s", "?p", "?o"], + where=[ + "?s ?p ?o", + "FILTER (isIRI(?s) && isIRI(?o))", + _sparql_values("s", s_uris), + _sparql_values("p", [self.curie_to_sparql(x) for x in selected_builtins]), + _sparql_values("o", o_uris), + ], + ) + bindings = self._sparql_query(q) + for row in bindings: + yield ( + self.uri_to_curie(row["s"]["value"]), + self.uri_to_curie(row["p"]["value"]), + self.uri_to_curie(row["o"]["value"]), + ) + if not predicates or RDF_TYPE in predicates: + q = SparqlQuery( + distinct=True, + select=["?s", "?o"], + where=[ + "?s rdf:type ?o", + "?o a owl:Class", + "FILTER (isIRI(?s) && isIRI(?o))", + _sparql_values("s", s_uris), + _sparql_values("o", o_uris), + ], + ) + bindings = self._sparql_query(q) + for row in bindings: + yield ( + self.uri_to_curie(row["s"]["value"]), + RDF_TYPE, + self.uri_to_curie(row["o"]["value"]), + ) + if not predicates or selected_non_builtins: + # tbox subclass existentials + q = SparqlQuery( + distinct=True, + select=["?s", "?p", "?o"], + where=[ + "?s ?sub_pred [owl:onProperty ?p ; owl:someValuesFrom ?o]", + "FILTER (isIRI(?s) && isIRI(?o) && isIRI(?p))", + _sparql_values("s", s_uris), + _sparql_values("p", p_uris), + _sparql_values("o", o_uris), + _sparql_values("sub_pred", [IS_A, RDF_TYPE]), + ], + ) + if selected_non_builtins: + q.add_values("p", [self.curie_to_sparql(x) for x in selected_non_builtins]) + bindings = self._sparql_query(q) + for row in bindings: + yield ( + self.uri_to_curie(row["s"]["value"]), + self.uri_to_curie(row["p"]["value"]), + self.uri_to_curie(row["o"]["value"]), + ) + # abox + q = SparqlQuery( + distinct=True, + select=["?s", "?p", "?o"], + where=[ + "?s ?p ?o", + "?p rdf:type owl:ObjectProperty", + "FILTER (isIRI(?s) && isIRI(?o))", + _sparql_values("s", s_uris), + _sparql_values("o", o_uris), + ], + ) + if selected_non_builtins: + q.add_values("p", [self.curie_to_sparql(x) for x in selected_non_builtins]) + bindings = self._sparql_query(q) + for row in bindings: + yield ( + self.uri_to_curie(row["s"]["value"]), + self.uri_to_curie(row["p"]["value"]), + self.uri_to_curie(row["o"]["value"]), + ) def outgoing_relationship_map(self, *args, **kwargs) -> RELATIONSHIP_MAP: return pairs_as_dict(self.outgoing_relationships(*args, **kwargs)) diff --git a/src/oaklib/implementations/sqldb/sql_implementation.py b/src/oaklib/implementations/sqldb/sql_implementation.py index 7a0ee46e3..ffb73d838 100644 --- a/src/oaklib/implementations/sqldb/sql_implementation.py +++ b/src/oaklib/implementations/sqldb/sql_implementation.py @@ -2041,6 +2041,7 @@ def gap_fill_relationships( self, seed_curies: List[CURIE], predicates: List[PRED_CURIE] = None ) -> Iterator[RELATIONSHIP]: seed_curies = tuple(seed_curies) + logging.info(f"Gap fill for {len(seed_curies)} seed terms") q = self.session.query(EntailedEdge).filter(EntailedEdge.subject.in_(seed_curies)) q = q.filter(EntailedEdge.object.in_(seed_curies)) q = q.filter(EntailedEdge.subject != EntailedEdge.object) diff --git a/src/oaklib/interfaces/association_provider_interface.py b/src/oaklib/interfaces/association_provider_interface.py index ed86d0662..fe4e8c06a 100644 --- a/src/oaklib/interfaces/association_provider_interface.py +++ b/src/oaklib/interfaces/association_provider_interface.py @@ -362,17 +362,19 @@ def association_pairwise_coassociations( """ if inputs_are_subjects: raise NotImplementedError - curies1 = list(curies1) - curies2 = list(curies2) + curies1 = set(curies1) + curies2 = set(curies2) + symmetric = curies1 == curies2 logging.info(f"Finding co-associations between {curies1} and {curies2}") assocmap = { - c: list(self.associations(objects=[c], **kwargs)) for c in set(curies1 + curies2) + c: list(self.associations(objects=[c], limit=-1, **kwargs)) + for c in curies1.union(curies2) } assocmap1 = {c: assocmap[c] for c in curies1} assocmap2 = {c: assocmap[c] for c in curies2} for c1 in curies1: for c2 in curies2: - if c2 > c1 and not include_reciprocals: + if c2 > c1 and not include_reciprocals and symmetric: continue if c1 == c2 and not include_diagonal: continue @@ -380,6 +382,11 @@ def association_pairwise_coassociations( assocs2 = assocmap2[c2] elements1 = {a.subject for a in assocs1} elements2 = {a.subject for a in assocs2} + if not elements1 or not elements2: + logging.debug( + f"No associations for {c1} or {c2}, so a coassociation is not meaningful" + ) + continue common = elements1.intersection(elements2) assocs_to_common = [a for a in assocs1 + assocs2 if a.subject in common] coassoc = PairwiseCoAssociation( @@ -394,6 +401,14 @@ def association_pairwise_coassociations( coassoc.proportion_subjects_in_common = ( coassoc.number_subjects_in_common / coassoc.number_subjects_in_union ) + if elements1: + coassoc.proportion_entity1_subjects_in_entity2 = ( + coassoc.number_subjects_in_common / len(elements1) + ) + if elements2: + coassoc.proportion_entity2_subjects_in_entity1 = ( + coassoc.number_subjects_in_common / len(elements2) + ) if include_entities: coassoc.subjects_in_common = list(common) coassoc.associations_for_subjects_in_common = assocs_to_common diff --git a/src/oaklib/interfaces/subsetter_interface.py b/src/oaklib/interfaces/subsetter_interface.py index bbf7c1a25..04d48df1e 100644 --- a/src/oaklib/interfaces/subsetter_interface.py +++ b/src/oaklib/interfaces/subsetter_interface.py @@ -1,12 +1,15 @@ +import logging from abc import ABC from dataclasses import dataclass from typing import Iterator, List +from oaklib.interfaces import OboGraphInterface from oaklib.interfaces.basic_ontology_interface import ( RELATIONSHIP, BasicOntologyInterface, ) from oaklib.types import CURIE, PRED_CURIE +from oaklib.utilities.obograph_utils import index_graph_nodes @dataclass @@ -72,3 +75,26 @@ def gap_fill_relationships( :return: """ raise NotImplementedError + + def extract_gap_filled_graph( + self, + seed_curies: List[CURIE], + predicates: List[PRED_CURIE] = None, + include_singletons: bool = True, + **kwargs, + ) -> OboGraphInterface: + rels = list(self.gap_fill_relationships(seed_curies, predicates=predicates)) + logging.info(f"Gap filled relationships: {len(rels)}") + if not isinstance(self, OboGraphInterface): + raise AssertionError(f"{self} needs to of type OboGraphInterface") + graph = self.relationships_to_graph(rels) + ix = index_graph_nodes(graph) + logging.info(f"Gap filled nodes: {len(ix)}") + if include_singletons: + for c in seed_curies: + if c not in ix: + node = self.node(c) + logging.info(f"Adding: {node}") + graph.nodes.append(node) + # graph.edges.append(Edge(sub=c, pred="subClassOf", obj=c)) + return graph diff --git a/src/oaklib/interfaces/usages_interface.py b/src/oaklib/interfaces/usages_interface.py index d6e704868..514e6650e 100644 --- a/src/oaklib/interfaces/usages_interface.py +++ b/src/oaklib/interfaces/usages_interface.py @@ -30,6 +30,7 @@ class UsageContext(str, Enum): ASSOCIATION_OBJECT = "association_object" MAPPING_SUBJECT = "mapping_subject" MAPPING_OBJECT = "mapping_object" + MULTIPLE = "multiple" class Usage(BaseModel): @@ -41,7 +42,9 @@ class Usage(BaseModel): used_by_id: str predicate: Optional[str] = None source: str + dataset: Optional[str] = None context: UsageContext + axiom: Optional[str] = None description: Optional[str] = None @@ -55,17 +58,22 @@ def usages( curies: List[CURIE], used_by: Optional[List[CURIE]] = None, used_by_prefixes: Optional[List[str]] = None, + include_unused: bool = False, **kwargs, ) -> Iterable[Usage]: """ Get usages of a term :param curies: + :param used_by: + :param used_by_prefixes: + :param include_unused: :param kwargs: :return: """ logger.info(f"Getting usages for {curies}, prefixes={used_by_prefixes}") + used_curies = set() if used_by or used_by_prefixes: for usage in self.usages(curies, **kwargs): ok = True @@ -79,6 +87,7 @@ def usages( logger.debug(f"Skipping {usage} as not in used_by") if ok: yield usage + used_curies.add(usage.used_id) return def _source_id(): @@ -93,6 +102,7 @@ def _source_id(): source=_source_id(), context=UsageContext.RELATIONSHIP_SUBJECT, ) + used_curies.add(s) logger.info(f"Checking relationships objects for {len(curies)} curies") for s, p, o in self.relationships(objects=curies): yield Usage( @@ -102,6 +112,7 @@ def _source_id(): source=_source_id(), context=UsageContext.RELATIONSHIP_OBJECT, ) + used_curies.add(o) logger.info(f"Checking relationships predicates for {len(curies)} curies") for _s, p, o in self.relationships(predicates=curies): # TODO: used_by is a relationship @@ -112,6 +123,7 @@ def _source_id(): source=_source_id(), context=UsageContext.RELATIONSHIP_PREDICATE, ) + used_curies.add(p) logger.info(f"Checking logical definitions for {len(curies)} curies") if isinstance(self, OboGraphInterface): for ldef in self.logical_definitions(objects=curies): @@ -124,6 +136,7 @@ def _source_id(): source=_source_id(), context=UsageContext.LOGICAL_DEFINITION_GENUS, ) + used_curies.add(ldef.definedClassId) for r in ldef.restrictions: if r.propertyId in curies: yield Usage( @@ -133,6 +146,7 @@ def _source_id(): source=_source_id(), context=UsageContext.LOGICAL_DEFINITION_PREDICATE, ) + used_curies.add(ldef.definedClassId) if r.fillerId in curies: yield Usage( used_id=ldef.definedClassId, @@ -141,6 +155,7 @@ def _source_id(): source=_source_id(), context=UsageContext.LOGICAL_DEFINITION_FILLER, ) + used_curies.add(ldef.definedClassId) logger.info(f"Checking associations for {len(curies)} curies") if isinstance(self, AssociationProviderInterface): for a in self.associations(objects=curies, object_closure_predicates=[]): @@ -151,6 +166,7 @@ def _source_id(): source=_source_id(), context=UsageContext.ASSOCIATION_OBJECT, ) + used_curies.add(a.subject) logger.info(f"Checking mappings for {len(curies)} curies") if isinstance(self, MappingProviderInterface): for m in self.sssom_mappings(curies): @@ -162,6 +178,7 @@ def _source_id(): source=_source_id(), context=UsageContext.MAPPING_SUBJECT, ) + used_curies.add(m.subject_id) elif m.object_id in curies: yield Usage( used_id=m.object_id, @@ -170,5 +187,15 @@ def _source_id(): source=_source_id(), context=UsageContext.MAPPING_OBJECT, ) + used_curies.add(m.object_id) else: raise AssertionError(f"Mapping {m} not in curies {curies}") + if include_unused: + for c in curies: + if c not in used_curies: + yield Usage( + used_id=c, + used_by_id="None", + source=_source_id(), + context=UsageContext.MULTIPLE, + ) diff --git a/src/oaklib/io/heatmap_writer.py b/src/oaklib/io/heatmap_writer.py index ea703c9f1..5888af3cf 100644 --- a/src/oaklib/io/heatmap_writer.py +++ b/src/oaklib/io/heatmap_writer.py @@ -1,5 +1,5 @@ from dataclasses import dataclass, field -from typing import Dict, List, Union +from typing import Dict, List, Optional, Union from linkml_runtime.utils.yamlutils import YAMLRoot @@ -27,13 +27,14 @@ class HeatmapWriter(StreamingWriter): """ items: List[Dict] = field(default_factory=lambda: []) - value_field: str = field(default_factory=lambda: "phenodigm_score") + value_field: Optional[str] = None def emit(self, obj: Union[YAMLRoot, dict], label_fields=None): if isinstance(obj, TermPairwiseSimilarity): t1 = obj.subject_id + f" {obj.subject_label}" if obj.subject_label else "" t2 = obj.object_id + f" {obj.object_label}" if obj.object_label else "" - v = getattr(obj, self.value_field) + value_field = self.value_field or "phenodigm_score" + v = getattr(obj, value_field) self.items.append({"term1": t1, "term2": t2, "score": v}) if isinstance(obj, PairwiseCoAssociation): if label_fields and self.autolabel: @@ -42,16 +43,33 @@ def emit(self, obj: Union[YAMLRoot, dict], label_fields=None): else: t1 = obj.object1 t2 = obj.object2 - v = obj.proportion_subjects_in_common + value_field = self.value_field or "proportion_subjects_in_common" + v = getattr(obj, value_field) self.items.append({"term1": t1, "term2": t2, "score": v}) else: raise ValueError(f"Cannot handle: {obj}") def finish(self): + import matplotlib.pyplot as plt import pandas - import seaborn + import seaborn as sns df = pandas.DataFrame(self.items) df = df.pivot(index="term1", columns="term2", values="score") - ax = seaborn.heatmap(df, annot=True, fmt=".2f") + # mask = df != 0 + plt.figure(figsize=(24, 20)) # Adjust the dimensions as needed + value_field = self.value_field or "proportion_subjects_in_common" + plt.title(f"Heatmap of {value_field}") + # ax = sns.heatmap(df, annot=mask, fmt=".2f", mask=~mask) # Annotates only non-zero cells + ax = sns.heatmap(df, annot=True, fmt=".2f") + # Rotate x and y labels if necessary + plt.xticks(rotation=45, ha="right") # Rotate term2 labels for better fit + plt.yticks(rotation=0) # Keep term1 labels horizontal + # Adjust font size of the labels + ax.tick_params(axis="both", which="major", labelsize=24) + + # Manually set x-axis labels to ensure correct alignment + ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment="right") + ax.get_figure().savefig(self.output, bbox_inches="tight") + # plt.savefig(self.output, bbox_inches="tight") diff --git a/src/oaklib/io/streaming_writer.py b/src/oaklib/io/streaming_writer.py index 1d142b73e..1f400ebd5 100644 --- a/src/oaklib/io/streaming_writer.py +++ b/src/oaklib/io/streaming_writer.py @@ -1,6 +1,7 @@ import atexit import logging import sys +from copy import copy from dataclasses import dataclass, field from typing import Any, ClassVar, Dict, Iterable, List, Mapping, Optional, Type, Union @@ -149,12 +150,9 @@ def _label(c: CURIE) -> str: label = self.ontology_interface.label( curie, lang=self.settings.preferred_language ) - obj_as_dict_new = {} - for k, v in obj_as_dict.items(): - obj_as_dict_new[k] = v + for k, _v in copy(obj_as_dict).items(): if k == f: - obj_as_dict_new[col_name] = label - obj_as_dict = obj_as_dict_new + obj_as_dict[col_name] = label return obj_as_dict def emit_dict(self, obj: Mapping[str, Any], object_type: Type = None): diff --git a/src/oaklib/utilities/table_filler.py b/src/oaklib/utilities/table_filler.py index 37fb38856..f2d4a21ba 100644 --- a/src/oaklib/utilities/table_filler.py +++ b/src/oaklib/utilities/table_filler.py @@ -123,9 +123,10 @@ def parse_table(input_file: IO, delimiter="\t") -> List[ROW]: v = row[col] if v == "": row[col] = None - m = LIST_PATTERN.match(v) - if m: - row[col] = m.group(1).split("|") + if v is not None: + m = LIST_PATTERN.match(v) + if m: + row[col] = m.group(1).split("|") return rows diff --git a/tests/test_implementations/test_sparql.py b/tests/test_implementations/test_sparql.py index 1488ea9aa..29e269285 100644 --- a/tests/test_implementations/test_sparql.py +++ b/tests/test_implementations/test_sparql.py @@ -96,6 +96,8 @@ def test_instance_graph(self): expected.remove(t) self.assertEqual([], expected) rels = list(oi.relationships()) + for rel in rels: + print(rel) self.assertCountEqual( [ ("http://example.org/b", "rdfs:subClassOf", "http://example.org/a"),