Salome HOME
travail sur monPlusieurs
[tools/eficas.git] / Noyau / N_types.py
1 #@ MODIF N_types Noyau  DATE 28/01/2013   AUTEUR COURTOIS M.COURTOIS 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2013  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
9 # (AT YOUR OPTION) ANY LATER VERSION.                                                  
10 #                                                                       
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
15 #                                                                       
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
18 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
19 # ======================================================================
20 # RESPONSABLE COURTOIS M.COURTOIS
21
22 """
23    Ce module contient des fonctions utilitaires pour tester les types
24 """
25
26 # eficas sentinel
27 try:
28     import numpy as NP
29     _np_arr = NP.ndarray
30 except ImportError:
31     _np_arr = None
32
33 # use isinstance() instead of type() because objects returned from numpy arrays
34 # inherit from python scalars but are numpy.float64 or numpy.int32...
35 def is_int(obj):
36     return isinstance(obj, int) or type(obj) is long
37
38 def is_float(obj):
39     return isinstance(obj, float)
40
41 def is_complex(obj):
42     return isinstance(obj, complex)
43
44 from decimal import Decimal
45 def is_float_or_int(obj):
46     return is_float(obj) or is_int(obj) or isinstance(obj, Decimal)
47
48 def is_number(obj):
49     return is_float_or_int(obj) or is_complex(obj)
50
51 def is_str(obj):
52     return isinstance(obj, (str, unicode))
53
54 def is_list(obj):
55     return type(obj) is list
56
57 def is_tuple(obj):
58     return type(obj) is tuple
59
60 def is_array(obj):
61     """a numpy array ?"""
62     return type(obj) is _np_arr
63
64 def is_sequence(obj):
65     """a sequence (allow iteration, not a string) ?"""
66     return is_list(obj) or is_tuple(obj) or is_array(obj)
67
68 def is_assd(obj):
69     from N_ASSD import ASSD
70     return isinstance(obj, ASSD)
71
72
73 def force_list(obj):
74     """Retourne `obj` si c'est une liste ou un tuple,
75     sinon retourne [obj,] (en tant que list).
76     """
77     if not is_sequence(obj):
78         obj = [obj,]
79     return list(obj)
80
81 def force_tuple(obj):
82     """Return `obj` as a tuple."""
83     return tuple(force_list(obj))
84
85 # backward compatibility
86 from warnings import warn
87 def is_enum(obj):
88     """same as is_sequence"""
89     warn("'is_enum' is deprecated, use 'is_sequence'",
90          DeprecationWarning, stacklevel=2)
91     return is_sequence(obj)