
    01i=                      S r SSKJr  SSKrSSKrSSKJrJr  SSKJ	r	  SSK
JrJr  SSKJrJrJrJrJrJr  SSKJrJrJrJrJr  SS	KJr  \R8                  " \5      r / S
Qr " S S5      r S\\\\" S5      SS.r!S r"S r#S r$S r% SES jr&S r' " S S5      r( " S S5      r)\" S5      r* " S S\)5      r+ " S S\+5      r,S  r-S! r. " S" S#\5      r/\0" \" S$5      5      Rc                  \Rd                  \Rf                  \Rh                  \Rj                  \Rl                  \Rn                  \Rp                  \Rr                  \Rt                  \Rv                  \Rx                  \Rz                  /5      r>S% r?S& r@ " S' S(\A5      rB " S) S*\B5      rCSFS+ jrD " S, S-\+5      rE " S. S/5      rF " S0 S1\F\E5      rG\Rx                  \Rv                  /rH " S2 S35      rI " S4 S55      rJ " S6 S7\F\E5      rKS8 rL " S9 S:\E5      rM\ " S; 5      rN\ " S< 5      rO\ " S= 5      rP\ " S> 5      rQ\ " S? 5      rR\ " S@ 5      rSSArT " SB SC\+5      rUSFSD jrVg)Gu  RDFLib Python binding for OWL Abstract Syntax

| OWL Constructor   | DL Syntax     | Manchester OWL Syntax | Example                          |
|------------------|---------------|------------------------|----------------------------------|
| `intersectionOf` | C ∩ D         | C AND D                | Human AND Male                   |
| `unionOf`        | C ∪ D         | C OR D                 | Man OR Woman                     |
| `complementOf`   | ¬C            | NOT C                  | NOT Male                         |
| `oneOf`          | {a} ∪ {b}...  | {a b ...}              | {England Italy Spain}           |
| `someValuesFrom` | ∃ R C         | R SOME C               | hasColleague SOME Professor      |
| `allValuesFrom`  | ∀ R C         | R ONLY C               | hasColleague ONLY Professor      |
| `minCardinality` | ≥ N R         | R MIN 3                | hasColleague MIN 3               |
| `maxCardinality` | ≤ N R         | R MAX 3                | hasColleague MAX 3               |
| `cardinality`    | = N R         | R EXACTLY 3            | hasColleague EXACTLY 3           |
| `hasValue`       | ∃ R.{a}       | R VALUE a              | hasColleague VALUE Matthew       |

See:
- http://www.w3.org/TR/owl-semantics/syntax.html
- http://owl-workshop.man.ac.uk/acceptedLong/submission_9.pdf

3.2.3 Axioms for complete classes without using owl:equivalentClass

Named class description of type 2 (with owl:oneOf) or type 4-6
(with owl:intersectionOf, owl:unionOf or owl:complementOf

Uses Manchester Syntax for `__repr__`

```python
>>> exNs = Namespace("http://example.com/")
>>> g = Graph()
>>> g.bind("ex", exNs, override=False)

```

Now we have an empty graph, we can construct OWL classes in it
using the Python classes defined in this module

```python
>>> a = Class(exNs.Opera, graph=g)

```

Now we can assert rdfs:subClassOf and owl:equivalentClass relationships
(in the underlying graph) with other classes using the 'subClassOf'
and 'equivalentClass' descriptors which can be set to a list
of objects for the corresponding predicates.

```python
>>> a.subClassOf = [exNs.MusicalWork]

```

We can then access the rdfs:subClassOf relationships

```python
>>> print(list(a.subClassOf))
[Class: ex:MusicalWork ]

```

This can also be used against already populated graphs:

```python
>>> owlGraph = Graph().parse(str(OWL))
>>> list(Class(OWL.Class, graph=owlGraph).subClassOf)
[Class: rdfs:Class ]

```

Operators are also available. For instance we can add ex:Opera to the extension
of the ex:CreativeWork class via the '+=' operator

```python
>>> a
Class: ex:Opera SubClassOf: ex:MusicalWork
>>> b = Class(exNs.CreativeWork, graph=g)
>>> b += a
>>> print(sorted(a.subClassOf, key=lambda c:c.identifier))
[Class: ex:CreativeWork , Class: ex:MusicalWork ]

```

And we can then remove it from the extension as well

```python
>>> b -= a
>>> a
Class: ex:Opera SubClassOf: ex:MusicalWork

```

Boolean class constructions can also  be created with Python operators.
For example, The | operator can be used to construct a class consisting of a
owl:unionOf the operands:

```python
>>> c =  a | b | Class(exNs.Work, graph=g)
>>> c
( ex:Opera OR ex:CreativeWork OR ex:Work )

```

Boolean class expressions can also be operated as lists (using python list
operators)

```python
>>> del c[c.index(Class(exNs.Work, graph=g))]
>>> c
( ex:Opera OR ex:CreativeWork )

```

The '&' operator can be used to construct class intersection:

```python
>>> woman = Class(exNs.Female, graph=g) & Class(exNs.Human, graph=g)
>>> woman.identifier = exNs.Woman
>>> woman
( ex:Female AND ex:Human )
>>> len(woman)
2

```

Enumerated classes can also be manipulated

```python
>>> contList = [Class(exNs.Africa, graph=g), Class(exNs.NorthAmerica, graph=g)]
>>> EnumeratedClass(members=contList, graph=g)
{ ex:Africa ex:NorthAmerica }

```

owl:Restrictions can also be instantiated:

```python
>>> Restriction(exNs.hasParent, graph=g, allValuesFrom=exNs.Human)
( ex:hasParent ONLY ex:Human )

```

Restrictions can also be created using Manchester OWL syntax in 'colloquial' Python

```python
>>> exNs.hasParent @ some @ Class(exNs.Physician, graph=g)
( ex:hasParent SOME ex:Physician )
>>> Property(exNs.hasParent, graph=g) @ max @ Literal(1)
( ex:hasParent MAX 1 )
>>> print(g.serialize(format='pretty-xml'))  # doctest: +SKIP
```
    )annotationsN)IterableUnion)
Collection)Graph_ObjectType)OWLRDFRDFSXSD	NamespaceNamespaceManager)BNode
IdentifierLiteralURIRefVariable)first)%ACE_NS
AllClassesAllDifferentAllPropertiesAnnotatableTermsBooleanClassCLASS_RELATIONSCallable	CastClassClassClassNamespaceFactoryCommonNSBindingsComponentTermsDeepClassClearEnumeratedClassGetIdentifiedClasses
IndividualInfixMalformedClassMalformedClassErrorOWLRDFListProxyOntologyPropertyPropertyAbstractSyntaxRestrictionclassOrIdentifierclassOrTermexactlygenerateQNamemanchesterSyntaxmaxminnsBindsonlypropertyOrIdentifiersomevaluec                  8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
r&      c                    Xl         g Nfunction)selfr?   s     P/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/extras/infixowl.py__init__Infix.__init__            c                     [        X4S j5      $ )Nc                $    UR                  X 5      $ r=   r>   xr@   others      rA   <lambda>#Infix.__rlshift__.<locals>.<lambda>       t}}U7NrE   r&   r@   rJ   s     rA   __rlshift__Infix.__rlshift__       DNOOrE   c                $    U R                  U5      $ r=   r>   rO   s     rA   
__rshift__Infix.__rshift__       }}U##rE   c                     [        X4S j5      $ )Nc                $    UR                  X 5      $ r=   r>   rH   s      rA   rK   #Infix.__rmatmul__.<locals>.<lambda>   rM   rE   rN   rO   s     rA   __rmatmul__Infix.__rmatmul__   rR   rE   c                $    U R                  U5      $ r=   r>   rO   s     rA   
__matmul__Infix.__matmul__   rV   rE   c                $    U R                  X5      $ r=   r>   )r@   value1value2s      rA   __call__Infix.__call__   s    }}V,,rE   r>   N)__name__
__module____qualname____firstlineno__rB   rP   rT   rZ   r]   rb   __static_attributes__ rE   rA   r&   r&      s"    !P$P$-rE   r&   z$http://www.w3.org/2004/02/skos/core#z$http://www.w3.org/2000/10/swap/list#z http://purl.org/dc/elements/1.1/)skosrdfrdfsowllistdcc                `    U R                  [        U5      5      u  p!nSR                  X#/5      $ N:)compute_qnamer.   join)graphuriprefix	localnames       rA   r1   r1      s/    "001B31GHF88V'((rE   c                    [        U [        5      (       a  U R                  $ [        U [        [        [
        45      (       d   eU $ r=   )
isinstancer   
identifierr   r   r   things    rA   r/   r/      s:    %%&%!9::::rE   c                    [        U [        [        45      (       a  U R                  $ [        U [        [
        45      (       d
   SU -  5       eU $ )Nz8Expecting a Class, Property, URIRef, or BNode.. not a %s)rz   r+   r   r{   r   r   r|   s    rA   r.   r.     sM    %(E*++%&%11 	
FN	
1 rE   c                v    [        U [        5      (       a  U R                  $ [        U [        5      (       d   eU $ r=   )rz   r+   r{   r   r|   s    rA   r7   r7     s3    %""%((((rE   c                d  ^ U c   eU(       Ga1  U(       a(  [        U 5      nU  Vs/ s H  n[        UT5      PM     nnO;[        [        TU 5      5      n[        TU 5       Vs/ s H  n[        UT5      PM     nnU[        R                  :X  Ga  / n/ nU H<  n[        U[        5      (       a  UR                  U5        M+  UR                  U5        M>     U(       a  U4S jn	[        U5      S:  a!  SSR                  [        X5      5      -   S-   n
O[        US   T5      n
U(       aD  [        U
5      S-   SR                  U Vs/ s H  n[        [        UT5      5      PM     sn5      -   $ U
$ SSR                  U Vs/ s H  n[        U5      PM     sn5      -   S-   $ U[        R                  :X  a1  SS	R                  U Vs/ s H  n[        U5      PM     sn5      -   S-   $ U[        R                  :X  a1  S
SR                  U Vs/ s H  n[        U5      PM     sn5      -   S-   $ U[        R                  :X  d   eGO[        R                  TR!                  U ["        R$                  S9;   Ga  ['        TR!                  U [        R(                  S95      S   nTR+                  U5      u  pnSR                  X/5      n[-        TR!                  U[.        R0                  S95      nU(       a  SU-  nTR!                  U [        R2                  S9 H  nSU< S[        UT5      < S3s  $    TR!                  U [        R4                  S9 H  nSU< S[        UT5      < S3s  $    TR!                  U [        R6                  S9 H  nSU< S[        UT5      < S3s  $    [        R8                  S[        R:                  S[        R<                  S0nTR?                  U ['        URA                  5       5      S45       H  u  nnnSU< SUU   < SU< S3s  $    ['        TR!                  U [        R                  S95      nU(       a  S[        US   T5      -  $ SR                  [B         Vs/ s H  nSU< S[B        U   < S3PM     sn5      nUS-   S-   n[E        S5      U 0nTRG                  USUS9 H(  u  nn[        U [        5      (       a  M  [        UTUS 9s  $     TR+                  U 5      u  pnSR                  X/5      n [-        [Q        U TS!9R0                  5      nU(       a  U$ U $ s  snf s  snf s  snf s  snf s  snf s  snf s  snf ! [H         aO    [        U [J        5      (       a  U RM                  5       s $ [        U [        5      (       d  U RN                  s $ U s $ f = f)"zv
Core serialization
thing is a Class and is processed as a subject
store is an RDFLib Graph to be queried about thing
Nc                P   > TR                  U 5      u  pnSR                  X/5      $ rq   )rs   rt   )rI   rw   rv   rx   stores       rA   castToQName%manchesterSyntax.<locals>.castToQName6  s*    -2-@-@-C*F88V$788rE      z( z AND  )r   z THAT z OR z{  z }subject	predicaterr   z'%s'z ONLY z VALUE z SOME MAXMINEQUALSz
( NOT %s )
zPREFIX z: <>z6
SELECT ?p ?bool WHERE {?class a owl:Class; ?p ?bool .z?bool rdf:first ?foo }z?classsparql)	processorinitBindingsbooleanru   ))iterr2   r   r	   intersectionOfrz   r   appendlenrt   mapstrunionOfoneOfcomplementOfr-   objectsr
   typern   
onPropertyrs   r   r   labelallValuesFromhasValuesomeValuesFrommaxCardinalityminCardinalitycardinalitytriples_choiceskeysr5   r   query	Exceptionr   n3r{   r   )!r}   r   r   transientListlivechildrenchildchildren	childlistnamedr   rw   rI   cproprv   rx   
propstringr   	onlyclassval	someclass
cardlookup_spocomplkprologqstrinitbboolpropcolqnames!    `                               rA   r2   r2     s    ;LDIJE5(6EHJH
5% 89L<Fue<T<T5 .<T   c(((IE%eV,,LL'$$U+	 &
 9 u:>!GLL[1H$IIDPF-eAh>FF"#!,,FOPiS!1!U!;<iP "MgllH+EHqCFH+EFFMM#&++x&@x!s1vx&@AADHH		!#((H#=HqCFH#=>>EEc.....	EMM%388ML	LEMM%3>>MJKAN!&!4!4T!:YXXv12
emmDDJJmGH%Ju@Q@QRI'13CIu3UVV S==#,,=GC(24DS%4PQQ Hu@R@RSI'13CIu3UVV T OOX


 --ud:??;L6Mt.TUHB1%/ABB V u8H8HIJE/a%@AAQAGAJ?QRGH&' 	
 (#U+"[[PU[VMHceV,,'UHEE W	M%*%8%8%?"FHHf01E eE/556LLs K4 Q ,F&@#=8 R  	M%''xxz!+5eS+A+A5##LuL		MsG   T3!T8T=
=U
U
U
/U%&U /V/!V/*V/.V/c              #     #    U R                  [        R                  [        R                  S9 H'  n[        U[        5      (       d  M  [	        U5      v   M)     g 7fN)r   object)subjectsr
   r   r	   r   rz   r   ru   r   s     rA   r$   r$     s;     ^^chhsyy^Aa  (N Bs   AA	Ac                       \ rS rSrS rS rSrg)TermDeletionHelperi  c                    Xl         g r=   r   )r@   r   s     rA   rB   TermDeletionHelper.__init__  s    	rE   c                   ^  U 4S jnU$ )Nc                j   > U R                   R                  U R                  TR                  S 45        g r=   )ru   remover{   r   )instr@   s    rA   _remover-TermDeletionHelper.__call__.<locals>._remover  s$    JJt		4@ArE   ri   )r@   fr   s   `  rA   rb   TermDeletionHelper.__call__  s    	B rE   r   Nrd   re   rf   rg   rB   rb   rh   ri   rE   rA   r   r     s    rE   r   c                  (   \ rS rSrSr\" 5       rS rSS jrS r	S r
S rS	 rSS
 jrSS jr\" \R"                  5      S 5       r\" \\\5      rSS jrSS jr\" \\5      rSS jr  SS jr\" \R4                  5      S 5       r\" \\\5      rSrg)r%   i  z=
A typed individual, the base class of the InfixOWL classes.
c                    U R                   R                  U R                  S S 45       H  nUR                  U5        M     g r=   )factoryGraphtriplesr{   addr@   ru   facts      rA   	serializeIndividual.serialize  s4    %%--td.KLDIIdO MrE   Nc                n   US L=(       a    U=(       d
    [        5       U l        Uc  U R                  U l        OX l        S U l        [        U R                  [         5      (       dA   U R                  R                  U R                  5      u  p4nSR                  X5/5      U l        g g ! [         a     g f = frq   )
r   _Individual__identifierr   ru   r   rz   r{   rs   rt   r   )r@   r{   ru   rw   rv   rx   s         rA   rB   Individual.__init__  s    &d2AzLUW=**DJJ
$//511)-)A)A$//)R&Y XXv&9:
 2  s   &?B' '
B43B4c                T    U R                   R                  SSU R                  45        g)zI
Remove references to this individual as an object in the
backing store.
Nru   r   r{   r@   s    rA   clearInDegreeIndividual.clearInDegree  s!    
 	

4t78rE   c                T    U R                   R                  U R                  SS45        g)z
Remove all statements to this individual as a subject in the
backing store. Note that this only removes the statements
themselves, not the blank node closure so there is a chance
that this will cause orphaned blank nodes to remain in the
graph.
Nr   r   s    rA   clearOutDegreeIndividual.clearOutDegree  s!     	

4??D$78rE   c                D    U R                  5         U R                  5         g)zH
Delete the individual from the graph, clearing the in and
out degrees.
N)r   r   r   s    rA   deleteIndividual.delete  s    
 	rE   c                    U R                   R                  SSU R                  45       H,  u  p#nU R                   R                  X#[	        U5      45        M.     U R                  5         g)a/  
Replace the individual in the graph with the given other,
causing all triples that refer to it to be changed and then
delete the individual.

```python
>>> g = Graph()
>>> b = Individual(OWL.Restriction, g)
>>> b.type = RDFS.Resource
>>> len(list(b.type))
1
>>> del b.type
>>> len(list(b.type))
0

```
N)ru   r   r{   r   r.   r   )r@   rJ   sr   _os        rA   replaceIndividual.replace  sQ    $ 

**D$+HIHA"JJNNA"3E":;< JrE   c              #     #    U R                   R                  U R                  [        R                  S9 H  nUv   M	     g 7fNr   )ru   r   r{   r
   r   r@   _ts     rA   	_get_typeIndividual._get_type  s1     **$$T__$QBH R   ?Ac                   U(       d  g [        U[        [        45      (       a@  U R                  R	                  U R
                  [        R                  [        U5      45        g U H_  n[        U[        [        45      (       d   eU R                  R	                  U R
                  [        R                  [        U5      45        Ma     g r=   )	rz   r%   r   ru   r   r{   r
   r   r.   )r@   kindr   s      rA   	_set_typeIndividual._set_type  s    dZ455JJNNDOOSXX7H7NOP!!j*%=>>>>

;LQ;OPQ rE   c                    g)z
```python
>>> g = Graph()
>>> b = Individual(OWL.Restriction, g)
>>> b.type = RDFS.Resource
>>> len(list(b.type))
1
>>> del b.type
>>> len(list(b.type))
0

```
Nri   r   s    rA   _delete_typeIndividual._delete_type       	rE   c                    U R                   $ r=   )r   r   s    rA   _get_identifierIndividual._get_identifier  s       rE   c           
        U(       d   eXR                   :w  Gab  U R                  R                  U R                   S S 45       VVVs/ s H	  u  p#nX44PM     nnnnU R                  R                  S S U R                   45       VVVs/ s H	  u  p#nX#4PM     nnnnU H,  u  pxU R                  R                  U R                   Xx45        M.     U H,  u  pU R                  R                  XU R                   45        M.     Xl         U R                  R	                  U VVs/ s H  u  pxXXR                  4PM     snn5        U R                  R	                  U V	Vs/ s H  u  pXXR                  4PM     snn	5        [        U[        5      (       d7   U R                  R                  U5      u  pnSR                  X/5      U l	        g g s  snnnf s  snnnf s  snnf s  snn	f ! [         a     g f = frq   )r   ru   r   r   addNrz   r   rs   rt   r   r   )r@   ir   r   r   oldstatements_outoldstatements_inp1o1s1rw   rv   rx   s                rA   _set_identifierIndividual._set_identifier  s   q!!!  $zz1143D3DdD2QR!RGA! R  !  $zz114t?P?P2QR RGA! R    ,

!!4#4#4b"=> ,*

!!24+<+<"=> + !JJOOCTUCTaR4CTUVJJOOCSTCSba4CSTU!U##)-)A)A!)D&Y XXv&9:
 $!  VT
  s*   G	GG
G
5G# #
G0/G0c              #     #    U R                   R                  U R                  [        R                  S9 H  nUv   M	     g 7fr   )ru   r   r{   r	   sameAsr   s     rA   _get_sameAsIndividual._get_sameAs  s1     **$$T__

$SBH Tr   c                   [        U[        [        45      (       a@  U R                  R	                  U R
                  [        R                  [        U5      45        g U H_  n[        U[        [        45      (       d   eU R                  R	                  U R
                  [        R                  [        U5      45        Ma     g r=   )	rz   r%   r   ru   r   r{   r	   r  r.   )r@   termr   s      rA   _set_sameAsIndividual._set_sameAs  s    
 dZ455JJNNDOOSZZ9J49PQR!!j*%=>>>>

=Nq=QRS rE   c                    g r=   ri   r   s    rA   _delete_sameAsIndividual._delete_sameAs*      rE   )__identifierru   r   NN)returnzIterable[_ObjectType])r   4Union[Individual, Identifier, Iterable[_ObjectType]])r  r   )r	  r   )r  r   )rd   re   rf   rg   __doc__r   r   r   rB   r   r   r   r   r   r   r   r
   r   r  propertyr  r  r{   r  r  r	   r  r  rh   ri   rE   rA   r%   r%     s     7L99,R ! "  Iy,7D!2 /?;J
TH
T 

# $ k;?FrE   r%   z'http://attempto.ifi.uzh.ch/ace_lexicon#c                  2  ^  \ rS rSrSr   SU 4S jjrS rS rS rS r	\
" \R                  5      S 5       r\" \\	\5      rS	 rS
 r\
" \R"                  5      S 5       r\" \\\5      rS rS r\
" \R*                  5      S 5       r\" \\\5      rSrU =r$ )r   i4  a  Terms in an OWL ontology with rdfs:label and rdfs:comment

Interface with ATTEMPTO (http://attempto.ifi.uzh.ch/site)

## Verbalisation of OWL entity IRIS

### How are OWL entity IRIs verbalized?

The OWL verbalizer maps OWL entity IRIs to ACE content words such
that

- OWL individuals map to ACE proper names (PN)
- OWL classes map to ACE common nouns (CN)
- OWL properties map to ACE transitive verbs (TV)

There are 6 morphological categories that determine the surface form
of an IRI:

- singular form of a proper name (e.g. John)
- singular form of a common noun (e.g. man)
- plural form of a common noun (e.g. men)
- singular form of a transitive verb (e.g. mans)
- plural form of a transitive verb (e.g. man)
- past participle form a transitive verb (e.g. manned)

The user has full control over the eventual surface forms of the IRIs
but has to choose them in terms of the above categories.
Furthermore,

- the surface forms must be legal ACE content words (e.g. they
  should not contain punctuation symbols);
- the mapping of IRIs to surface forms must be bidirectional
  within the same word class, in order to be able to (if needed)
  parse the verbalization back into OWL in a semantics preserving
  way.

### Using the lexicon

It is possible to specify the mapping of IRIs to surface forms using
the following annotation properties:

```
http://attempto.ifi.uzh.ch/ace_lexicon#PN_sg
http://attempto.ifi.uzh.ch/ace_lexicon#CN_sg
http://attempto.ifi.uzh.ch/ace_lexicon#CN_pl
http://attempto.ifi.uzh.ch/ace_lexicon#TV_sg
http://attempto.ifi.uzh.ch/ace_lexicon#TV_pl
http://attempto.ifi.uzh.ch/ace_lexicon#TV_vbg
```

For example, the following axioms state that if the IRI "#man" is used
as a plural common noun, then the wordform men must be used by the
verbalizer. If, however, it is used as a singular transitive verb,
then mans must be used.

```xml
<AnnotationAssertion>
    <AnnotationProperty IRI="http://attempto.ifi.uzh.ch/ace_lexicon#CN_pl"/>
    <IRI>#man</IRI>
    <Literal datatypeIRI="&xsd;string">men</Literal>
</AnnotationAssertion>

<AnnotationAssertion>
    <AnnotationProperty IRI="http://attempto.ifi.uzh.ch/ace_lexicon#TV_sg"/>
    <IRI>#man</IRI>
    <Literal datatypeIRI="&xsd;string">mans</Literal>
</AnnotationAssertion>
```
c                   > [         [        U ]  X5        U(       aN  U R                  5         U R                  U R                  U5      4/U R                  l        U(       a	  U/U l        g g g r=   )	superr   rB   setupACEAnnotationsr{   handleAnnotation	PN_sgpropextentr   )r@   r{   ru   nameAnnotationnameIsLabel	__class__s        rA   rB   AnnotatableTerms.__init__{  sb     	.zA$$&$"7"7"GH%DNN! ,-
  rE   c                F    [        U[        5      (       a  U$ [        U5      $ r=   )rz   r   )r@   r   s     rA   r'  !AnnotatableTerms.handleAnnotation  s     g..s@GCL@rE   c                   U R                   R                  S[        SS9  [        [        R                  [
        R                  U R                   S9U l        [        [        R                  [
        R                  U R                   S9U l	        [        [        R                  [
        R                  U R                   S9U l        [        [        R                  [
        R                  U R                   S9U l        [        [        R                  [
        R                  U R                   S9U l        [        [        R                   [
        R                  U R                   S9U l        g )NaceFoverride)baseTyperu   )ru   bindr   r+   PN_sgr	   AnnotationPropertyr(  CN_sg	CN_sgpropCN_pl	CN_plpropTV_sg	tv_sgpropTV_pl	tv_plpropTV_vbg
tv_vbgpropr   s    rA   r&  $AnnotatableTerms.setupACEAnnotations  s    

v6 "LL3#9#9

 "LL3#9#9

 "LL3#9#9

 "LL3#9#9

 "LL3#9#9

 #MMC$:$:$**
rE   c              #     #    U R                   R                  U R                  [        R                  S9 H  nUv   M	     g 7fr   )ru   r   r{   r   comment)r@   rD  s     rA   _get_commentAnnotatableTerms._get_comment  7     zz))OOt|| * 
G M
r   c                *   U(       d  g [        U[        5      (       a7  U R                  R                  U R                  [
        R                  U45        g U H9  nU R                  R                  U R                  [
        R                  U45        M;     g r=   )rz   r   ru   r   r{   r   rD  )r@   rD  r   s      rA   _set_commentAnnotatableTerms._set_comment  s]    gz**JJNNDOOT\\7CD

qAB rE   c                    g r=   ri   r   s    rA   _del_commentAnnotatableTerms._del_comment  r  rE   c              #     #    U R                   R                  U R                  [        R                  S9 H  nUv   M	     g 7fr   )ru   r   r{   r   seeAlso)r@   seealsos     rA   _get_seealsoAnnotatableTerms._get_seealso  rG  r   c                    U(       d  g U H9  nU R                   R                  U R                  [        R                  U45        M;     g r=   )ru   r   r{   r   rO  )r@   seealsosr   s      rA   _set_seealsoAnnotatableTerms._set_seealso  s1    AJJNNDOOT\\1=> rE   c                    g r=   ri   r   s    rA   _del_seealsoAnnotatableTerms._del_seealso  r  rE   c              #     #    U R                   R                  U R                  [        R                  S9 H  nUv   M	     g 7fr   )ru   r   r{   r   r   )r@   r   s     rA   
_get_labelAnnotatableTerms._get_label  s1     ZZ''4::'VEK Wr   c                *   U(       d  g [        U[        5      (       a7  U R                  R                  U R                  [
        R                  U45        g U H9  nU R                  R                  U R                  [
        R                  U45        M;     g r=   )rz   r   ru   r   r{   r   r   )r@   r   l_s      rA   
_set_labelAnnotatableTerms._set_label  s]    eZ((JJNNDOOTZZ?@

R@A rE   c                    g)z
```python
>>> g = Graph()
>>> b = Individual(OWL.Restriction,g)
>>> b.label = Literal('boo')
>>> len(list(b.label))
1
>>> del b.label
>>> len(list(b.label))
0

```
Nri   r   s    rA   _delete_labelAnnotatableTerms._delete_label  r  rE   )r;  r9  r(  r   r?  r=  rA  )NNF)rd   re   rf   rg   r!  rB   r'  r&  rE  rI  r   r   rD  rL  r"  rQ  rU  rO  rX  r[  r_  r   rb  rh   __classcell__r,  s   @rA   r   r   4  s    DR . A
BC % & |\<@G? % & |\<@GB 

# $  Z];ErE   r   c                  x   ^  \ rS rSrSrS
U 4S jjrS rS rS r\	" \
S   5      S 5       r\" \\\5      rS	rU =r$ )r*   i  zThe owl ontology metadatac                X  > [         [        U ]  X5        Uc  / OUU l        Uc  / OUU l        U R
                  [        R                  [        R                  4U R                  ;  aE  U R                  R                  U R
                  [        R                  [        R                  45        g g r=   )r%  r*   rB   importsrD  r{   r
   r   r	   ru   r   )r@   r{   rh  rD  ru   r,  s        rA   rB   Ontology.__init__  st    h&z9$_r'$_r'OOSXXs||4DJJFJJNNDOOSXXs||DE GrE   c                p    U R                   R                  U R                  [        R                  U45        g r=   )ru   setr{   r	   versionInfo)r@   versions     rA   
setVersionOntology.setVersion  s!    

'BCrE   c              #  x   #    U R                   R                  U R                  [        S   S9 H  nUv   M	     g 7f)Nrh  r   )ru   r   r{   r	   )r@   rm   s     rA   _get_importsOntology._get_imports  s7     ::%%OOs9~ & 
C I
s   8:c                    U(       d  g U H2  nU R                   R                  U R                  [        S   U45        M4     g )Nrh  )ru   r   r{   r	   )r@   rJ   r   s      rA   _set_importsOntology._set_imports
  s1    AJJNNDOOS^Q?@ rE   rh  c                    g r=   ri   r   s    rA   _del_importsOntology._del_imports  r  rE   )rD  rh  )NNNN)rd   re   rf   rg   r!  rB   rn  rq  rt  r   r	   rw  r"  rh  rh   rd  re  s   @rA   r*   r*     sJ    #FDA I' ( |\<@GrE   r*   c              #     #    [        U R                  [        R                  [        R
                  S95       H  n[        U5      v   M     g 7fr   )rk  r   r
   r   r	   r   r   s     rA   r   r     s3     #((399EFAh Gs   AAc              #  X  #    [        5       nU R                  S [        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  /45       H  u  p#nU[        R
                  [        R                  [        R                  [        R                  4;   a  [        R                  nO[        R                  nX!;  d  Mp  UR                  U5        [        X US9v   M     g 7f)Nru   r4  )rk  r   r
   r   r	   SymmetricPropertyFunctionalPropertyInverseFunctionalPropertyTransitivePropertyDatatypePropertyObjectPropertyr7  r   r+   )ru   	prevpropsr   _pr   bTypes         rA   r   r     s     I))HH%%&&--&&$$""&&	
q !!))""	
 
 &&E((EMM!1E::5s   DD*"D*c                  *    \ rS rSrS rSS jrS rSrg)r   i;  c                .    [        [        X-   5      5      $ r=   )r   r   r@   names     rA   r  ClassNamespaceFactory.term<  s    VDK())rE   Nc                $    U R                  U5      $ r=   )r  )r@   keydefaults      rA   __getitem__!ClassNamespaceFactory.__getitem__?  s    yy~rE   c                \    UR                  S5      (       a  [        eU R                  U5      $ )N__)
startswithAttributeErrorr  r  s     rA   __getattr__!ClassNamespaceFactory.__getattr__B  s%    ??4    99T?"rE   ri   r=   )rd   re   rf   rg   r  r  r  rh   ri   rE   rA   r   r   ;  s    *#rE   r   z0http://www.w3.org/2002/07/owl#resourcePropertiesc              #  J  #    [         R                  U R                  ;   a   [        U [        R
                  5      n U R
                  R                  U R                  [         R                  [         R                  /S45       HA  u  pn[        USS9n[        U[        5      (       a  [        U5       H  nUv   M	     M=  Uv   MC     g[        U [        R
                  5      n [        U [        5      (       aO  U  HH  n[        USS9n[        UR                  [        5      (       a  [        U5       H  nUv   M	     MD  Uv   MJ     gU R                    H>  n[        UR                  [        5      (       a  [        U5       H  nUv   M	     M:  Uv   M@     U R
                  R                  [#        U 5      [$        S45       HO  u  pn[        U[        5      (       a0  [        [        U[        R
                  5      5       H  nUv   M	     MK  Wv   MQ     g! [         a     gf = f7f)z
Takes a Class instance and returns a generator over the classes that
are involved in its definition, ignoring unnamed classes
NTskipOWLClassMembership)r	   r-   r   r   r%   r   r   r{   r   r   r   rz   r   r!   r   r   
subClassOfr.   r   )clsr   r  inner_class_idinner_class_c_clsr   s           rA   r!   r!   ]  s    
 #(("	C!8!89C*-*:*:*J*J#"3"3S5G5G!H$O+& $N4Pne44,[9  : &%+ Z445c<((T$?doou55,T2  3 J   #~~k44e<<,[9  : &%  . !--=="3'$?	 a'',Yq*:Q:Q-RS  T &%'  		s*   H#B%H EH#
H H#H  H#c                   S n[        U [        R                  5      n U R                   H  nU" U5        M     U R                  R                  U R                  [        R                  S45        U R                   H  nU" U5        M     U R                  R                  U R                  [        R                  S45        U R                  nU(       a>  U R                  R                  U R                  [        R                  S45        U" U5        [        U [        5      (       aT  U  H  nU" U5        M     U R                  5         U R                  R                  U R                  U R                  S45        gg)a  
Recursively clear the given class, continuing
where any related class is an anonymous class

```python
>>> EX = Namespace("http://example.com/")
>>> g = Graph()
>>> g.bind("ex", EX, override=False)
>>> Individual.factoryGraph = g
>>> classB = Class(EX.B)
>>> classC = Class(EX.C)
>>> classD = Class(EX.D)
>>> classE = Class(EX.E)
>>> classF = Class(EX.F)
>>> anonClass = EX.someProp @ some @ classD
>>> classF += anonClass
>>> list(anonClass.subClassOf)
[Class: ex:F ]
>>> classA = classE | classF | anonClass
>>> classB += classA
>>> classA.equivalentClass = [Class()]
>>> classB.subClassOf = [EX.someProp @ some @ classC]
>>> classA
( ex:E OR ex:F OR ( ex:someProp SOME ex:D ) )
>>> DeepClassClear(classA)
>>> classA
(  )
>>> list(anonClass.subClassOf)
[]
>>> classB
Class: ex:B SubClassOf: ( ex:someProp SOME ex:C )

>>> otherClass = classD | anonClass
>>> otherClass
( ex:D OR ( ex:someProp SOME ex:D ) )
>>> DeepClassClear(otherClass)
>>> otherClass
(  )
>>> otherClass.delete()
>>> list(g.triples((otherClass.identifier, None, None)))
[]

```
c                X    [        [        U 5      [        5      (       a  [        U 5        g g r=   )rz   r.   r   r"   )_classs    rA   deepClearIfBNode(DeepClassClear.<locals>.deepClearIfBNode  s"    '/776" 8rE   N)r   r%   r   r  ru   r   r{   r   equivalentClassr	   r   rz   r   clear	_operator)class_to_pruner  r   inverse_classs       rA   r"   r"     s1   \# ~z/F/FGN&& '!:!:DOOT RS++ ,!:!:C<O<OQU VW"//M##^%>%>@P@PRV$WX'.,//AQ  ##&&(@(@$G	
	 0rE   c                      \ rS rSrSrSrg)r'   i  zM
!!! warning "Deprecated"
    This class will be removed in version `7.0.0`.
ri   N)rd   re   rf   rg   r!  rh   ri   rE   rA   r'   r'     s    
 	rE   r'   c                       \ rS rSrS rS rSrg)r(   i  c                    Xl         g r=   msg)r@   r  s     rA   rB   MalformedClassError.__init__  s    rE   c                    U R                   $ r=   r  r   s    rA   __repr__MalformedClassError.__repr__  s    xxrE   r  N)rd   re   rf   rg   rB   r  rh   ri   rE   rA   r(   r(     s    rE   r(   c                p   US L =(       a    U R                   =(       d    UnUR                  [        U 5      [        R                  S9 GH  nU[
        R                  :X  Ga%  [        U 5      US.nUR                  [        U 5      S S 45       Hx  u  pEnU[        R                  :w  d  M  U[
        R                  :X  a  XcS'   M6  U[        R                  ;  a  ML  Xc[        UR                  [        [
        5      5      S   5      '   Mz     [        [        R                   Vs/ s H-  n[        UR                  [        [
        5      5      S   5      PM/     sn5      R                  U5      (       d  [        S5      e[        S
0 UD6s  $ UR                  [        U 5      [
        R                   [
        R"                  [
        R$                  /S 45       HF  u  pEnU[
        R$                  :X  a  ['        [        U 5      US9s  s  $ [)        [        U 5      XQS9s  s  $    [+        [        U 5      USS	9s  $    g s  snf )Nr   )r{   ru   r   zMalformed owl:Restrictionr   )operatorru   Tru   r  ri   )r   r   r.   r
   r   r	   r-   r   r   restrictionKindsr   splitrk  intersectionr(   r   r   r   r   r#   r   r   )	r   ru   r   kwargsr   r   r   r	  r   s	            rA   r   r     s   TM,ann5E&7&:chhO3??"$5a$85IF!MM+<Q+?t*LMq=CNN*/0|,K$@$@@$=>s1773s8#4R#89: N 5@5Q5QR5QQWWSX&r*+5QRl6"# **EFF((("22%a(''cii@	r 		>*+<Q+?uMM'(9!(<qVV *1-USWXX; P Ss   4H3
c                    ^  \ rS rSrSrS rS rS r           S'U 4S jjrS(S jr	S r
\" \R                  5      S	 5       r\" \	\
\5      r\R$                  4S
 jr\" \S 5      rS rS r\" \\5      rS rS rS rS rS rS rS rS rS r \" \RB                  5      S 5       r"\" \\ \"5      r!S r#S r$\" \%RL                  5      S 5       r'\" \#\$\'5      r&S r(S r)\" \%RT                  5      S 5       r+\" \(\)\+5      r*S r,S r-\" \%R\                  5      S  5       r/\" \,\-\/5      r.S! r0\" \05      r1S" r2S# r3S$ r4S)S% jr5S&r6U =r7$ )*r   i  u*  'General form' for classes:

The Manchester Syntax (supported in Protege) is used as the basis for the
form of this class

See: http://owl-workshop.man.ac.uk/acceptedLong/submission_9.pdf:

```
[Annotation]
‘Class:’ classID {Annotation
( (‘SubClassOf:’ ClassExpression)
| (‘EquivalentTo’ ClassExpression)
| (’DisjointWith’ ClassExpression)) }
```

Appropriate excerpts from OWL Reference:

".. Subclass axioms provide us with partial definitions: they represent
 necessary but not sufficient conditions for establishing class
 membership of an individual."

".. A class axiom may contain (multiple) owl:equivalentClass statements"

"..A class axiom may also contain (multiple) owl:disjointWith statements.."

"..An owl:complementOf property links a class to precisely one class
  description."
c                   U R                    H'  n[        X R                  5      R                  U5        M)     U R                   H'  n[        X R                  5      R                  U5        M)     U R
                   H'  n[        X R                  5      R                  U5        M)     U R                  (       a0  [        U R                  U R                  5      R                  U5        g g r=   )r  r   ru   r   r  disjointWithr   )r@   ru   cls      rA   
_serializeClass._serialize"  s    //Bb**%//6 "&&Bb**%//6 '##Bb**%//6 $d''4>>uE rE   c                    U R                   R                  U R                  S S 45       H  nUR                  U5        M     U R	                  U5        g r=   )ru   r   r{   r   r  r   s      rA   r   Class.serialize,  s>    JJ&&t'DEDIIdO FrE   c                   [        U[        5      (       a  Uu  p#OUnUnU(       a-  U R                  U R                  U5      4/U R                  l        U(       a.  U R                  U R                  U5      4/U R                  l        g g r=   )rz   tupler{   r'  r9  r)  r;  )r@   noun_annotations	cn_sgprop	cn_plprops       rA   setupNounAnnotationsClass.setupNounAnnotations1  s{    &..#3 Iy(I(I$"7"7	"BC%DNN! $"7"7	"BC%DNN! rE   c                ^  > [         [        U ]  XX5        U	(       a  U R                  U	5        U(       d  U R                  [
        R                  [        R                  4U R                  ;  a}  U R                  [
        R                  [        R                  4U R                  ;  aD  U R                  R                  U R                  [
        R                  [        R                  45        Uc  / OUU l        Uc  / OUU l        Uc  / OUU l        U(       a  XPl        Uc  / U l        g UU l        g r=   )r%  r   rB   r  r{   r
   r   r	   ru   r-   r   r  r  r  r   rD  )r@   r{   r  r  r  r   ru   r  rD  nounAnnotationsr*  r+  r,  s               rA   rB   Class.__init__A  s     	eT#J~S%%o6&#((CII6djjH#((COO<DJJNJJNNDOOSXXsyyAB * 2"
%4%<r/"."6BL ,$_r'rE   c              #     #    US L =(       a    U R                   =(       d    UR                  [        R                  U R                  S9 H  nUv   M	     g 7fr   )ru   r   r
   r   r{   )r@   ru   members      rA   _get_extentClass._get_extenta  sF     }3<uFFhht G 
F L
s   AAc                    U(       d  g U HB  nU R                   R                  [        U5      [        R                  U R
                  45        MD     g r=   )ru   r   r.   r
   r   r{   )r@   rJ   ms      rA   _set_extentClass._set_extentg  s7    AJJNN-a0#((DOOLM rE   c                    g r=   ri   r   s    rA   	_del_typeClass._del_typem  r  rE   c              #  j   #    U R                   R                  U R                  US9 H  nUv   M	     g 7fr   )ru   r   r{   )r@   r  
annotations      rA   _get_annotationClass._get_annotations  s/     **,,T__PT,UJ Vs   13c                    U $ r=   ri   )rI   s    rA   rK   Class.<lambda>w  s    QrE   c                N    [        S5      [        R                  U R                  4$ )NCLASS)r   r
   r   r{   r   s    rA   _get_extentqueryClass._get_extentqueryy  s    !388T__==rE   c                    g r=   ri   rO   s     rA   _set_extentqueryClass._set_extentquery|  s    rE   c                ,    [        U R                  5      $ )zU
>>> b = Class(OWL.Restriction)
>>> c = Class(OWL.Restriction)
>>> len(set([b,c]))
1
)hashr{   r   s    rA   __hash__Class.__hash__  s     DOO$$rE   c                ~    [        U[        5      (       d   [        U5      5       eU R                  UR                  :H  $ r=   )rz   r   reprr{   rO   s     rA   __eq__Class.__eq__  s3    %''4e4'%"2"222rE   c                D    [        U[        5      (       d   eU /Ul        U $ r=   )rz   r   r  rO   s     rA   __iadd__Class.__iadd__  s$    %'''' 6rE   c                    [        U[        5      (       d   eU R                  R                  [	        U5      [
        R                  U R                  45        U $ r=   )rz   r   ru   r   r.   r   r  r{   rO   s     rA   __isub__Class.__isub__  sA    %''''

,U3T__dooVWrE   c                    [        U S9$ )z0
Shorthand for Manchester syntax's not operator
)r   )r   r   s    rA   
__invert__Class.__invert__  s     $''rE   c                J    [        [        R                  X/U R                  S9$ )zj
Construct an anonymous class description consisting of the union of
this class and 'other' and return it
r  membersru   )r   r	   r   ru   rO   s     rA   __or__Class.__or__  s"    
 [[4-tzz
 	
rE   c                J    [        [        R                  X/U R                  S9$ )a_  
Construct an anonymous class description consisting of the
intersection of this class and 'other' and return it

Chaining 3 intersections

```python
>>> exNs = Namespace("http://example.com/")
>>> g = Graph()
>>> g.bind("ex", exNs, override=False)
>>> female = Class(exNs.Female, graph=g)
>>> human = Class(exNs.Human, graph=g)
>>> youngPerson = Class(exNs.YoungPerson, graph=g)
>>> youngWoman = female & human & youngPerson
>>> youngWoman  # doctest: +SKIP
ex:YoungPerson THAT ( ex:Female AND ex:Human )
>>> isinstance(youngWoman, BooleanClass)
True
>>> isinstance(youngWoman.identifier, BNode)
True

```
r  )r   r	   r   ru   rO   s     rA   __and__Class.__and__  s$    0 ''$djj
 	
rE   c              #     #    U R                   R                  U R                  [        R                  S9 H  n[        XR                   SS9v   M     g 7f)Nr   Tr  )ru   r   r{   r   r  r   r@   ancs     rA   _get_subclassofClass._get_subclassof  sC     ::%%OOt & 
C ::dKK
   AAc                    U(       d  g U HB  nU R                   R                  U R                  [        R                  [        U5      45        MD     g r=   )ru   r   r{   r   r  r.   r@   rJ   scs      rA   _set_subclassofClass._set_subclassof  s8    BJJNNDOOT__>OPR>STU rE   c                    g r=   ri   r   s    rA   _del_subclassofClass._del_subclassof  r  rE   c              #     #    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S9v   M     g 7fNr   r   )ru   r   r{   r	   r  r   )r@   ecs     rA   _get_equivalentclassClass._get_equivalentclass  sC     **$$OOs/B/B % 
B **--
   AAc                    U(       d  g U HB  nU R                   R                  U R                  [        R                  [        U5      45        MD     g r=   )ru   r   r{   r	   r  r.   r  s      rA   _set_equivalentclassClass._set_equivalentclass  s<    BJJNN#"5"57H7LM rE   c                    g r=   ri   r   s    rA   _del_equivalentclassClass._del_equivalentclass  r  rE   c              #     #    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S9v   M     g 7fr  )ru   r   r{   r	   r  r   )r@   ro   s     rA   _get_disjointwithClass._get_disjointwith  sC     **$$OOs/?/? % 
B **--
r  c                    U(       d  g U HB  nU R                   R                  U R                  [        R                  [        U5      45        MD     g r=   )ru   r   r{   r	   r  r.   )r@   rJ   r   s      rA   _set_disjointwithClass._set_disjointwith  s:    AJJNNDOOS-=-=?PQR?STU rE   c                    g r=   ri   r   s    rA   _del_disjointwithClass._del_disjointwith  r  rE   c                    [        U R                  R                  U R                  [        R
                  S95      nU(       d  g [        U5      S:X  a  [        US   U R                  S9$ [        [        U5      5      e)Nr   r   r   r   )	rn   ru   r   r{   r	   r   r   r   r   )r@   comps     rA   _get_complementofClass._get_complementof  sd    JJt#BRBRS
 Y!^a

33CI&&rE   c                    U(       d  g U R                   R                  U R                  [        R                  [        U5      45        g r=   )ru   r   r{   r	   r   r.   rO   s     rA   _set_complementofClass._set_complementof  s/    

)9)9;LU;STUrE   c                    g r=   ri   r   s    rA   _del_complementofClass._del_complementof  r  rE   c              #     #    [         R                  " U R                  U R                  5       H  nUv   M	     [	        U R
                  R                  [        R                  U R                  5      5      nU(       a  [        U R
                  R                  [        R                  U5      5      nU(       a  US   nOUnU R
                  R                  [        R                  U5       H&  n[        U[        5      (       d  M  [!        USS9v   M(     U R
                  R#                  U R                  [        R$                  5       HB  n['        U/U R
                  S9 H&  n[        U[        5      (       d  M  [!        USS9v   M(     MD     g7f)a  
computed attributes that returns a generator over taxonomic 'parents'
by disjunction, conjunction, and subsumption

```python
>>> from rdflib.util import first
>>> exNs = Namespace('http://example.com/')
>>> g = Graph()
>>> g.bind("ex", exNs, override=False)
>>> Individual.factoryGraph = g
>>> brother = Class(exNs.Brother)
>>> sister = Class(exNs.Sister)
>>> sibling = brother | sister
>>> sibling.identifier = exNs.Sibling
>>> sibling
( ex:Brother OR ex:Sister )
>>> first(brother.parents)
Class: ex:Sibling EquivalentTo: ( ex:Brother OR ex:Sister )
>>> parent = Class(exNs.Parent)
>>> male = Class(exNs.Male)
>>> father = parent & male
>>> father.identifier = exNs.Father
>>> list(father.parents)
[Class: ex:Parent , Class: ex:Male ]

```
r  Tr  r   N)	itertoolschainr  r  r   r   r   r
   r{   rn   transitive_subjectsrestr	   r   rz   r   r   r   r   r)   )r@   parentlinksiblingslistcollectionheaddisjointclassrdf_listr  s           rA   _get_parentsClass._get_parents  s(    8  oodoot7K7KLFL M T&&//		4??KL 1 1 E EchhPT UVL!-b!1!%!%!2!2!;!;^" mV44dKK	"
 ))11$//3CUCUVH)8*D<M<MNff--tDD O Ws   C=FA2F9Fc           	        U R                   [        R                  [        R                  4U R
                  ;   a  g[        U R                  5      nU R
                  R                  U R                   [        R                  [        R                  /S 45       H)  u  p#nUR                  [        X@R
                  US95        M+     U H  n  g   U R                  (       a  gg)NFr   T)r{   r
   r   r	   r-   ru   rn   r  r   r   r   r   r2   r   )r@   r  
_boolclassr   r3  _es         rA   isPrimitiveClass.isPrimitiveK  s    OOSXXs74::E$&&''+zz'A'A__s113;;?F(
#J8 II&xQGH	(

 B rE   c              #     #    U R                   R                  [        R                  U R                  S9 H  nUv   M	     g 7fr   )ru   r   r   r  r{   )r@   r   s     rA   subSumpteeIdsClass.subSumpteeIds[  s1     $$tt$WAG Xr   c                "    U R                  SSS9$ )NFT)fullnormalization)manchesterClassr   s    rA   r  Class.__repr__d  s    ##d#CCrE   c                   / n[        U R                  5      n[        U R                  5      nU R                  R	                  U R
                  [        R                  [        R                  /S45       H)  u  pgnUR                  [        XR                  US95        M+     [        U R                  5      n	U R                  n
U
(       a  U	R                  U
5        Sn[        U R                  R                  U R
                  [        R                  5      5      nU=(       a    SUS   -   S-   =(       d    SnU(       a  U(       a  SnOSnU Vs/ s H  n[!        U["        5      =(       a?    [!        U R
                  [$        5      =(       a    ['        [)        XR                  5      5      =(       d    [        [+        U5      U R                  5      PM     nnU(       a  S	U-  nUR                  S
UR-                  U Vs/ s H  n[/        U5      PM     sn5      -  5        U(       a  SUS   -   US'   U(       a  U Vs/ s HB  n[!        U[.        5      =(       a    U=(       d    [        [+        U5      U R                  5      PMD     nnU(       a  SU-  nUR                  SSR-                  U5      -  5        U(       a  SUS   -   US'   U	(       ac  UR                  SSR-                  U	 Vs/ s H"  n[        [+        U5      U R                  5      PM$     sn5      -  5        U(       a  SUS   -   US'   [        U R                  R                  U R
                  [        R0                  5      5      nU(       a[  U(       aT  U=(       a2    SU-  U=(       a    SUS   -  =(       d    S-   SR-                  U5      -   =(       d    SR-                  U5      nO>U=(       a    U=(       a    SUS   -  =(       d    S=(       d    SSR-                  U5      -   n[!        U R
                  [$        5      =(       a    S=(       d    SU R2                  -  U-   $ s  snf s  snf s  snf s  snf )9
Returns the Manchester Syntax equivalent for this class
Nr    (r   )z
                z, zPrimitive Type %szSubClassOf: %sz
    r  zA Defined Class %szEquivalentTo: %szDisjointWith %s
z
                 z
    ## %s ##z
    %sz . zSome Class z
Class: %s )rn   r  r  ru   r   r{   r	   r   r   r   r2   r  r   r   r   r   rz   r   r   r  r   r.   rt   r   rD  r   )r@   r?  r@  exprsr  r  r7  r   r3  ro   r   	klasskindr   scjoinr   nec_statementsnnec_suff_statementsdescr
klassdescrs                       rA   rA  Class.manchesterClassg  s    $//"$&&''+zz'A'A__s113;;?F(
#J8 II&xQGH	(

 $##$IIaL	TZZ''DE .#a.3.4"- 
 A 1e$ 3t631jj12C !!21!5tzzBC   
 /%7	LL 6;;/O1A/O#PP $uRy0b	
 	# A 1c" F#$5a$8$**EF 	   # #058	LL+dii8K.LLM$uRy0b	LL#',,QSTQSA%&7&:DJJGQST $uRy0b	TZZ''FGM $$y02Z%(28b:**U#$% ::e$   <4zE!H4:*

5))  t. )djj(	 	m
 0P
# Us   BQ	;Q:A	Q()Q)rD  r   r  r  r  )NNNNNNFNNNFr=   )FT)8rd   re   rf   rg   r!  r  r   r  rB   r  r  r   r
   r   r  r"  r)  r   r   r  r  r  r  extentQueryr  r  r  r  r  r  r  r  r  r  r  r  r  r	   r  r  r  r  r  r  r!  r$  r   r'  r4  parentsr9  r<  r  rA  rh   rd  re  s   @rA   r   r     s   :F
$ $:@N ! " k;	:F#'::  /;7J> +-=>K%3

(

8LV ( ) /J. ++, - 24HO.V (() * ,.?L	'V
 (() * ,.?L.E` |$G DT TrE   r   c                  `    \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rS rS rS rSrg)r)   i  Nc           
        U(       a  X0l         Uc  / OUnU(       a]  [        U R                   US   5      U l        U H8  nX@R                  ;  d  M  U R                  R                  [	        U5      5        M:     g [        U R                   [        5       U Vs/ s H  n[	        U5      PM     sn5      U l        U R                   R                  U R                  U R                  U R                  R                  45        g s  snf )Nr   )
ru   r   _rdfListr   r.   r   r   r{   r  rv   )r@   r3  r  ru   r  r  s         rA   rB   OWLRDFListProxy.__init__  s    J"W&tzz8A;?DM!.MM(():6)BC " '

EGG%LGq&7&:G%LDM
 JJNNDOOT^^T]]=N=NOP	 &Ms   C>c                F   [        U[        5      (       d%   [        U5      [        [        U5      5      -   5       e[        U[        5      (       a:  [        U 5      nU[        U5      :w  a  g[        U5       H  nX   X   :w  a    g  g   gU R                  UR                  :H  $ )zW
Equivalence of boolean class constructors is determined by
equivalence of its members
FTN)rz   r   r  r   r   r   ranger{   )r@   rJ   lengthidxs       rA   r  OWLRDFListProxy.__eq__  s    
 %''HetDK7H)HH'e\**YFU# =CyEJ.$ ) ??e&6&666rE   c                ,    [        U R                  5      $ r=   )r   rU  r   s    rA   __len__OWLRDFListProxy.__len__  s    4==!!rE   c                J    U R                   R                  [        U5      5      $ r=   )rU  indexr.   r@   items     rA   r`  OWLRDFListProxy.index  s    }}""#4T#:;;rE   c                     U R                   U   $ r=   rU  r@   r  s     rA   r  OWLRDFListProxy.__getitem__  s    }}S!!rE   c                4    [        U5      U R                  U'   g r=   )r.   rU  )r@   r  r9   s      rA   __setitem__OWLRDFListProxy.__setitem__  s    .u5crE   c                    U R                   U	 g r=   re  rf  s     rA   __delitem__OWLRDFListProxy.__delitem__  s    MM#rE   c                8    U R                   R                  5         g r=   )rU  r  r   s    rA   r  OWLRDFListProxy.clear  s    rE   c              #  :   #    U R                    H  nUv   M	     g 7fr=   re  ra  s     rA   __iter__OWLRDFListProxy.__iter__  s     MMDJ "s   c                L    U R                    H  nU[        U5      :X  d  M    g   g)Nr   r   )rU  r.   )r@   rb  r	  s      rA   __contains__OWLRDFListProxy.__contains__  s&    A%d++  rE   c                :    U R                   R                  U5        g r=   )rU  r   ra  s     rA   r   OWLRDFListProxy.append   s    T"rE   c                N    U R                   R                  [        U5      5        U $ r=   )rU  r   r.   rO   s     rA   r  OWLRDFListProxy.__iadd__  s    .u56rE   )rU  ru   r  )rd   re   rf   rg   rB   r  r]  r`  r  ri  rl  r  rq  rt  r   r  rh   ri   rE   rA   r)   r)     s?    Q"7("<"6#rE   r)   c                  L    \ rS rSrSr\R                  rS rS	S jr	S r
S rSrg)
r#   i  a'  Class for owl:oneOf forms:

OWL Abstract Syntax is used

axiom ::= 'EnumeratedClass('
    classID ['Deprecated'] { annotation } { individualID } ')'

```python
>>> exNs = Namespace("http://example.com/")
>>> g = Graph()
>>> g.bind("ex", exNs, override=False)
>>> Individual.factoryGraph = g
>>> ogbujiBros = EnumeratedClass(exNs.ogbujicBros,
...                              members=[exNs.chime,
...                                       exNs.uche,
...                                       exNs.ejike])
>>> ogbujiBros  # doctest: +SKIP
{ ex:chime ex:uche ex:ejike }
>>> col = Collection(g, first(
...    g.objects(predicate=OWL.oneOf, subject=ogbujiBros.identifier)))
>>> sorted([g.qname(item) for item in col])
['ex:chime', 'ex:ejike', 'ex:uche']
>>> print(g.serialize(format='n3'))  # doctest: +SKIP
@prefix ex: <http://example.com/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
<BLANKLINE>
ex:ogbujicBros a owl:Class;
    owl:oneOf ( ex:chime ex:uche ex:ejike ) .
<BLANKLINE>
<BLANKLINE>

```
c                    gNFri   r   s    rA   r9  EnumeratedClass.isPrimitive.      rE   Nc                    [         R                  XUS9  Uc  / OUn[        U R                  R	                  [
        R                  U R                  S95      n[        R                  XU5        g )Nr   r   r   )	r   rB   rn   ru   r   r	   r   r{   r)   )r@   r{   r  ru   rdfLists        rA   rB   EnumeratedClass.__init__1  sX    tu5"WJJDOOL
 	  8rE   c                h    [        U R                  R                  U R                  U R                  S9$ rD  r   )r2   rU  rv   ru   r  r   s    rA   r  EnumeratedClass.__repr__9  s%       1 14::t~~VVrE   c                   [        U[        5       5      nU R                   H8  nUR                  U5        [	        X0R
                  5      R                  U5        M:     UR                  U R                  U R                  UR                  45        U R
                  R                  U R                  S S 45       H*  u  pEnXPR                  :w  d  M  UR                  XEU45        M,     U R                  U5        g r=   r   r   rU  r   r   ru   r   r   r{   r  rv   r   r  r@   ru   
clonedlistr  r   r   r   s          rA   r   EnumeratedClass.serialize?  s    uw/
--Bb!b**%//6   			4??DNNJNNCDzz))4??D$*GHGA!NN"		1)$ I 	rE   ri   )NNN)rd   re   rf   rg   r!  r	   r   r  r9  rB   r  r   rh   ri   rE   rA   r#   r#     s(    !F 		I9W
rE   r#   c                  $    \ rS rSrSrS rS rSrg)BooleanClassExtentHelperiO  a/  
```python
>>> testGraph = Graph()
>>> Individual.factoryGraph = testGraph
>>> EX = Namespace("http://example.com/")
>>> testGraph.bind("ex", EX, override=False)
>>> fire = Class(EX.Fire)
>>> water = Class(EX.Water)
>>> testClass = BooleanClass(members=[fire, water])
>>> testClass2 = BooleanClass(
...     operator=OWL.unionOf, members=[fire, water])
>>> for c in BooleanClass.getIntersections():
...     print(c)  # doctest: +SKIP
( ex:Fire AND ex:Water )
>>> for c in BooleanClass.getUnions():
...     print(c) #doctest: +SKIP
( ex:Fire OR ex:Water )

```
c                    Xl         g r=   r  )r@   r  s     rA   rB   !BooleanClassExtentHelper.__init__e  rD   rE   c                   ^  U 4S jnU$ )Nc               3     >#    [         R                  R                  TR                  5       H  n [	        U TR                  S9v   M     g 7f)Nr  )r%   r   r   r  r   )r   r@   s    rA   
_getExtent5BooleanClassExtentHelper.__call__.<locals>._getExtenti  s7     ,,55dmmD"1t}}== Es   AAri   )r@   r   r  s   `  rA   rb   !BooleanClassExtentHelper.__call__h  s    	> rE   r  N)rd   re   rf   rg   r!  rB   rb   rh   ri   rE   rA   r  r  O  s    *!rE   r  c                       \ rS rSrS rS rSrg)r   ip  c                    Xl         g r=   _callfn)r@   anycallables     rA   rB   Callable.__init__q  s    "rE   c                &    U R                   " U0 UD6$ r=   r  )r@   argsr  s      rA   rb   Callable.__call__t  s    ||T,V,,rE   r  Nr   ri   rE   rA   r   r   p  s    #-rE   r   c                      \ rS rSrSr\" \R                  5      \S 5       5       r	\" \	5      r	\" \R                  5      \S 5       5       r\" \5      rS\R                  SS4S jrS rS rS	 rS
 rS rS rSrg)r   ix  z`
See: http://www.w3.org/TR/owl-ref/#Boolean

owl:complementOf is an attribute of Class, however
c                     g r=   ri   ri   rE   rA   getIntersectionsBooleanClass.getIntersections       	rE   c                     g r=   ri   ri   rE   rA   	getUnionsBooleanClass.getUnions  r  rE   Nc                4   Ucp  / nUR                  U[        R                  [        R                  /S 45       H  u  pgnUR	                  U5        UnM     [        U5      S:X  d   [        U5      5       e[        R                  XUS9  U[        R                  [        R                  4;   d   [        U5      5       eX l
        [        U R                  R                  X R                  S95      n	U(       a  U	(       a   S5       e[        R                  X	U5        g )Nr   r   r  z-This is a previous boolean class description.)r   r	   r   r   r   r   r  r   rB   r   r  rn   ru   r   r{   r)   )
r@   r{   r  r  ru   propsr   r   r   r3  s
             rA   rB   BooleanClass.__init__  s     E"22c00#++>E	r Q	
 u:?/DK/?tu5C..<<Kc(mK<!

**X*WXx	;:	;'  9rE   c                V    [        U R                  [        U 5      U R                  S9nU$ )z
Create a copy of this class
r  )r   r  rn   ru   )r@   copy_of_classs     rA   copyBooleanClass.copy  s)     %^^T$Ztzz
 rE   c                   [        U[        5       5      nU R                   H8  nUR                  U5        [	        X0R
                  5      R                  U5        M:     UR                  U R                  U R                  UR                  45        U R
                  R                  U R                  S S 45       H*  u  pEnXPR                  :w  d  M  UR                  XEU45        M,     U R                  U5        g r=   r  r  s          rA   r   BooleanClass.serialize  s    uw/
--Bb!b**%//6   			4??DNNJNNCDzz))4??D$*GHGA!NN"		1)$ I 	rE   c                    gr|  ri   r   s    rA   r9  BooleanClass.isPrimitive  r~  rE   c                >   XR                   :w  d   S5       eU R                  R                  U R                  U R                   U R                  R
                  45        U R                  R                  U R                  XR                  R
                  45        Xl         g)a  
Converts a unionOf / intersectionOf class expression into one
that instead uses the given operator

```python
>>> testGraph = Graph()
>>> Individual.factoryGraph = testGraph
>>> EX = Namespace("http://example.com/")
>>> testGraph.bind("ex", EX, override=False)
>>> fire = Class(EX.Fire)
>>> water = Class(EX.Water)
>>> testClass = BooleanClass(members=[fire,water])
>>> testClass
( ex:Fire AND ex:Water )
>>> testClass.changeOperator(OWL.unionOf)
>>> testClass
( ex:Fire OR ex:Water )
>>> try:
...     testClass.changeOperator(OWL.unionOf)
... except Exception as e:
...     print(e)  # doctest: +SKIP
The new operator is already being used!

```
z'The new operator is already being used!N)r  ru   r   r{   rU  rv   r   )r@   newOperators     rA   changeOperatorBooleanClass.changeOperator  sm    4 nn,W.WW,

4??DNNDMM<M<MNO

mm6G6GHI$rE   c                    [        [        U R                  [        5      (       a  U R                  R                  O	[        5       U R                  U R                  S9$ r  )r2   rz   rU  r   rv   r   ru   r  r   s    rA   r  BooleanClass.__repr__  s@      !+DMM:!F!FDMMEGJJNN
 	
rE   c                    U R                   [        R                  :X  d   eU R                  R	                  [        U5      5        U $ )z)
Adds other to the list and returns self
)r  r	   r   rU  r   r.   rO   s     rA   r  BooleanClass.__or__  s7     ~~,,,.u56rE   )r  )rd   re   rf   rg   r!  r  r	   r   r   r  r   r  rB   r  r   r9  r  r  r  rh   ri   rE   rA   r   r   x  s     c001  2   01ckk*  + #I (:(:DPT:(%>
rE   r   c                    g)z^
TODO: implement this function

DisjointClasses(' description description { description } ')'
Nri   )r  s    rA   r   r     s     	rE   c                    ^  \ rS rSrSr\R                  \R                  \R                  \R                  \R                  \R                  /r        S U 4S jjrS rS rS rS rS rS	 r\" \R*                  5      S
 5       r\" \\\5      rS rS r\" \R                  5      S 5       r\" \\\5      rS rS r\" \R                  5      S 5       r\" \\\5      rS rS r\" \R                  5      S 5       r \" \\\ 5      rS r!S r"\" \R                  5      S 5       r#\" \!\"\#5      r	S r$S r%\" \R                  5      S 5       r&\" \$\%\&5      r
S r'S r(\" \R                  5      S 5       r)\" \'\(\)5      rS r*S r+Sr,U =r-$ )!r-   i  z
```
restriction ::= 'restriction('
datavaluedPropertyID dataRestrictionComponent
{ dataRestrictionComponent } ')'
| 'restriction(' individualvaluedPropertyID
individualRestrictionComponent
{ individualRestrictionComponent } ')'
```
c
                  > Uc
  [        5       OUn[        [        U ]  XSS9  U R                  [
        R                  [        U5      4U;  a5  UR                  U R                  [
        R                  [        U5      45        Xl        U[
        R                  4U[
        R                  4U[
        R                  4U[
        R                  4U[
        R                  4U[
        R                  4/n
U
 VVs/ s H  u  pUc  M
  X4PM     nnn[        U5      (       d  [!        S5      eUR#                  5       u  pXl        ['        U[(        5      (       a  Xl        OZ['        U[,        5      (       a  [/        U5      U l        O4[1        U R2                  R5                  U R                  U5      5      U l        U R                  UU R*                  4U R2                  ;  a1  U R2                  R                  U R                  XR*                  45        U R*                  c   [-        U R                  5      5       eU R                  [6        R8                  [
        R                  4U R2                  ;  a  U R2                  R                  U R                  [6        R8                  [
        R                  45        U R2                  R;                  U R                  [6        R8                  [
        R,                  45        g g s  snnf )NTr  z{Missing value. One of: allValuesFrom, someValuesFrom,value, cardinality, maxCardinality or minCardinalitymust have a value.)r   r%  r-   rB   r{   r	   r   r7   r   r   r   r   r   r   r   r   
ValueErrorpoprestrictionTyperz   r   restrictionRanger   r.   r   ru   r   r
   r   r   )r@   r   ru   r   r   r9   r   r   r   r{   restr_typesr	  otermvalid_restr_propsrestriction_rangerestriction_typer,  s                   rA   rB   Restriction.__init__
  sd    !=ek4)D 	* 	
 OONN ,
 	
 II#..2Fz2RS %C--.S//0CLL!#//*S//0S//0
 ;FW+JQZaZ+W$%%% 
 /@.C.C.E+/'44$5!)511$56G$HD! %*

""4??4DE%D!
 OO!!
 	
 JJNNDOO-=?T?TUV$$0H%2HH0OOSXXs7tzzIJJNNDOOSXXsGHJJt#))DE J5 Xs   5	K7K7c                ~   [        U R                  U R                  SS9R                  U5        U R                  R	                  U R
                  SS45       Hc  u  p#nUR                  X#U45        U[        R                  [        R                  4;   d  M?  [        X@R                  5      R                  U5        Me     g)a  
```python
>>> g1 = Graph()
>>> g2 = Graph()
>>> EX = Namespace("http://example.com/")
>>> g1.bind("ex", EX, override=False)
>>> g2.bind("ex", EX, override=False)
>>> Individual.factoryGraph = g1
>>> prop = Property(EX.someProp, baseType=OWL.DatatypeProperty)
>>> restr1 = (Property(
...    EX.someProp,
...    baseType=OWL.DatatypeProperty)) @ some @ (Class(EX.Foo))
>>> restr1  # doctest: +SKIP
( ex:someProp SOME ex:Foo )
>>> restr1.serialize(g2)
>>> Individual.factoryGraph = g2
>>> list(Property(
...     EX.someProp,baseType=None).type
... ) #doctest: +NORMALIZE_WHITESPACE +SKIP
[rdflib.term.URIRef(
    'http://www.w3.org/2002/07/owl#DatatypeProperty')]

```
Nr{  )r+   r   ru   r   r   r{   r   r	   r   r   r   )r@   ru   r   r   r   s        rA   r   Restriction.serializeI  s    2 	

TBLLUSzz))4??D$*GHGA!IIqQi S&&(:(:;;!ZZ(2259 IrE   c                    gr|  ri   r   s    rA   r9  Restriction.isPrimitiveh  r~  rE   c                D    [        U R                  U R                  45      $ r=   )r  r   r  r   s    rA   r  Restriction.__hash__k  s    T__d&;&;<==rE   c                   [        U[        5      (       d%   [        U5      [        [        U5      5      -   5       e[        U[        5      (       a9  UR
                  U R
                  :H  =(       a    UR                  U R                  :H  $ g)zr
Equivalence of restrictions is determined by equivalence of the
property in question and the restriction 'range'
F)rz   r   r  r   r-   r   r  r  rO   s     rA   r  Restriction.__eq__n  sq    
 %''HetDK7H)HH'e[))  DOO3 E++t/D/DD rE   c                ~    [        U R                  R                  U R                  [        R
                  S95      S   $ )Nr   r   )rn   ru   r   r{   r	   r   r   s    rA   _get_onpropertyRestriction._get_onproperty}  s6    JJt#..Q

 	rE   c                    U(       d  g U R                   [        R                  [        U5      4nX R                  ;   a  g U R                  R                  U5        g r=   )r{   r	   r   r7   ru   rk  )r@   r   triples      rA   _set_onpropertyRestriction._set_onproperty  s?    //3>>3G3MNZZJJNN6"rE   c                    g r=   ri   r   s    rA   _del_onpropertyRestriction._del_onproperty  r  rE   c                    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S9s  $    g r  )ru   r   r{   r	   r   r   r@   r	  s     rA   _get_allvaluesfromRestriction._get_allvaluesfrom  sE    ##OOs/@/@ $ 
A **--
 rE   c                    U(       d  g U R                   [        R                  [        U5      4nX R                  ;   a  g U R                  R                  U5        g r=   )r{   r	   r   r.   ru   rk  r@   rJ   r  s      rA   _set_allvaluesfromRestriction._set_allvaluesfrom  sA    //3#4#46G6NOZZJJNN6"rE   c                    g r=   ri   r   s    rA   _del_allvaluesfromRestriction._del_allvaluesfrom  r  rE   c                    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S9s  $    g r  )ru   r   r{   r	   r   r   r  s     rA   _get_somevaluesfromRestriction._get_somevaluesfrom  E    ##OOs/A/A $ 
A **--
 rE   c                    U(       d  g U R                   [        R                  [        U5      4nX R                  ;   a  g U R                  R                  U5        g r=   )r{   r	   r   r.   ru   rk  r  s      rA   _set_somevaluesfromRestriction._set_somevaluesfrom  A    //3#5#57H7OPZZJJNN6"rE   c                    g r=   ri   r   s    rA   _del_somevaluesfromRestriction._del_somevaluesfrom  r  rE   c                    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S9s  $    g r  )ru   r   r{   r	   r   r   r  s     rA   _get_hasvalueRestriction._get_hasvalue  s;    ##DOOs||#TA**-- UrE   c                    U(       d  g U R                   [        R                  [        U5      4nX R                  ;   a  g U R                  R                  U5        g r=   )r{   r	   r   r.   ru   rk  r  s      rA   _set_hasvalueRestriction._set_hasvalue  s?    //3<<1B51IJZZJJNN6"rE   c                    g r=   ri   r   s    rA   _del_hasvalueRestriction._del_hasvalue  r  rE   c                    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S9s  $    g r  )ru   r   r{   r	   r   r   r  s     rA   _get_cardinalityRestriction._get_cardinality  s;    ##DOOs#WA**-- XrE   c                    U(       d  g U R                   [        R                  [        U5      4nX R                  ;   a  g U R                  R                  U5        g r=   )r{   r	   r   r/   ru   rk  r  s      rA   _set_cardinalityRestriction._set_cardinality  s>    //3??K4FGZZJJNN6"rE   c                    g r=   ri   r   s    rA   _del_cardinalityRestriction._del_cardinality  r  rE   c                    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S9s  $    g r  )ru   r   r{   r	   r   r   r  s     rA   _get_maxcardinalityRestriction._get_maxcardinality  r  rE   c                    U(       d  g U R                   [        R                  [        U5      4nX R                  ;   a  g U R                  R                  U5        g r=   )r{   r	   r   r/   ru   rk  r  s      rA   _set_maxcardinalityRestriction._set_maxcardinality  s@    //3#5#5{57IJZZJJNN6"rE   c                    g r=   ri   r   s    rA   _del_maxcardinalityRestriction._del_maxcardinality  r  rE   c                    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S9s  $    g r  )ru   r   r{   r	   r   r   r  s     rA   _get_mincardinalityRestriction._get_mincardinality  r  rE   c                    U(       d  g U R                   [        R                  [        U5      4nX R                  ;   a  g U R                  R                  U5        g r=   )r{   r	   r   r.   ru   rk  r  s      rA   _set_mincardinalityRestriction._set_mincardinality
  r  rE   c                    g r=   ri   r   s    rA   _del_mincardinalityRestriction._del_mincardinality  r  rE   c                    U R                   R                  U R                  U R                  S 45       H'  u  pnUR	                  [        [        5      5      S   s  $    g )Nr  )ru   r   r{   r  r  r   r	   )r@   r   r   r   s       rA   restrictionKindRestriction.restrictionKind  sR    zz11__d33T:
GA!
 773s8$R((
 rE   c                B    [        U R                  U R                  5      $ )z?
Returns the Manchester Syntax equivalent for this restriction
)r2   r{   ru   r   s    rA   r  Restriction.__repr__$  s      <<rE   )r   r  r  )NNNNNNNN).rd   re   rf   rg   r!  r	   r   r   r   r   r   r   r  rB   r   r9  r  r  r  r  r   r   r  r"  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  rh   rd  re  s   @rA   r-   r-     s+   	 	 =F~:>>
# ' ( /J# ))* + .0BM# **+ , 02EN
# % & }mDH
# ( ) +-=?OPK# **+ , 02EN# **+ , 02EN= =rE   r-   c                *    [        XR                  US9$ )N)ru   r   r-   ru   r   r  s     rA   rK   rK   /  s    TfUrE   c                *    [        XR                  US9$ )N)ru   r   r  r  s     rA   rK   rK   2  s    TVTrE   c                *    [        X R                  US9$ )N)ru   r   r  r  s     rA   rK   rK   5      TFSrE   c                *    [        X R                  US9$ )N)ru   r   r  r  s     rA   rK   rK   8  r  rE   c                *    [        X R                  US9$ )N)ru   r   r  r  s     rA   rK   rK   ;  s    TPrE   c                *    [        X R                  US9$ )N)ru   r9   r  r  s     rA   rK   rK   =  s    ;t::V#TrE   zh
%s( %s { %s }
%s
{ 'super(' datavaluedPropertyID ')'} ['Functional']
{ domain( %s ) } { range( %s ) } )c                    ^  \ rS rSrSrS rSS\R                  SSSSSSSSSS4U 4S jjrS r	SS jr
S	 r\" \
\5      rS
 rS rS r\" \R&                  5      S 5       r\" \\\5      rS rS r\" \R.                  5      S 5       r\" \\\5      rS rS r\" \R6                  5      S 5       r\" \\\5      rS rS r\" \R>                  5      S 5       r \" \\\ 5      rS r!Sr"U =r#$ )r+   iG  a  
```
axiom ::= 'DatatypeProperty(' datavaluedPropertyID ['Deprecated']
            { annotation }
            { 'super(' datavaluedPropertyID ')'} ['Functional']
            { 'domain(' description ')' } { 'range(' dataRange ')' } ')'
            | 'ObjectProperty(' individualvaluedPropertyID ['Deprecated']
            { annotation }
            { 'super(' individualvaluedPropertyID ')' }
            [ 'inverseOf(' individualvaluedPropertyID ')' ] [ 'Symmetric' ]
            [ 'Functional' | 'InverseFunctional' |
            'Functional' 'InverseFunctional' |
            'Transitive' ]
            { 'domain(' description ')' } { 'range(' description ')' } ')
```
c                   [        U[        5      (       a  Uu  p#nOUnUnUnU(       a-  U R                  U R                  U5      4/U R                  l        U(       a-  U R                  U R                  U5      4/U R                  l        U(       a.  U R                  U R                  U5      4/U R                  l        gg)a  OWL properties map to ACE transitive verbs (TV)

There are 6 morphological categories that determine the surface form
of an IRI:

- singular form of a transitive verb (e.g. mans)
- plural form of a transitive verb (e.g. man)
- past participle form a transitive verb (e.g. manned)
- http://attempto.ifi.uzh.ch/ace_lexicon#TV_sg
- http://attempto.ifi.uzh.ch/ace_lexicon#TV_pl
- http://attempto.ifi.uzh.ch/ace_lexicon#TV_vbg
N)rz   r  r{   r'  r=  r)  r?  rA  )r@   verb_annotationsr=  r?  tv_vbgs        rA   setupVerbAnnotationsProperty.setupVerbAnnotationsY  s     &..+;(I&(I(I%F$"7"7	"BC%DNN! $"7"7	"BC%DNN! '+8M8Mf8U&V%WDOO" rE   NFc                6  > [         [        U ]  XX5        U(       a  U R                  U5        [	        U R
                  [        5      (       a   eUc7  [        [        U R
                  U R                  S9R                  5      U l        OgU R
                  [        R                  U4U R                  ;  a6  U R                  R                  U R
                  [        R                  U45        X0l        X@l        Xpl        XPl        X`l        U
c  / U l        g U
U l        g )Nr   )r%  r+   rB   r$  rz   r{   r   r   r%   ru   r   	_baseTyper
   r   subPropertyOf	inverseOfdomainrX  rD  )r@   r{   ru   r4  r(  r*  rX  r)  	otherTypeequivalentPropertyrD  verbAnnotationsr*  r+  r,  s                 rA   rB   Property.__init__x  s      	h&z.V%%o6doou5555":dooTZZ#P#U#UVDN84DJJF

8DE%N*"
$_r'rE   c                   U R                   R                  U R                  S S 45       H  nUR                  U5        M     [        R
                  " U R                  U R                  5       H  nUR                  U5        M     [        R
                  " U R                  U R                  5       H'  n[        X@R                   5      R                  U5        M)     g r=   )ru   r   r{   r   r*  r+  r(  r)  r   r*  rX  r   )r@   ru   r   r   r   s        rA   r   Property.serialize  s    JJ&&t'DEDIIdO F!3!3T^^DAKK Edjj9Aa$..u5 :rE   c              #     #    US L =(       a    U R                   =(       d    UR                  S U R                  S 45       H  nUv   M	     g 7fr=   )ru   r   r{   )r@   ru   r  s      rA   r  Property._get_extent  sA     }3<uEE4??D)
F L
s   A	Ac                x    U(       d  g U H,  u  p#U R                   R                  X R                  U45        M.     g r=   )ru   r   r{   )r@   rJ   subjobjs       rA   r  Property._set_extent  s-    IDJJNND//378 rE   c                   / n[         R                  U R                  ;   Ga  UR                  SU R                  < S[        U R                  5      =(       a    [        U R                  5      =(       d    S< S35        [        U R                  5      (       a  [        [        U R                  5      R                  5      nU(       a:  UR                  U R                  :X  a   [        U R                  5      R                  nO[        [        U R                  5      5      nUR                  SU< S[         R                  U R                  ;   =(       a    S=(       d    S< 35        U R                  R                  U R                  [        R                  [         R                  [         R                  [         R                   /45       H?  u  pEnUR                  [#        UR%                  [#        [         5      5      S   5      5        MA     OUR                  S	U R                  < S
[        U R                  5      =(       a    [        U R                  5      =(       d    S< 35        U R                  R'                  U R                  [        R                  [         R                  45       H  u  pEnUR                  S5        M     S nUR                  S
R)                  U R*                   Vs/ s H  nSU" XR                  5      -  PM     sn5      5        UR                  S
R)                  U R,                   V	s/ s H  n	SU" XR                  5      -  PM     sn	5      5        UR                  S
R)                  U R.                   V
s/ s H  n
SU" XR                  5      -  PM     sn
5      5        SR)                  U Vs/ s H  o(       d  M  UPM     sn5      nUS-  nU$ s  snf s  sn	f s  sn
f s  snf )NzObjectProperty( z annotation(rE  rG  z  inverseOf( r   z
 Symmetricr  zDatatypeProperty( r   z   Functionalc                P   [        U 5      n[        U[        5      (       a  U $ UR                  [        5      (       a  [        U 5      $ [        UR                  U[        R                  [        R                  /S 45      5      (       a  [        U 5      $ [        U R                  5      $ r=   )r.   rz   r   r  r   r   r   r   r	   r   r   r  r   )r  gnormalized_names      rA   canonicalName(Property.__repr__.<locals>.canonicalName  s    /5O/511 ++C004y !!$s{{C4F4F&GN 
 Dz!4::&rE   z   super( %s )z   domain( %s )z   range( %s )r   z
))r	   r  r   r   r   r   rD  r)  r{   r  r|  ru   r   r
   r}  r~  r  r   r  r   rt   r(  r*  rX  )r@   rttwo_link_inverseinversereprr   r  roletyper;  super_propertyr*  rX  exprs               rA   r  Property.__repr__  s   *II::uT\\2JuT\\7JPbPR T^^$$#(t~~)>)H)H#I #(8(C(Ct(V"'"7"="=K"&uT^^'<"=K		 $--:K|QrQ %)JJ$>$> OOHH..55..%  		#hnnSX6r:;<% II::uT\\2JuT\\7JPbPR %)JJ$6$6#((C,B,BC%  		/*%
	' 			HH +/*<*<*< %}^ZZ'PP*<	
 			HH #'++"- &fjj(II"-	
 			HH "&!+ %}UJJ'GG!+	
 YY4t45
e	3 5s   -O$;O)	O.
O3O3c              #     #    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S S9v   M     g 7fNr   r{  )ru   r   r{   r   r(  r+   r  s     rA   _get_subpropertyofProperty._get_subpropertyof
	  sE     ::%%OOt/A/A & 
C 3jj4@@
r  c                    U(       d  g U HB  nU R                   R                  U R                  [        R                  [        U5      45        MD     g r=   )ru   r   r{   r   r(  r.   )r@   rJ   subpropertys      rA   _set_subpropertyofProperty._set_subpropertyof	  s<     KJJNN$"4"46G6TU !rE   c                    g r=   ri   r   s    rA   _del_subpropertyofProperty._del_subpropertyof	  r  rE   c              #     #    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S S9v   M     g 7frE  )ru   r   r{   r	   r)  r+   r  s     rA   _get_inverseofProperty._get_inverseof 	  s=     ::%%doo%WC3jj4@@ Xr  c                    U(       d  g U R                   R                  U R                  [        R                  [        U5      45        g r=   )ru   r   r{   r	   r)  r.   rO   s     rA   _set_inverseofProperty._set_inverseof$	  s-    

8I%8PQRrE   c                    g r=   ri   r   s    rA   _del_inverseofProperty._del_inverseof)	  r  rE   c              #     #    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S9v   M     g 7fr  )ru   r   r{   r   r*  r   )r@   doms     rA   _get_domainProperty._get_domain/	  s;     ::%%doo%UC::.. Vr  c                Z   U(       d  g [        U[        [        45      (       a@  U R                  R	                  U R
                  [        R                  [        U5      45        g U HB  nU R                  R	                  U R
                  [        R                  [        U5      45        MD     g r=   )	rz   r%   r   ru   r   r{   r   r*  r.   )r@   rJ   rY  s      rA   _set_domainProperty._set_domain3	  so    ej*566JJNNDOOT[[:KE:RST

>OPS>TUV rE   c                    g r=   ri   r   s    rA   _del_domainProperty._del_domain<	  r  rE   c              #     #    U R                   R                  U R                  [        R                  S9 H  n[        XR                   S9v   M     g 7fr  )ru   r   r{   r   rX  r   )r@   rans     rA   
_get_rangeProperty._get_rangeB	  s;     ::%%doo%TC::.. Ur  c                Z   U(       d  g [        U[        [        45      (       a@  U R                  R	                  U R
                  [        R                  [        U5      45        g U HB  nU R                  R	                  U R
                  [        R                  [        U5      45        MD     g r=   )	rz   r%   r   ru   r   r{   r   rX  r.   )r@   rangesrX  s      rA   
_set_rangeProperty._set_rangeF	  sn    fz:677JJNNDOOTZZ9J69RST

=Nu=UVW  rE   c                    g r=   ri   r   s    rA   
_del_rangeProperty._del_rangeO	  r  rE   c                    U R                    H-  u  p#nU R                  R                  U[        U5      U45        M/     U R                  R	                  S U R
                  S 45        g r=   )r)  ru   r   r7   r   r{   )r@   rJ   r   r  r   s        rA   r   Property.replaceU	  sN    HA1JJNNA3E:A>? $

4$78rE   )r'  rD  r*  r)  rX  r(  r=   )$rd   re   rf   rg   r!  r$  r	   r  rB   r   r  r  r"  r)  r  rF  rJ  r   r   r(  rM  rP  rS  r)  rV  rZ  r]  r*  r`  rd  rh  rX  rk  r   rh   rd  re  s   @rA   r+   r+   G  sZ   "XB ## :D69 k;/FXtA **+ , .0BMAS
 & ' HI/W $ % k;<F/X 

# $ ZZ8E9 9rE   r+   c                   Uc  0 OUn[        U 5      nUR                  S[        5        UR                  S[        5        UR                  S[        5        [        UR                  5       5       H  u  pEUR                  XESS9  M     X0l        g)zA
Takes a graph and binds the common namespaces (rdf,rdfs, & owl)
Nrl   rk   rm   Fr2  )r   r5  r   r
   r	   rn   itemsnamespace_manager)ru   additionalNSadditional_nsrq  rw   rv   s         rA   r    r    \	  s~     '.BLM(/64(5#&5#&M//12vU; 3/rE   r|  r=   )Wr!  
__future__r   r*  loggingtypingr   r   rdflib.collectionr   rdflib.graphr   r   rdflib.namespacer	   r
   r   r   r   r   rdflib.termr   r   r   r   r   rdflib.utilr   	getLoggerrd   logger__all__r&   r5   r1   r/   r.   r7   r2   r$   r   r%   r   r   r*   r   r   r   rk  
differencer   r   r   r   r)  rh  rl  backwardCompatibleWithincompatibleWithr   r   r   r   r!   r"   r  r'   r(   r   r   r)   r#   BooleanPredicatesr  r   r   r   r-   r8   r6   r3   r4   r0   r9   r,   r+   r    ri   rE   rA   <module>r     s  Un #   " ( + M M D D 			8	$&\- -* 39:
,)
 /4eP [@ [@| 
<	=@<z @<FA A@
;>#I # @A*""		 (+&\C
L	Z 	. YDw wtG GTAou AH ''5  B- -q?E qh	s=% s=r	 U T S S P 	TU& R9 R9j0rE   