mirror of https://github.com/QMCPACK/qmcpack.git
347 lines
12 KiB
Python
347 lines
12 KiB
Python
##################################################################
|
|
## (c) Copyright 2015- by Jaron T. Krogel ##
|
|
##################################################################
|
|
|
|
|
|
#====================================================================#
|
|
# developer.py #
|
|
# Defines developer environment. Supplies base class for generic #
|
|
# development (Nexus or beyond) #
|
|
# #
|
|
# Content summary: #
|
|
# log, warn, error #
|
|
# Function interface to logging and error handling. #
|
|
# #
|
|
# DevBase #
|
|
# Base class inheriting generic abilities for obj, etc. #
|
|
# Allows for unimplemented functions. #
|
|
# #
|
|
# Void #
|
|
# Class instances used to represent missing elements. #
|
|
# Execution stops when any action is performed on a Void object.#
|
|
# #
|
|
# unavailable #
|
|
# Function to create named void objects. #
|
|
# Used when imported entities do not exist on the local machine.#
|
|
# Allows execution tp proceed normally so long as none of these #
|
|
# non-existent entities are used during runtime execution. #
|
|
# This enables the maximum amount of Nexus functionality to be #
|
|
# accessed given the available modules. #
|
|
# #
|
|
#====================================================================#
|
|
|
|
|
|
from utilities import to_str
|
|
from generic import obj,object_interface,log,error,warn,message
|
|
from debug import ci,interact
|
|
|
|
|
|
class DevBase(obj):
|
|
def not_implemented(self):
|
|
self.error('a base class function has not been implemented',trace=True)
|
|
#end def not_implemented
|
|
#end class DevBase
|
|
|
|
|
|
|
|
class Void(object):
|
|
void_items = dict()
|
|
|
|
@classmethod
|
|
def _unavailable(cls,self):
|
|
sid = id(self)
|
|
if sid in Void.void_items:
|
|
module,item = Void.void_items[id(self)]
|
|
else:
|
|
module,item = None,None
|
|
#end if
|
|
if module is None and item is None:
|
|
msg = 'encountered a void item from an unavailable module'
|
|
elif module is None:
|
|
msg = 'item '+str(item)+' is from an unavailable module'
|
|
elif item is None:
|
|
msg = 'encountered a void item from unavailable module '+str(module)+' \nthis python module must be installed on your system to use this feature'
|
|
else:
|
|
msg = 'item '+str(item)+' is from unavailable module '+str(module)+' \nthis python module must be installed on your system to use this feature'
|
|
#end if
|
|
DevBase.class_error(msg,'Void')
|
|
#end def _unavailable
|
|
|
|
|
|
@classmethod
|
|
def _class_unavailable(cls):
|
|
msg = 'encountered a void item from an unavailable module'
|
|
DevBase.class_error(msg,'Void')
|
|
#end def _class_unavailable
|
|
|
|
|
|
|
|
def __init__(self,module=None,item=None):
|
|
Void.void_items[id(self)] = module,item
|
|
#end def __init__
|
|
|
|
|
|
#list of magic functions taken from the following sources
|
|
# http://web.archive.org/web/20110131211638/http://diveintopython3.org/special-method-names.html
|
|
# http://www.ironpythoninaction.com/magic-methods.html
|
|
|
|
|
|
#class methods
|
|
@classmethod
|
|
def __instancecheck__(cls,*args,**kwargs):
|
|
Void._class_unavailable()
|
|
@classmethod
|
|
def __subclasscheck__(cls,*args,**kwargs):
|
|
Void._class_unavailable()
|
|
@classmethod
|
|
def __subclasshook__(cls,*args,**kwargs):
|
|
Void._class_unavailable()
|
|
|
|
|
|
#member methods
|
|
#def __new__(self,*args,**kwargs):
|
|
# Void._unavailable(self)
|
|
def __eq__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __ne__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __lt__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __le__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __gt__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __ge__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __nonzero__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __subclasses__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __call__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __hash__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
#def __del__(self,*args,**kwargs):
|
|
# Void._unavailable(self)
|
|
def __dir__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __getitem__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __setitem__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __delitem__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __len__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __contains__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __iter__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __reversed__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __missing__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __length_hint__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __repr__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __str__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __unicode__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __getattr__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __setattr__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __delattr__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __getattribute__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __add__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __sub__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __mul__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __floordiv__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __div__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __truediv__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __mod__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __divmod__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __pow__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __lshift__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rshift__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __and__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __xor__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __or__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __neg__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __pos__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __abs__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __invert__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __complex__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __int__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __float__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __oct__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __hex__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __index__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __enter__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __exit__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __get__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __set__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __delete__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __doc__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __dict__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
#def __slots__(self,*args,**kwargs):
|
|
# Void._unavailable(self)
|
|
def __class__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __bases__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __name__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __all__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __file__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __module__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
#def __metaclass__(self,*args,**kwargs):
|
|
# Void._unavailable(self)
|
|
def __import__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __radd__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rsub__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rmul__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rtruediv__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rfloordiv__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rmod__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rdivmod__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rpow__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rlshift__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rrshift__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rand__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __rxor__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __ror__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __iadd__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __isub__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __imul__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __itruediv__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __ifloordiv__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __imod__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __ipow__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __ilshift__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __irshift__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __iand__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __ixor__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __ior__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __round__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __ceil__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __floor__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __trunc__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __bool__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __copy__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __deepcopy__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __getstate__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __reduce__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __reduce_ex__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __getnewargs__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __setstate__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __bytes__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __format__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
def __next__(self,*args,**kwargs):
|
|
Void._unavailable(self)
|
|
#end class Void
|
|
|
|
|
|
def unavailable(module,*items):
|
|
voids = []
|
|
if len(items)==0:
|
|
voids.append(Void(module))
|
|
#end if
|
|
for item in items:
|
|
voids.append(Void(module,item))
|
|
#end for
|
|
if len(voids)==1:
|
|
return voids[0]
|
|
else:
|
|
return voids
|
|
#end if
|
|
#end def unavailable
|
|
|
|
|
|
def available(*items):
|
|
for item in items:
|
|
if isinstance(item,Void):
|
|
return False
|
|
#end if
|
|
#end for
|
|
return True
|
|
#end def available
|