88
99class InterfaceFeature (Feature ):
1010 r"""
11+ A :class:`Feature` describing whether an :class:`~sage.interfaces.interface.Interface` is present and functional.
12+
1113 TESTS::
1214
1315 sage: from sage.features.interfaces import InterfaceFeature
@@ -25,15 +27,41 @@ class InterfaceFeature(Feature):
2527 """
2628 @staticmethod
2729 def __classcall__ (cls , name , module , description = None ):
30+ """
31+ TESTS::
32+
33+ sage: from sage.features import PythonModule
34+ sage: from sage.features.interfaces import InterfaceFeature
35+ sage: f = InterfaceFeature("test_interface", "sage.interfaces.interface")
36+ sage: f is InterfaceFeature("test_interface", PythonModule("sage.interfaces.interface"))
37+ True
38+ """
2839 if isinstance (module , str ):
2940 module = PythonModule (module )
3041 return Feature .__classcall__ (cls , name , module , description )
3142
3243 def __init__ (self , name , module , description ):
44+ """
45+ TESTS::
46+
47+ sage: from sage.features.interfaces import InterfaceFeature
48+ sage: f = InterfaceFeature("test_interface", "sage.interfaces.interface")
49+ sage: isinstance(f, InterfaceFeature)
50+ True
51+ """
3352 super ().__init__ (name , description = description )
3453 self .module = module
3554
3655 def _is_present (self ):
56+ """
57+ TESTS::
58+
59+ sage: from sage.features.interfaces import InterfaceFeature
60+ sage: from sage.interfaces.sage0 import Sage
61+ sage: f = InterfaceFeature("sage0", "sage.interfaces.sage0")
62+ sage: f.is_present()
63+ FeatureTestResult('sage0', True)
64+ """
3765 result = self .module .is_present ()
3866 if not result :
3967 return result
@@ -50,6 +78,7 @@ def _is_present(self):
5078 return FeatureTestResult (self , False ,
5179 reason = f"Interface { interface } is not functional: { exception } " )
5280
81+
5382# The following are provided by external software only (no SPKG)
5483
5584class Magma (InterfaceFeature ):
@@ -61,7 +90,7 @@ class Magma(InterfaceFeature):
6190
6291 sage: from sage.features.interfaces import Magma
6392 sage: Magma().is_present() # random
64- FeatureTestResult('jupymake ', False)
93+ FeatureTestResult('magma ', False)
6594 """
6695
6796 @staticmethod
@@ -70,41 +99,101 @@ def __classcall__(cls):
7099
71100
72101class Matlab (InterfaceFeature ):
102+ r"""
103+ A :class:`sage.features.Feature` describing whether :class:`sage.interfaces.matlab.Matlab`
104+ is present and functional.
105+
106+ EXAMPLES::
107+
108+ sage: from sage.features.interfaces import Matlab
109+ sage: Matlab().is_present() # random
110+ FeatureTestResult('matlab', False)
111+ """
73112
74113 @staticmethod
75114 def __classcall__ (cls ):
76115 return InterfaceFeature .__classcall__ (cls , 'matlab' , 'sage.interfaces.matlab' )
77116
78117
79118class Mathematica (InterfaceFeature ):
119+ r"""
120+ A :class:`sage.features.Feature` describing whether :class:`sage.interfaces.mathematica.Mathematica`
121+ is present and functional.
122+
123+ EXAMPLES::
124+
125+ sage: from sage.features.interfaces import Mathematica
126+ sage: Mathematica().is_present() # random
127+ FeatureTestResult('mathematica', False)
128+ """
80129
81130 @staticmethod
82131 def __classcall__ (cls ):
83132 return InterfaceFeature .__classcall__ (cls , 'mathematica' , 'sage.interfaces.mathematica' )
84133
85134
86135class Maple (InterfaceFeature ):
136+ r"""
137+ A :class:`sage.features.Feature` describing whether :class:`sage.interfaces.maple.Maple`
138+ is present and functional.
139+
140+ EXAMPLES::
141+
142+ sage: from sage.features.interfaces import Maple
143+ sage: Maple().is_present() # random
144+ FeatureTestResult('maple', False)
145+ """
87146
88147 @staticmethod
89148 def __classcall__ (cls ):
90149 return InterfaceFeature .__classcall__ (cls , 'maple' , 'sage.interfaces.maple' )
91150
92151
93152class Macaulay2 (InterfaceFeature ):
153+ r"""
154+ A :class:`sage.features.Feature` describing whether :class:`sage.interfaces.macaulay2.Macaulay2`
155+ is present and functional.
156+
157+ EXAMPLES::
158+
159+ sage: from sage.features.interfaces import Macaulay2
160+ sage: Macaulay2().is_present() # random
161+ FeatureTestResult('macaulay2', False)
162+ """
94163
95164 @staticmethod
96165 def __classcall__ (cls ):
97166 return InterfaceFeature .__classcall__ (cls , 'macaulay2' , 'sage.interfaces.macaulay2' )
98167
99168
100169class Octave (InterfaceFeature ):
170+ r"""
171+ A :class:`sage.features.Feature` describing whether :class:`sage.interfaces.octave.Octave`
172+ is present and functional.
173+
174+ EXAMPLES::
175+
176+ sage: from sage.features.interfaces import Octave
177+ sage: Octave().is_present() # random
178+ FeatureTestResult('octave', False)
179+ """
101180
102181 @staticmethod
103182 def __classcall__ (cls ):
104183 return InterfaceFeature .__classcall__ (cls , 'octave' , 'sage.interfaces.octave' )
105184
106185
107186class Scilab (InterfaceFeature ):
187+ r"""
188+ A :class:`sage.features.Feature` describing whether :class:`sage.interfaces.scilab.Scilab`
189+ is present and functional.
190+
191+ EXAMPLES::
192+
193+ sage: from sage.features.interfaces import Scilab
194+ sage: Scilab().is_present() # random
195+ FeatureTestResult('scilab', False)
196+ """
108197
109198 @staticmethod
110199 def __classcall__ (cls ):
0 commit comments