diff --git a/.github/workflows/test-overall.yml b/.github/workflows/test-overall.yml index 2b53f93..0b9d974 100644 --- a/.github/workflows/test-overall.yml +++ b/.github/workflows/test-overall.yml @@ -127,3 +127,4 @@ jobs: UPLOAD_SCIKITS_ODES_API_DOCS: ${{ github.repository == 'bmcage/odes' && 'true' || 'false' }} GITHUB_ACTOR: ${{ secrets.GITHUB_ACTOR }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + API_DOCS_OUT_DIR: /tmp/new_sundials_docs diff --git a/apidocs/api.rst b/apidocs/api/compat.rst similarity index 95% rename from apidocs/api.rst rename to apidocs/api/compat.rst index f93010f..fdc5db1 100644 --- a/apidocs/api.rst +++ b/apidocs/api/compat.rst @@ -1,9 +1,10 @@ -Lower Level API -=============== +scikits.odes +============ scikits.odes ------------ .. automodule:: scikits.odes + :members: scikits.odes.ode ---------------- diff --git a/apidocs/api/core.rst b/apidocs/api/core.rst new file mode 100644 index 0000000..294563d --- /dev/null +++ b/apidocs/api/core.rst @@ -0,0 +1,5 @@ +scikits-odes-core +----------------- + +.. automodule:: scikits_odes_core + :members: diff --git a/apidocs/api/daepack.rst b/apidocs/api/daepack.rst new file mode 100644 index 0000000..24b3b14 --- /dev/null +++ b/apidocs/api/daepack.rst @@ -0,0 +1,12 @@ +scikits-odes-daepack +==================== + +.. scikits_odes_daepack.ddaspkint +.. ------------------------------ +.. .. automodule:: scikits_odes_daepack.ddaspkint +.. :members: +.. +.. scikits_odes_daepack.lsodiint +.. ----------------------------- +.. .. automodule:: scikits_odes_daepack.lsodiint +.. :members: diff --git a/apidocs/api/index.rst b/apidocs/api/index.rst new file mode 100644 index 0000000..4ca2274 --- /dev/null +++ b/apidocs/api/index.rst @@ -0,0 +1,11 @@ +Lower Level API +=============== + +.. toctree:: + :maxdepth: 2 + + core + daepack + sundials + main + compat diff --git a/apidocs/api/main.rst b/apidocs/api/main.rst new file mode 100644 index 0000000..f4f699e --- /dev/null +++ b/apidocs/api/main.rst @@ -0,0 +1,23 @@ +scikits-odes +============ + +scikits_odes +------------ +.. automodule:: scikits_odes + :members: + +scikits_odes.ode +---------------- +.. automodule:: scikits_odes.ode + :members: + +scikits_odes.dae +---------------- +.. automodule:: scikits_odes.dae + :members: + +scikits_odes.dopri5 +-------------------- +.. automodule:: scikits_odes.dopri5 + :members: + diff --git a/apidocs/api/sundials.rst b/apidocs/api/sundials.rst new file mode 100644 index 0000000..d2a186d --- /dev/null +++ b/apidocs/api/sundials.rst @@ -0,0 +1,17 @@ +scikits-odes-sundials +===================== + +scikits_odes_sundials +--------------------- +.. automodule:: scikits_odes_sundials + :members: + +scikits_odes_sundials.cvode +--------------------------- +.. automodule:: scikits_odes_sundials.cvode + :members: + +scikits_odes_sundials.ida +------------------------- +.. automodule:: scikits_odes_sundials.ida + :members: diff --git a/apidocs/conf.py b/apidocs/conf.py index 1ad0e02..7af786a 100644 --- a/apidocs/conf.py +++ b/apidocs/conf.py @@ -113,7 +113,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'sphinx_rtd_theme' +html_theme = 'alabaster' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the @@ -145,11 +145,11 @@ html_static_path = ['_static'] # from https://rackerlabs.github.io/docs-rackspace/tools/rtd-tables.html -html_context = { - 'css_files': [ - '_static/theme_overrides.css', # override wide tables in RTD theme - ], - } +#html_context = { +# 'css_files': [ +# '_static/theme_overrides.css', # override wide tables in RTD theme +# ], +# } # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied diff --git a/apidocs/index.rst b/apidocs/index.rst index 1ef09c2..8930452 100644 --- a/apidocs/index.rst +++ b/apidocs/index.rst @@ -1,8 +1,3 @@ -.. Odes documentation master file, created by - sphinx-quickstart on Tue Feb 2 13:13:32 2016. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - Welcome to the ODES scikit API Documentation ============================================ @@ -15,12 +10,12 @@ For other versions of the API documentation, see https://bmcage.github.io/odes. Contents: .. toctree:: - :maxdepth: 2 + :maxdepth: 4 ode dae sundials - api + api/index Indices and tables ================== diff --git a/apidocs/requirements.txt b/apidocs/requirements.txt index 8808902..e76bf30 100644 --- a/apidocs/requirements.txt +++ b/apidocs/requirements.txt @@ -1,4 +1,4 @@ sphinx>=1.4 -sphinx_rtd_theme +sphinx-rtd-theme sphinxcontrib-jquery docs-versions-menu diff --git a/apidocs/sundials.rst b/apidocs/sundials.rst index 891ad99..acf899d 100644 --- a/apidocs/sundials.rst +++ b/apidocs/sundials.rst @@ -5,17 +5,19 @@ Selecting Precision ------------------- Sundials can be built with different precisions (currently `'single'` which maps to C `'float'`; `'double'` (the default) which maps to C `'double'`; and -`'extended'` which maps to C `'long double'`), and scikits.odes supports using -whichever precision Sundials is built with. To take advantage of this, you must -first have sundials built and installed with the desired precision setting. - -Once you have done this, build scikits.odes against this particular version of -sundials (see the main documentation for how to do this). scikits.odes will -automatically detect the precision, and store this in a variable called +`'extended'` which maps to C `'long double'`), and scikits-odes-sundials +supports using whichever precision Sundials is built with. To take advantage of +this, you must first have sundials built and installed with the desired +precision setting. + +Once you have done this, build scikits-odes-sundials against this particular +version of sundials (see the main documentation for how to do this). +scikits-odes-sundials will automatically detect the precision, and store this in +a variable called :py:const:`DTYPE`. :py:const:`DTYPE` should be accessed from -:py:mod:`scikits.odes.sundials` (other modules may have :py:const:`DTYPE` -defined, but :py:mod:`scikits.odes.sundials` should be preferred). Additionally -:py:const:`scikits.odes.sundials.precision` contains the precision setting found +:py:mod:`scikits_odes_sundials` (other modules may have :py:const:`DTYPE` +defined, but :py:mod:`scikits_odes_sundials` should be preferred). Additionally +:py:const:`scikits_odes_sundials.precision` contains the precision setting found by scikits.odes. To use :py:const:`DTYPE`, treat it as a numpy dtype; use it whenever you need to diff --git a/apidocs/upload_api_docs.sh b/apidocs/upload_api_docs.sh index d8e88cb..d32b6d4 100755 --- a/apidocs/upload_api_docs.sh +++ b/apidocs/upload_api_docs.sh @@ -3,6 +3,7 @@ set -ex if [ "true" = "$UPLOAD_SCIKITS_ODES_API_DOCS" ]; then + cd /tmp # Clone gh-pages git clone --branch gh-pages https://github.com/bmcage/odes gh-pages # Run rsync diff --git a/docs/conf.py b/docs/conf.py index 37fc351..3bfea7f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -48,7 +48,7 @@ 'https://docs.scipy.org/doc/scipy/', None ), 'apidocs': ( - 'https://bmcage.github.io/odes/dev', None + 'https://bmcage.github.io/odes/master/', None ), } diff --git a/packages/scikits-odes-core/src/scikits_odes_core/__init__.py b/packages/scikits-odes-core/src/scikits_odes_core/__init__.py index f9e3b85..498796f 100644 --- a/packages/scikits-odes-core/src/scikits_odes_core/__init__.py +++ b/packages/scikits-odes-core/src/scikits_odes_core/__init__.py @@ -8,7 +8,7 @@ class DaeBase: Parameters ---------- - Rfn : + Rfn : function residual function options : mapping Additional options for initialization, solver dependent @@ -186,8 +186,8 @@ class OdeBase: ---------- Rfn : function A function which computes the required derivatives. The signature - should be ``func(t, y, y_dot, *args, **kwargs)``. Note that *args and - **kwargs handling are solver dependent. + should be ``func(t, y, y_dot, *args, **kwargs)``. Note that ``*args`` + and ``**kwargs`` handling are solver dependent. options : mapping Additional options for initialization, solver dependent diff --git a/packages/scikits-odes-daepack/src/scikits_odes_daepack/ddaspkint.py b/packages/scikits-odes-daepack/src/scikits_odes_daepack/ddaspkint.py index dbaf56b..8acf9fa 100644 --- a/packages/scikits-odes-daepack/src/scikits_odes_daepack/ddaspkint.py +++ b/packages/scikits-odes-daepack/src/scikits_odes_daepack/ddaspkint.py @@ -5,47 +5,47 @@ ====== Solver developed 1989 to 1996, with some corrections from 2000 - Fortran -This code solves a system of differential/algebraic equations of the form -G(t,y,y') = 0 , using a combination of Backward Differentiation Formula -(BDF) methods and a choice of two linear system solution methods: direct -(dense or band) or Krylov (iterative). -Krylov is not supported from within scikits.odes. -In order to support it, a new interface should be created ddaspk_krylov, +This code solves a system of differential/algebraic equations of the form +G(t,y,y') = 0 , using a combination of Backward Differentiation Formula +(BDF) methods and a choice of two linear system solution methods: direct +(dense or band) or Krylov (iterative). +Krylov is not supported from within scikits.odes. +In order to support it, a new interface should be created ddaspk_krylov, with a different signature, reflecting the changes needed. Source: http://www.netlib.org/ode/ddaspk.f -On construction the function calculating the residual (res) must be given and -optionally also the function calculating the jacobian (jac). +On construction the function calculating the residual (res) must be given and +optionally also the function calculating the jacobian (jac). res has the signature: res(x, y, yprime, return_residual) -with +with x : independent variable, eg the time, float y : array of n unknowns in x yprime : dy/dx array of n unknowns in x, dimension = dim(y) return_residual: array that must be updated with the value of the residuals, so G(t,y,y'). The dimension is equal to dim(y) - return value: Not needed. However, for use with other solvers, consider + return value: Not needed. However, for use with other solvers, consider returning 0 on success. jac has the signature jac(x, y, yprime, cj, return_jac) -with +with x : independent variable, eg the time, float y : array of n unknowns in x yprime : dy/dx array of n unknowns in x, dimension = dim(y) - cj : internal variable of ddaspk algorithm you can use, don't change it! - cj can be ignored, or used to rescale constraint equations in the + cj : internal variable of ddaspk algorithm you can use, don't change it! + cj can be ignored, or used to rescale constraint equations in the system - return_jac : two dimensional array of the Jacobian, as per the Jacobian - definition of the ddaspk solver. This means it should be or a + return_jac : two dimensional array of the Jacobian, as per the Jacobian + definition of the ddaspk solver. This means it should be or a full nxn shaped array in general (n=dim(y)), or a banded shaped - array as per the definition of lband/uband. - Jac is optional and should be set with the jacfn option keyword. - Note that jac is defined as + array as per the definition of lband/uband. + Jac is optional and should be set with the jacfn option keyword. + Note that jac is defined as dres(i)/dy(j) + cj*dres(i)/dyprime(j) - return value: Not needed. However, for use with other solvers, consider + return value: Not needed. However, for use with other solvers, consider returning 0 on success. -This integrator accepts the following parameters in the initializer or +This integrator accepts the following parameters in the initializer or set_options method of the dae class: - rfn : residual function, see above for signature. This option need not be @@ -80,20 +80,20 @@ Note: best is to run code first with no condition - compute_initcond: None or 'yp0' or 'y0' DDASPK may be able to compute the initial conditions if you do not know them - precisely. + precisely. If y0, then y0 will be calculated - If yp0, then the differential variables will be used to solve for the - algebraic variables and the derivative of the differential variables. + If yp0, then the differential variables will be used to solve for the + algebraic variables and the derivative of the differential variables. Which are the algebraic variables must be indicated with algebraic_var method - exclude_algvar_from_error: bool - To determine solution, do not take the algebraic variables error control into + To determine solution, do not take the algebraic variables error control into account. Default=False - constraint_init: bool Enforce the constraint checks of Y during initial condition computation Note: try first with no constraints - constraint_type: if constraint_init, give an integer array with for every - unknown the specific condition to check: - 1: y0[i] >= 0 + unknown the specific condition to check: + 1: y0[i] >= 0 2: y0[i] > 0 -1: y0[i] <= 0 -2: y0[i] < 0 @@ -102,10 +102,10 @@ - algebraic_vars_idx: an array or None (= default) Description: If given problem is of type DAE, some items of the residual - vector returned by the 'resfn' have to be treated as - algebraic variables. These are denoted by the position + vector returned by the 'resfn' have to be treated as + algebraic variables. These are denoted by the position (index) in the residual vector. - All these indexes have to be specified in the + All these indexes have to be specified in the 'algebraic_vars_idx' array. """ @@ -127,16 +127,16 @@ class ddaspk(DaeBase): _runner = _runner messages = { 1: 'A step was successfully taken in the ' 'intermediate-output mode. The code has not ' - 'yet reached TOUT.', + 'yet reached TOUT.', 2: 'The integration to TSTOP was successfully ' - 'completed (T = TSTOP) by stepping exactly to TSTOP.', + 'completed (T = TSTOP) by stepping exactly to TSTOP.', 3: 'The integration to TOUT was successfully ' 'completed (T = TOUT) by stepping past TOUT. ' - 'Y(*) and YPRIME(*) are obtained by interpolation.', + 'Y(*) and YPRIME(*) are obtained by interpolation.', 4: 'The initial condition calculation, with ' 'INFO(11) > 0, was successful, and INFO(14) = 1. ' 'No integration steps were taken, and the solution ' - 'is not considered to have been started.', + 'is not considered to have been started.', -1: 'A large amount of work has been expended (about 500 steps)', -2: 'Excess accuracy requested. (Tolerances too small.)', -3: 'The local error test cannot be satisfied because you ' @@ -145,29 +145,29 @@ class ddaspk(DaeBase): ' relative error test is impossible for this component.', -5: 'Repeated failures in the evaluation or processing of the' ' preconditioner (in JAC)', - -6: 'repeated error test failures on the last attempted step)', + -6: 'repeated error test failures on the last attempted step)', -7: 'The nonlinear system solver in the time integration could' ' not converge.', -8: 'The matrix of partial derivatives appears to be singular' - ' (direct method).', + ' (direct method).', -9: 'The nonlinear system solver in the time integration' 'failed to achieve convergence, and there were repeated ' - 'error test failures in this step.', + 'error test failures in this step.', -10:'The nonlinear system solver in the time integration failed' - ' to achieve convergence because IRES was equal to -1.', + ' to achieve convergence because IRES was equal to -1.', -11:'IRES = -2 was encountered and control is' - 'being returned to the calling program.', - -12:'Failed to compute the initial Y, YPRIME.', + 'being returned to the calling program.', + -12:'Failed to compute the initial Y, YPRIME.', -13:"Unrecoverable error encountered inside user's" "PSOL routine, and control is being returned to" - "the calling program.", + "the calling program.", -14:'The Krylov linear system solver could not ' - 'achieve convergence.', + 'achieve convergence.', -33:'The code has encountered trouble from which' ' it cannot recover. A message is printed' ' explaining the trouble and control is returned' ' to the calling program. For example, this occurs' - ' when invalid input is detected.', + ' when invalid input is detected.', } supports_run_relax = 0 supports_step = 1 @@ -178,18 +178,18 @@ def __init__(self, resfn, **options): 'atol': 1e-12, 'lband': None, 'uband': None, - 'tstop': None, + 'tstop': None, 'order' : 5, 'max_steps' : 500, 'max_step_size' : 0.0, # corresponds to infinite 'first_step' : 0.0, # determined by solver - 'enforce_nonnegativity': False, - 'nonneg_type': None, + 'enforce_nonnegativity': False, + 'nonneg_type': None, 'compute_initcond': None, - 'constraint_init': False, - 'constraint_type': None, + 'constraint_init': False, + 'constraint_type': None, 'algebraic_vars_idx': None, - 'exclude_algvar_from_error': False, + 'exclude_algvar_from_error': False, 'rfn': None, 'jacfn': None, } @@ -224,24 +224,24 @@ def _init_data(self): self.nsteps = self.options['max_steps'] self.max_step = self.options['max_step_size'] self.first_step = self.options['first_step'] - self.nonneg =0 - if self.options['enforce_nonnegativity'] and self.options['constraint_init']: + self.nonneg =0 + if self.options['enforce_nonnegativity'] and self.options['constraint_init']: self.nonneg = 3 - elif self.options['enforce_nonnegativity']: + elif self.options['enforce_nonnegativity']: self.nonneg = 2 - elif self.options['constraint_init']: + elif self.options['constraint_init']: self.nonneg = 1 if (self.nonneg == 1 or self.nonneg == 3) and self.options['constraint_type'] is None: raise ValueError('Give type of init cond contraint as '\ 'an int array (>=0, >0, <=0, <0) or as int') else: self.constraint_type = self.options['constraint_type'] - if self.options['compute_initcond'] is None: + if self.options['compute_initcond'] is None: self.compute_initcond = 0 - elif re.match(self.options['compute_initcond'], r'y0', re.I): + elif re.match(self.options['compute_initcond'], r'y0', re.I): self.compute_initcond = 2 - elif re.match(self.options['compute_initcond'], r'yp0', re.I): + elif re.match(self.options['compute_initcond'], r'yp0', re.I): self.compute_initcond = 1 - else: + else: raise ValueError('Unknown init cond calculation method %s' %( self.options['compute_initcond'])) if self.compute_initcond == 1 and not self.options['algebraic_vars_idx']: @@ -303,7 +303,7 @@ def _reset(self, n, has_jac): self.info[15] = 1 lrw = 50 + max(self.order+4,7)*n if self.info[5]==0: lrw += pow(n, 2) - elif self.info[4]==0: + elif self.info[4]==0: lrw += (2*self.ml+self.mu+1)*n + 2*(n/(self.ml+self.mu+1)+1) else: lrw += (2*self.ml+self.mu+1)*n if self.info[15] == 1: lrw +=n @@ -335,7 +335,7 @@ def _reset(self, n, has_jac): lid = 40 if self.info[9]==1 or self.info[9]==3 : lid = 40 + n - if isscalar(self.constraint_type): + if isscalar(self.constraint_type): iwork[40:lid]=self.constraint_type else: iwork[40:lid]=self.constraint_type[:] self.info[10]=self.compute_initcond @@ -354,7 +354,7 @@ def _reset(self, n, has_jac): self.rwork[0] = 0. self.iwork = iwork - + self.call_args = [self.info,self.rtol,self.atol,self.rwork,self.iwork] #create storage self.tmp_res = empty(self.neq, float) if (self.ml is None or self.mu is None) : diff --git a/packages/scikits-odes-sundials/src/scikits_odes_sundials/cvode.pyx b/packages/scikits-odes-sundials/src/scikits_odes_sundials/cvode.pyx index 91ce51c..4382a8f 100644 --- a/packages/scikits-odes-sundials/src/scikits_odes_sundials/cvode.pyx +++ b/packages/scikits-odes-sundials/src/scikits_odes_sundials/cvode.pyx @@ -259,8 +259,10 @@ cdef class CV_JacRhsFunction: np.ndarray[DTYPE_t, ndim=1] fy, np.ndarray[DTYPE_t, ndim=2] J) except? -1: """ - Returns the Jacobi matrix of the right hand side function, as + Returns the Jacobi matrix of the right hand side function, as: + d(rhs)/d y + (for dense the full matrix, for band only bands). Result has to be stored in the variable J, which is preallocated to the corresponding size. diff --git a/packages/scikits-odes-sundials/src/scikits_odes_sundials/ida.pyx b/packages/scikits-odes-sundials/src/scikits_odes_sundials/ida.pyx index b5879eb..68f2cd0 100644 --- a/packages/scikits-odes-sundials/src/scikits_odes_sundials/ida.pyx +++ b/packages/scikits-odes-sundials/src/scikits_odes_sundials/ida.pyx @@ -280,8 +280,10 @@ cdef class IDA_JacRhsFunction: np.ndarray J, object userdata = None) except? -1: """ - Returns the Jacobi matrix of the residual function, as + Returns the Jacobi matrix of the residual function, as: + d(res)/d y + cj d(res)/d ydot + (for dense the full matrix, for band only bands). Result has to be stored in the variable J, which is preallocated to the corresponding size. diff --git a/packages/scikits-odes/src/scikits_odes/dopri5.py b/packages/scikits-odes/src/scikits_odes/dopri5.py index 3ecc4ba..e8493b4 100644 --- a/packages/scikits-odes/src/scikits_odes/dopri5.py +++ b/packages/scikits-odes/src/scikits_odes/dopri5.py @@ -7,37 +7,39 @@ dopri5 ------ - This is an explicit runge-kutta method of order (4)5 due to Dormand & Prince - (with stepsize control and dense output). - The API of this solver is as the other scikit.odes ODE solvers - Authors: +This is an explicit runge-kutta method of order (4)5 due to Dormand & Prince +(with stepsize control and dense output). +The API of this solver is as the other scikit.odes ODE solvers - E. Hairer and G. Wanner Universite de Geneve, Dept. de Mathematiques CH-1211 Geneve 24, Switzerland e-mail: ernst.hairer@math.unige.ch, gerhard.wanner@math.unige.ch +Authors: - This code is described in [HNW93]. + E. Hairer and G. Wanner Universite de Geneve, Dept. de Mathematiques CH-1211 Geneve 24, Switzerland e-mail: ernst.hairer@math.unige.ch, gerhard.wanner@math.unige.ch - This integrator accepts the following options: +This code is described in [HNW93]. - atol : float or sequence absolute tolerance for solution, default 1e-12 - rtol : float or sequence relative tolerance for solution, default 1e-6 - nsteps : int Maximum number of (internally defined) steps allowed during one call to the solver. Default=500 - first_step : float - max_step : float - safety : float Safety factor on new step selection (default 0.9) - ifactor : float - dfactor : float Maximum factor to increase/decrease step size by in one step - beta : float Beta parameter for stabilised step size control. - verbosity : int Switch for printing messages (< 0 for no messages). +This integrator accepts the following options: + + atol : float or sequence absolute tolerance for solution, default 1e-12 + rtol : float or sequence relative tolerance for solution, default 1e-6 + nsteps : int Maximum number of (internally defined) steps allowed during one call to the solver. Default=500 + first_step : float + max_step : float + safety : float Safety factor on new step selection (default 0.9) + ifactor : float + dfactor : float Maximum factor to increase/decrease step size by in one step + beta : float Beta parameter for stabilised step size control. + verbosity : int Switch for printing messages (< 0 for no messages). References [HNW93] (1, 2) E. Hairer, S.P. Norsett and G. Wanner, Solving Ordinary Differential Equations i. Nonstiff Problems. 2nd edition. Springer Series in Computational Mathematics, Springer-Verlag (1993) dop853 ------ - This is an explicit runge-kutta method of order 8(5,3) due to Dormand & Prince - (with stepsize control and dense output). - Options and references the same as “dopri5”. + +This is an explicit runge-kutta method of order 8(5,3) due to Dormand & Prince +(with stepsize control and dense output). +Options and references the same as “dopri5”. """ from collections import namedtuple @@ -161,8 +163,7 @@ def init_step(self, t0, y0): if old_api False: A named tuple, with entries: flag = An integer flag (StatusEnumDop) - values = Named tuple with entries t and y and ydot. y will - correspond to y_retn value and ydot to yp_retn! + values = Named tuple with entries t and y and ydot. y will correspond to y_retn value and ydot to yp_retn! errors = Named tuple with entries t_err and y_err roots = Named tuple with entries t_roots and y_roots tstop = Named tuple with entries t_stop and y_tstop @@ -216,10 +217,8 @@ def step(self, t, y_retn=None): of t starting at the current step. If old_api=True, the old behavior is used: - if t>0.0 then integration is performed until this time - and results at this time are returned in y_retn - if t<0.0 only one internal step is perfomed towards time abs(t) - and results after this one time step are returned + if t>0.0 then integration is performed until this time and results at this time are returned in y_retn + if t<0.0 only one internal step is perfomed towards time abs(t) and results after this one time step are returned y_retn - numpy vector (ndim = 1) in which the computed value will be stored (needs to be preallocated). If None y_retn is not used. @@ -231,8 +230,7 @@ def step(self, t, y_retn=None): if old_api False: A named tuple, with entries: flag = An integer flag (StatusEnumDOP) - values = Named tuple with entries t and y. y will - correspond to y_retn value + values = Named tuple with entries t and y. y will correspond to y_retn value errors = Named tuple with entries t_err and y_err roots = Named tuple with entries t_roots and y_roots tstop = Named tuple with entries t_stop and y_tstop diff --git a/tox.ini b/tox.ini index b3fc8c7..f2e0e85 100644 --- a/tox.ini +++ b/tox.ini @@ -28,8 +28,6 @@ commands = [testenv:apidocs] passenv=* -setenv= - API_DOCS_OUT_DIR={envtmpdir}/html deps= packages/scikits-odes packages/scikits-odes-core @@ -37,7 +35,7 @@ deps= packages/scikits-odes-sundials -rapidocs/requirements.txt commands= - sphinx-build -W -b html -d {envtmpdir}/doctrees . {env:API_DOCS_OUT_DIR} + sphinx-build -W -b html -d {envtmpdir}/doctrees . {env:API_DOCS_OUT_DIR:{envtmpdir}/html} ./upload_api_docs.sh changedir=apidocs