package org.python.core;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.python.expose.ExposedMethod;
import org.python.expose.ExposedNew;
import org.python.expose.ExposedType;
import org.python.expose.MethodType;
import org.python.util.Generic;
@ExposedType(name = "set", base = PyObject.class, doc = BuiltinDocs.set_doc)
public class PySet extends BaseSet {
public static final PyType TYPE = PyType.fromClass(PySet.class);
public PySet() {
this(TYPE);
}
public PySet(PyType type) {
super(type, Generic.<PyObject>concurrentSet());
}
public PySet(PyObject data) {
super(TYPE, _update(Generic.<PyObject>concurrentSet(), data));
}
@ExposedNew
@ExposedMethod(doc = BuiltinDocs.set___init___doc)
final void set___init__(PyObject[] args, String[] kwds) {
int nargs = args.length - kwds.length;
if (nargs > 1) {
throw PyBuiltinCallable.DefaultInfo.unexpectedCall(nargs, false, "Set", 0, 1);
}
if (nargs == 0) {
return;
}
_set.clear();
_update(args[0]);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___cmp___doc)
final PyObject set___cmp__(PyObject o) {
return new PyInteger(baseset___cmp__(o));
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___ne___doc)
final PyObject set___ne__(PyObject o) {
return baseset___ne__(o);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___eq___doc)
final PyObject set___eq__(PyObject o) {
return baseset___eq__(o);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___or___doc)
final PyObject set___or__(PyObject o) {
return baseset___or__(o);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___xor___doc)
final PyObject set___xor__(PyObject o) {
return baseset___xor__(o);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___sub___doc)
final PyObject set___sub__(PyObject o) {
return baseset___sub__(o);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___and___doc)
final PyObject set___and__(PyObject o) {
return baseset___and__(o);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___lt___doc)
final PyObject set___lt__(PyObject o) {
return baseset___lt__(o);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___gt___doc)
final PyObject set___gt__(PyObject o) {
return baseset___gt__(o);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___ge___doc)
final PyObject set___ge__(PyObject o) {
return baseset___ge__(o);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___le___doc)
final PyObject set___le__(PyObject o) {
return baseset___le__(o);
}
@ExposedMethod(doc = BuiltinDocs.set___iter___doc)
final PyObject set___iter__() {
return baseset___iter__();
}
@ExposedMethod(doc = BuiltinDocs.set___contains___doc)
final boolean set___contains__(PyObject item) {
return baseset___contains__(item);
}
@ExposedMethod(doc = BuiltinDocs.set_copy_doc)
final PyObject set_copy() {
return baseset_copy();
}
@ExposedMethod(doc = BuiltinDocs.set_union_doc)
final PyObject set_union(PyObject set) {
return baseset_union(set);
}
@ExposedMethod(doc = BuiltinDocs.set_difference_doc)
final PyObject set_difference(PyObject set) {
return baseset_difference(set);
}
@ExposedMethod(doc = BuiltinDocs.set_symmetric_difference_doc)
final PyObject set_symmetric_difference(PyObject set) {
return baseset_symmetric_difference(set);
}
@ExposedMethod(doc = BuiltinDocs.set_intersection_doc)
final PyObject set_intersection(PyObject set) {
return baseset_intersection(set);
}
@ExposedMethod(doc = BuiltinDocs.set_issubset_doc)
final PyObject set_issubset(PyObject set) {
return baseset_issubset(set);
}
@ExposedMethod(doc = BuiltinDocs.set_issuperset_doc)
final PyObject set_issuperset(PyObject set) {
return baseset_issuperset(set);
}
@ExposedMethod(doc = BuiltinDocs.set___len___doc)
final int set___len__() {
return baseset___len__();
}
@ExposedMethod(doc = BuiltinDocs.set___reduce___doc)
final PyObject set___reduce__() {
return baseset___reduce__();
}
public PyObject __ior__(PyObject other) {
return set___ior__(other);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___ior___doc)
final PyObject set___ior__(PyObject other) {
if (!(other instanceof BaseSet)) {
return null;
}
_set.addAll(((BaseSet)other)._set);
return this;
}
public PyObject __ixor__(PyObject other) {
return set___ixor__(other);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___ixor___doc)
final PyObject set___ixor__(PyObject other) {
if (!(other instanceof BaseSet)) {
return null;
}
set_symmetric_difference_update(other);
return this;
}
public PyObject __iand__(PyObject other) {
return set___iand__(other);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___iand___doc)
final PyObject set___iand__(PyObject other) {
if (!(other instanceof BaseSet)) {
return null;
}
_set = ((BaseSet)__and__(other))._set;
return this;
}
public PyObject __isub__(PyObject other) {
return set___isub__(other);
}
@ExposedMethod(type = MethodType.BINARY, doc = BuiltinDocs.set___isub___doc)
final PyObject set___isub__(PyObject other) {
if (!(other instanceof BaseSet)) {
return null;
}
_set.removeAll(((BaseSet)other)._set);
return this;
}
public int hashCode() {
return set___hash__();
}
@ExposedMethod(doc = BuiltinDocs.set___hash___doc)
final int set___hash__() {
throw Py.TypeError("set objects are unhashable");
}
@ExposedMethod(doc = BuiltinDocs.set_add_doc)
final void set_add(PyObject o) {
_set.add(o);
}
@ExposedMethod(doc = BuiltinDocs.set_remove_doc)
final void set_remove(PyObject o) {
boolean b = false;
try {
b = _set.remove(o);
} catch (PyException e) {
PyObject frozen = asFrozen(e, o);
b = _set.remove(frozen);
}
if (!b) {
throw new PyException(Py.KeyError, o);
}
}
@ExposedMethod(doc = BuiltinDocs.set_discard_doc)
final void set_discard(PyObject o) {
try {
_set.remove(o);
} catch (PyException e) {
PyObject frozen = asFrozen(e, o);
_set.remove(frozen);
}
}
@ExposedMethod(doc = BuiltinDocs.set_pop_doc)
final PyObject set_pop() {
Iterator iterator = _set.iterator();
try {
Object first = iterator.next();
_set.remove(first);
return (PyObject)first;
} catch (NoSuchElementException e) {
throw new PyException(Py.KeyError, "pop from an empty set");
}
}
@ExposedMethod(doc = BuiltinDocs.set_clear_doc)
final void set_clear() {
_set.clear();
}
@ExposedMethod(doc = BuiltinDocs.set_update_doc)
final void set_update(PyObject data) {
_update(data);
}
@ExposedMethod(doc = BuiltinDocs.set_intersection_update_doc)
final void set_intersection_update(PyObject other) {
if (other instanceof BaseSet) {
__iand__(other);
} else {
BaseSet set = (BaseSet)baseset_intersection(other);
_set = set._set;
}
}
@ExposedMethod(doc = BuiltinDocs.set_symmetric_difference_update_doc)
final void set_symmetric_difference_update(PyObject other) {
if (this == other) {
set_clear();
return;
}
BaseSet bs = (other instanceof BaseSet) ? (BaseSet)other : new PySet(other);
for (PyObject o : bs._set) {
if (_set.contains(o)) {
_set.remove(o);
} else {
_set.add(o);
}
}
}
@ExposedMethod(doc = BuiltinDocs.set_difference_update_doc)
final void set_difference_update(PyObject other) {
if (other instanceof BaseSet) {
__isub__(other);
return;
}
for (PyObject o : other.asIterable()) {
if (__contains__(o)) {
_set.remove(o);
}
}
}
@ExposedMethod(names = "__repr__", doc = BuiltinDocs.set___repr___doc)
final String set_toString() {
return baseset_toString();
}
}