- Added support for complex valued parameters and variables.
- Fixed a bug that prevented functions which return derived-types from being saved correctly using autoclass.
- Added symlinks for
fortpy.o
andfortpy.mod
since they don't need to be copied. - Added
-nocolor
option to thefortpy.msg
module for tidierstdout
redirects. - Fixed a bug introduced last time by renaming
compile.log
for each test identifier separately. - Updated
postfix
support in the analysis shell. Any combination of variables and functions is now possible. - Added legend formatting options to the analysis shell.
- Added
multiprocessing
support to execution of test cases for unit tests. - Added more useful exception message for test initialization failures.
- Bug fixes outlined in Issue #100.
- Fixed a bug with symlinking when the link already exists.
- Refactored
fpy_auxiliary
to deal with arrays where the array has been initialized, but its contents don't necessarily produce files for each element. In that case, the array was not being restored to the correct size and state. New files called.fpy.blank
are created for array elements who are allocated, but don't produce files with values. Then, whenauxread
is called, the same array structure with allocated, but empty, variables is restored. Fixes Issue #101. - Fixed #67
- Fixed #103 by increasing the hard-coded line limit for the
fpy_read
to250000
characters.
- Added enhancement #87
- Addressed unit test issue where executables weren't being made public if they existed in interfaces, depending on the spacing around the
interface
keyword. - Fixed #88 and #89.
- Added a
<group>
tag to output templates for more advanced file comparisons. - Fixed #78 and #79.
- Added progress bar to unit tests.
- Added verbosity to Makefile so that compilation header doesn't show unless verbosity is
2
or higher. - Fixed #96 and #97.
- Added symbolic links to unit tests for optimization. Can be disabled using
<config symlink="false">
.
- Fixed a bug where if
dimension
keyword was specified all-caps, the dimension parsing would fail. - Fixed issue #74.
- Added enhancement #73; it reduced the number of lines in the
bcs/bcs.xml
file by 30%. - Fixed issue #77.
- Fixed issue #82.
- Fixed issue #84.
- Added enhancements to the unit test analysis shell to allow twin-axis plots.
- Removed lines for debugging from the
parse.py
file. - Updated
bestprac.py
to always parse from file and never use the cache. This makes the feedback loop faster for chekcing if changes resolved the best practice suggestions. - Fixed an issue in the module parser that wasn't terminating the regex for
public
keyword properly. This fixed issue #71 and issue #70. - Fixed issue #69.
- Refined filtering for user-types that get skipped in the
fpy_auxiliary
module generation. - Fixed a file naming error in the auxiliary module, auto-generated names for array elements were not being trimmed, producing file names with ~100 spaces!
- Improved the search directive for finding the code element corresponding to a user-derived type of a variable.
- Fixed the auxiliary recursion algorithm, which was messing up the recursion context for file name and variable name.
- Added the path to
fortpy.f90
incode.py
so that the parser can find the source code for fortpy from the distribution directory. - Fixed issue #64.
- Updated the isense unit tests to allow for auto-parsing of the latest version of
fortpy.f90
right from the distribution'stemplates
directory. Since the test was written, the signature ofpysave
was updated. This uncovered a bug that could show up: if a person tries to type in more arguments than a function will actually accept, instead of ignoring the error, it would just die. - Added a best-practices analyzer (
fortpy/stats/bp.py
) and accompanying script (fortpy/scripts/bestprac.py
) to test for the problems highlighted in enhancement request #68.
- Fixed #66 by adding a conditional check for
pysave
to make sure that an array actually has size before we try to save it. - Fixed #51.
- Fixed a bug in looking up the fortpy version of files. If binary files were queried (e.g.
.o
or.mod
files), then it would die in python3 because of the encoding differences. Added compiler suffix checking to the existing checks so that those files wouldn't trigger the exception. - Fixed a bug for arrays with
D > 2
not being allocated even whenallocate
was included in the<assignment>
tag. - Fixed an auto-class bug where folders were only being created for
<targets>
in the first<test>
tag of the testing group. - Fixed an auto-class bug with
fpy_coderoot
substitution where an extra'
was being included and throwing off the string escaping. - Fixed a bug where if the XML file had a later modified date, a reparse of the module would be triggered every time code ran because the module's datetime was being used for comparison.
- Fixed a bug where auto-generated Makefiles were not valid if no global includes are specified in
config.xml
. - Added
-strict
option that turns on all warnings for the compiler. - Fixed a bug in the type parser for recoginizing if the contents are private.
- Changed the auto-class feature to use the new
fpy_auxiliary
module with theauxsave
andauxread
interfaces when possible. For variables that have private members, we can't usefpy_auxiliary
since thefpy_read
andfpy_save
can't access the private components from outside of the module that declares those types. - Added a
summary
file to the file comparison for auto-classvariable.compare
folders. It shows the matches for each file in the directory and which files existed only in the test or model directories, but not both. Useful for tracking down which variables are not matching.
As part of the unit testing and development support, runtests.py
now supports a new option -auxiliary
that will generate a library-specific module called fpy_auxiliary.f90
. The module has two interfaces auxsave
and auxread
that work in a similar fashion to fortpy
's pysave
and fpy_read
interfaces. The module procedures for each interface include subroutines to save and re-load any of the user-derived types that are ever declared anywhere in the code library.
For user-derived types that have pointer
references to instances of the same type within themselves, the fpy_auxiliary
maintains a global table of pointer addresses and only saves each instance to file once. When the variable is read back from file, the pointers have their targets restored as they were before they were saved. This does not work for mixed custom types. That is, the table is maintained only for pointers to members of the same type as the custom-type being saved to disk.
In order to avoid compilation loops, it is best to define the user-derived types in a separate module from the code that uses them. Then any modules needing the types can also import fpy_auxiliary
and provide access to auxsave
and auxread
. These are useful for generating model input/output from existing codes. For complicated user types, you can add an auxsave
at any location in the code where the type has been initialized and generate a directory to initialize the variables from for any future unit tests.
Because of the reliance on c_ptr
from iso_c_binding
, the code has to be compiled with the 2008 standard, where an array of objects with pointer
can have any of its elements passed to a subroutine that requires a pointer
parameter. This modification was made to the Makefile.*
files that ship with fortpy
.
- Fixed the bug where the version number of
fortpy.f90
was not updated with Revision 1.6.1. It is now included in the packaging script forPyPI
so that it won't happen again. - Fixed issue #56
- Actually, the fix to issue #44 was not committed last revision; but is included now.
- Fixed a bug limiting the reading in of variables greater than 2D, which were not supported before revision 1.6.0.
- Fixed a bug for python3 with
Popen
instances returningstdout
as byte arrays that need to be decoded. - With the pre-compilation of
fortpy.f90
included in Revision 1.6.0,tester.py
was attempting to read the lines infortpy.o
andfortpy.mod
for version information; error raised with UTF-8 decoding. - In connection with issue #59:
- Added member and suffix attributes to the
<value>
tags. - Allowed multiple values to be comma-separated for the value attribute of both
<assignment>
and<part>
tags. - Added autoclass attribute (to both
<target>
and<output>
) that generates a folder for a user-derived type and automatically saves the variable's contents recursively in that folder. For<output>
it tells fortpy to check the folders against each other to determine if the variables are identical. - Added autoclass attribute to the
<value>
tag for variable assignments. A complex-typed user variable (even one including arrays of user-derived type variables) can be loaded automatically from a folder as long as it matches the file naming conventions.
- Added member and suffix attributes to the
- As a follow up to issue #35, added more lines of the XML file in which the error occurred and also the file path to the source.
- Fixed a bug where the module parser was adding local variables of executables to its members list if the module didn't have any user-defined custom types.
- Fixed a bug where
allocatable
was being added to any variables receiving initialization from files, even if the size of the array was fixed. - Updated
fortpy.f90
to include support for fixed-dimension arrays when usingfpy_read
. - Fixed issue #46
- Fixed issue #45
- Fixed issue #44 by introducing case insensitivity to the
regular="true"
parameter check and by fixing a new bug we discovered where ifdimension
was added as a modifier instead of attached to the variable name, it wasn't being parsed correctly byparsers.variable
. - Fixed
fpy_value_count
infortpy.f90
. The variableprev
was having its value set to0
in the variable declaration, which is only evaluated when the subroutine is first read into memory. Subsequent calls retain their values from previous ones.prev
now sets is value to-1
on each call to the routine, which also solves a problem whereadjustl
was not removing leading tabs from the strings that are later cleaned withtrim
. - Added support for
logical
andcomplex
types forpysave
andfpy_read
interfaces infortpy.f90
. - Added support for multi-dimensional arrays up to the fortran-max of 7D. Fixes issue #41.
- Added pre-compile support for
fortpy.f90
intofortpy.mod
andfortpy.o
for each compiler used in the unit testing. After adding multi-dimensional array support, thefortpy.f90
file exceeds 10,000 lines and takes 2-20 seconds to compile. Pre-compilation makes sense for lots of quick unit tests: fortpy shouldn't be the bottleneck. - Fixed issue #3 in
msg-byu/symlib
by printing more digits of the values being compared. - Fixed issue #48
- Fixed issue #52
- Fixed issue #53
- Fixed issue #50
- Updated additional modules with
2to3
forpython3
compatibility. - Fixed an issue in
analyze.py
where setting the prompt failed because of the new compiler support. - Fixed a bug in the analysis shell where tests that have no
.compare.out
file (and thus aNone
percentage) raised an exception when trying to be printed as a percentage.
- Added a more useful error message for XML tag parsing. Instead of just specifying the line number and column, the error message includes an excerpt of the original XML string showing the badly formed XML tag. This addresses issue #35.
- Fixed a bug introduced last revision 1.5.4; I thought I had run the unit tests before committing but I hadn't. Since I haven't set up the CI server yet on fortpy, it didn't get picked up until now.
- Fixed a bug in the handling of explicitly-specified staging directories with
runtests.py
. The paths were being mapped usingpath.expanduser
instead ofpath.abspath
. - Fixed issue #27
- Fixed issue #33
- Fixed issue #32
- Fixed additional issues with file comparison related to template sources, explicit templates in the
<fortpy>
tags of input/output files and one small issue with single valued body comparison keys. - Added integer verbosity level to
compare.py
.
- Fixed a bug in the executable parser. Executables without any parameters were being ignored.
- Fixed a bug in the unit tester from the fix in Revision 1.5.2 for relative paths in the staging attribute.
- Added support for a previously advertised feature that wasn't implemented yet. Paths to folder attributes in
<input>
,<output>
, and the staging attribute for<group>
tags now support relative paths (relative to the code folder). This allows different executables to define unique staging folders at the testing group level. It also allows theruntests.py
script to run with a single parameter, the positional parameter specifying the code directory to run.
- Fixed issue #31 related to value overwriting of shared memory between subsequent calls to the same method loaded from a shared library.
This minor version increment presents an additional interoperability tool call ftypes
to the fortpy suite. It automatically:
- generates wrapper subroutines for fortran code including for output parameters that are
pointer
orallocatable
. - generates library archives
*.a
for entire code directories containing modules that are dependencies for those being wrapped. - compiles a shared library for the wrapper modules.
- generates python modules with ctypes to interact with the shared libraries.
- cleans up the allocated fortran arrays using
__del__
via another ctypes call to the shared library'sftypes_dealloc
module that has handlers for freeing theallocatable
andpointer
variables.
The interface for using these features is a new scripts/ftypes.py
that ships with fortpy and is installed to the bin
during setup. It allows modules for an entire library to be created all at once and automatically handles the dependency modules by compiling *.a
libraries from all included code directories in the fortpy config.xml
as needed.
There are a few cases that ftypes
will not be able to handle:
- user-derived types are not currently handled, but will be sometime in the future.
- if any of the parameters in a subroutine or function don't have
intent
specified, no wrappers will be created for them.
- Fixed a bug where test level
<global>
tags were being overridden by theregular="true"
parameter tag declarations. - Related: the ignore attribute of the
<global>
tags was being checked against the group's variables first and then skipping a test-level specification when the tests should have priority.
- Added support for the runchecks and execute attributes on
<test>
tags so that fortpy can be used to generate drivers without breaking the unit tests that do have model output. - Fixed a bug whereby
MethodFinder
instances were only returning the group-level variables for writing the executable, but not the test-specification variables, even though the test-spec variables are the most general ones. - Fixed a bug that had the model output check reports giving more than 100% success if multiple targets were being checked.
- Fixed a bug for
<global>
tags being parsed in a test specification context. - Fixed a bug for ignored variables; previously, only variables declared at the test group level would be ignored by the ignore directive. Now test-level variables are also acknowledged.
- Added a script
parse.py
that gives easy access to parse arbitrary fortran.f90
files with the option of overwriting the file cache for a specific module. Useful for debugging specific code to figure out why fortpy isn't doing what the user thinks it is being told to do. Usually the problem is with some stray syntax (e.g.!!
that is special to fortpy) and can be remedied easily. - Debugged a hard-coded value for copying group-level tags to test specifications that was causing duplication.
- Fixed a bug where derived-type variable instances with
allocate="true"
were not being allocated if their type was set astype
instead ofclass
. - Added
None
-type checks for theMethodFinder
testing group because of the allowances made in Revision 1.4.2.
- Fixed a bug raising an exception for
<prereqs>
that had no unit tests defined. The user ought to be able to call another pre-req method even if no unit test is defined, so long as that method is simple, has common parameters with the main one being unit tested and requires no initialization. - In connection with the first point, if
<prereq ... terminate="true" />
, we should also not look for any test docmentation or raises errors in connection with missing unit tests. - Fixed a bug that was appending test specification
Assignment()
objects to a non-existent collection on the parent object.
In previous versions of fortpy, the XML templates supported multiple test specifications with multiple <test>
tags. However, the <assignment>
and <global>
tags were only interpreted if they were included in the testing <group>
tag. This was a severe limitation. In cases where a subroutine has multiple, optional parameters that affect the behavior, the user should be able to test each case separately with multiple <test>
tags. That was fine except that they couldn't alter the values of the variables separately for each <test>
! That effectively made the ability to specify multiple <test>
tags worthless because they couldn't be distinct in their assignments and variable declarations.
The changes in this minor version remedy that problem. An additional attribute position is now acknowledged for <global>
and <assignment>
tags. It determines how variable and assignment tags are inserted relative to the those specified in the <test>
tags. Also, <prereq>
tags now have a chainto attribute that specifies which test in a testing group to use when chaining the pre-reqs. It also accepts the position attribute. If no chainto attribute is specified, fortpy chooses the first test in the group as decided by the keys()
of the dictionary of tests.
Next, the <input>
and <output>
tags only had meaning in the <test>
tags, but not in the <group>
tag. If some inputs/outputs are common to all the unit tests, the user should be able to specify them only once. To implement that, I also introduced the position attribute to those tags so that group-level <input>
, <output>
and <target>
tags can all be specified at either group/test level.
- Fixed a bug in the dependency searching caused by updating a list while it was being enumerated over; that messed up the indices being examined so that all the modules didn't get visited for the recursive dependency chaining.
- Set the default comparison across all templates for
float
types to include a finite precision check to 13 decimal places. This does not override thetolerance
attributes that can be set by the user in the<comparisons>
tag for custom templates. - Added some logic so that 1D data files could be either in row or column format and fortpy would detect that correctly and read in the 1D vector accordingly.
- Increased the precision on real types written out using
pysave()
infortpy.f90
to beF22.12
instead ofF12.7
.
- Bug fix: when modules were not marked as
private
, the contents were not being recognized as all public by fortpy. - Bug fix: standardized the keys for the
publics
attribute of modules to have only lower-case names, so that it is easier totree_find()
dependencies for variables with special types and kinds. - Fixed
allocate
statements for pointers to derived type variables; allocation was insertingTrue
as the size of the array to allocate to, when it should have done nothing.
- Fixed a bug for type parsing where the type would not be found if the
::
followed immediately without a space.
- Fixed a bug in the member and parameter parsing that couldn't handle
len=*
for character types. - Fixed a bug that would break the
<summary>
tag for modules if the tag included the word "module" in its text, even though it was commented out.
- Fixed a bug where the data file reading for unit testing was not skipping lines with the comment character, which obviously couldn't be cast as integers, reals, etc. Instead, I created two interfaces that can take real or integer values and read them from an arbitrary file; lots of code duplication in
fortpy.f90
, but the drivers are much cleaner now. - Fixed a variable parser bug where variables separated only by
,
and not,
were not found. - Fixed a bug with allocate dimensions where the logic was switched.
- Added dependency chaining when special kind parameters or derived types need to be declared in the driver that are not in the same module as the executable being unit tested.
- Added support for an
<assignment>
tag to set a constant value directly without needing to embed a<value>
tag. Just add the attributeconstant="value"
instead of setting the value attribute.
- Changed the data type kind variable names to be
fdp
,fsi
,fli
andfsp
to avoid conflict with common naming conventions.
- Fixed a problem with docstring orphaning caused by searching for module member keys (lower case) using an upper case search string.
- Added statements to ignore the MPI module in compilation; it was raising module not found exceptions when MPI is obviously something we don't need to worry about.
- Fixed a bug with function fitting introduced with Revision 1.3.5.
- Added fit-related dependent variable removal from
self.curargs["dependents"]
whenrmfit
is used. - Fixed issue #28
- Postfix functions weren't being applied anymore to the data because of the filter inclusion in each dependent variable. Fixed.
- Added property editing for all variables at once using
*
as the variable name. - Fixed a bug when setting plot line widths.
- Added additional support for postfix functions that return
None
values. - Fixed bug where line plots weren't including lines by default if any marker settings were given.
- Added option to set x and y axis plot limits.
- Added option for dependent variables to be plotted either with scatter or with plot. In the future it will be easier to add other options if we need to.
- Fixed some minor bugs from previous revisions uncovered during the enhancements.
- Allowed adding dependent variables from multiple filters for plotting and tabulating.
- Added plot options for
markers
,lines
andticks
. - Added font options for labels, axes, title and legend.
- Added the option to save and load
font
andticks
options to file; this allows publication quality settings to be saved and loaded into any analysis group easily. - This revision breaks the saved sessions from previous versions of the shell. Increment minor version.
- Fixed a problem in
fortpy.f90
where tab-delimited files were not being read in correctly.
- Added the option
[None]
as a possible label to remove a series from the plot legend in the test analysis shell. - Added ranges for specifying the cases in a unit test so that developers don't have to type out series of tests with sequential integers.
- Debugged the handling of multi-dimensional data for arrays restricted in one of its dimensions combined with an aggregation function.
- Added handling for fitting parameters that have values below
1e-2
so that their equations are displayed in scientific notation instead of plain decimal. - Added commands
rmcolor
,rmfit
,rmlabel
andrmpostfix
for removing these variable to value mappings.
- Added shell restarts on unhandled exceptions; the default is to restart 10 times before saving the shell and exiting.
- Added handling so that multiple dimensional data will still be attempted, but with a warning; this allows data that is 1D in certain dimensions to still be plotted/tabulated with an appropriate aggregation function across test cases.
- Added automatic fitting of linear and exponential functions to the plots.
- Added colors and plot legend/title settings/commands to the shell.
- Debugged the shell history getting extremely large from shell restarts.
- Added the option to view/clear the last unhandled exception caught by the shell.
- Fixed a bug in the test case filter that was matching nothing, so that no results ever made it to plots/tables.
- Added output of exception message in generalized unhandled exception trapper.
- Added
numpy
andmatplotlib
as pre-reqs for the fortpy installation.
- Fixed a bug introduced in revision 1.2.11 with path completions involving
~
. - Added validation for commands that require variables to be set; previously it caused an unhandled exception.
- Added global exception handling for commands. Instead of just dying, the session gets saved automatically to
#fortpy.shell#
before exiting when an unhandled exception occurs.
- Added support for directory navigation withing fortpy shell using
cd
,pwd
,ls
. - Fixed support for relative directories such as
..
when selecting files or folders.
- Fixed a bug in
scripts/analyze.py
for loading the shell history. For first time users with no history file, the script broke with a file not found error.
- Fixed a bug with imports in
/scripts/analyze.py
when the-pypath
parameter isn't used. - Added full documentation to the fortpy unit test analysis shell in
scripts/analyze.py
.
- Fixed bug in
scripts/compare.py
that broke when the file comparer was updated during a previous upgrade of the unit testing framework. Ironically, the lack of unit tests for fortpy didn't catch the bug introduced in the framework for performing fortran unit tests. - Added the module
testing/parser.py
to parse test case results and performing generic functions such as plotting, creating tables, etc. - Added the fortpy shell
scripts/analyze.py
that interfaces with test results to tabulate results, create plots, investigate failures, etc. - Fixed a bug that raised an exception when the model output files are empty.
- Fixed a bug where input files with more than 500 characters per line don't get all the data imported. Upped the value to 5000.
- Fixed a bug in the test input/output file generator where the generic value writer didn't handle the case of a
long
in python. - Added overflow error checking for the make files when compiling in DEBUG mode. Changed the default behavior of the
scripts/runtests.py
script to always run the fortpy unit tests in DEBUG mode unless the-nodebug
flag is specified.
- Fixed a bug that added the
pointer
modifier to class variables even if allocatable or pointer was already present as a modifier. The problem was anor
that should have been anand
. - Decided that the previous revision 1.1.6 should have included a minor increment because of the 1000+ lines of new/changed code. Switching this revision to 1.2.7 instead of 1.1.7.
- Fixed bug with uninitialized list of parsed programs as part of trying to support fortran PROGRAM files.
- Fixed bug for goto definition lookups not working in cases where they should.
- Fixed bug where global definitions for variables that are never in a parameter list can't be auto-generated.
- Fixed bug for variable value assignments from embedded methods in derived types.
- Fixed bug where allocation for local variables in the unit testing wasn't been generated for embedded methods.
- Fixed bug in variable dimension and default value parsing. The regex was stopping at the first
)
and then stripping all other parentheses in the string. The end result was that the propertyD
was wrong because it only counted,
instances in the string and when dimensions were specified with functions, there were lots of extra commas. - Added support for ragged array input files. If the file is 2D but a 1D array of objects needs to be initialized from each line in the file (with lines of differing length), then
ragged="true"
can be added to the<value>
tag and the ragged initialization is handled automatically. - Added support for
<part>
tags so that specific dimensions of arrays and arrays of objects can be initialized separately. This includes wildcard support for input file copying and initialization of higher-dimensional arrays from a series of 2D arrays. - Added support for allocate-only assignments of variables. An
<assignment>
tag can now have just aname
andallocate
attribute. Unless the variable is a derived-type pointer, theallocate
attribute must explicitly specify the dimensions of the array to allocate. - Added support for mixed file, function and embedded value assignments. This is especially useful in the context of ragged arrays and part assignments. For example, an array of objects where each elements needs to be initialized from a 2D input file via an embedded function is possible using a combination of
<part>
and<value>
tags where the<value>
tag has bothfile
andembedded
attributes specified. - Fixed a bug where the
allocatable
orpointer
modifiers were not being automatically added toclass
andtype
variables withregular="true"
.
- Fixed issue #20
- Fixed a "No summary for element." error in the intellisense that was returning no summary when one actually existed.
- Fixed an error in
fortpy.f90
where a failing condition on the first part of an if statement that used.and.
wasn't exiting the condition without evaluating the second part. This seems to be a quirk of the gfortran compiler. - Fixed issue #19
- Fixed issue #18
- Fixed issue #17
- Reversed the renaming of the variables kinds (e.g.
dp
) infortpy.f90
because they were breaking unit tests that previously functioned correctly. Opened an issue to address the problem.
- Fixed a bug where parameters with
regular="true"
weren't being found because the dictionary had lower-case keys and the variable name was upper-case. - Fixed parser bug for displaying and saving modifiers on executables.
- Fixed parser bug for determining the dependency modules.
- Added support for identifying modules that require pre-processing before compilation.
- Added configuration section
<libraries>
to fortpyconfig.xml
. Allows libraries to be explicitly specified for inclusion when linking the unit testing executable. - Added rule to the auto-generated makefile for creating a shared library of the executable being unit tested and all of its dependencies.
- Fixed parsing issues when identifying dependency calls inside of executables. This also fixed some isense issues caused by broken dependencies definitions.
- Added multiple cache support so that unit testing doesn't affect the "production" cache.
- Fixed versioning issue where the cache was not being invalidated when incompatible changes are made to the structure of classes that get serialized.
- Minor version release because of additional unit testing support and new support for interfaces.
- Added feature for auto-generating the global variable for custom types whose embedded methods are being tested. Usually, a
regular="true"
attribute is required to auto-generate a global variable. However, when embedded types are being called, they seldomly get commented with<parameter>
tags because it is well understood that the first argument is the type/class instance. - Fixed issue #9
- Added limited support for interfaces. Generic interfaces are supported with isense now. Although the parsers will handle the operator and assignment interfaces, support is not yet provided for actually using the symbols defined in those interfaces.
- Fixed issue #11
- Added more intelligent completions for embedded methods in derived types. Previously, all members and module procedures in an embedded type were returned with %-completion; now if the symbol is preceded by
call
, only embedded subroutine definitions are returned.
- Debugged error where the first parameter to an embedded procedure on a derived type was still being explicitly passed in to the embedded procedure. Since the compiler does that automatically, it was choking.
- Debugged the first real unit test case of an embedded method unit test.
- Debugged some additional allocation problems with auto-generated parameters in the unit testing.
- Fixed a bug that was preventing deferred shape arrays from being allocated automatically by fortpy in unit testing.
- Fixed a bug when comparing two simple representations where the second file has more entries than the first one.
- Fixed a misrepresentation of match success in the testing. The framework was using
common_match
in thepercent_match
routine which made wrong results seem a lot better. - Added coloring to the terminal output for all packages.
- Fixed bug in
fortpy.pysave
that made 2d saving not produce tabular input. - Fixed bug that crashed the program when
<isense>
was not present in theconfig.xml
file. - Added support for automated profiling of methods being tested using the -profile argument to
scripts/runtests.py
.
- Added
timed="true"
attribute support to the<test>
tag. - Fixed bug where an empty folder being cleaned would raise an exception on
remove()
- Added a check for executables being tested to make sure they have a
public
modifier or are in the list of public symbols in the parent module. - Added debug compile option to unit testing.
- Fixed automatic allocation errors for pointers.
- Fixed fortpy.f90 line and value counting routines.
- Added support for arrays of derived types; still get suggestions for embedded members if operating on an element of an array of derived types.
- Fixed a bug in
parsers.types
where "endtype" was not recognized. - Added
<isense>
section toconfig.xml
with an option to uppercase the builtin Fortran names by default with the suggestions.
- Fixed issue with fortpy/templates directory not being installed.
- Fixed issue with the builtin.xml file not being included in the distribution.
- Added support for gfortran compilation in unit testing
- Altered testing XML template to use
<test>
instead of<outcome>
- Allow multiple inputs using
<input>
tags instead of comma-separated list. - Allow multiple output comparisons with
<output>
tags instead of comma-separated list. - Added description attribute to
<test>
tag.
- Allow multiple inputs using
- Constant-input mode for testing. When a
<line>
template is specified for an<input>
tag, the call to the main method being unit tested can be repeated for each line in that input file. - Altered testing XML template to use
<assignment>
instead of<instance>
. - Variable value assignments directly from files.
<assignment>
tag now accepts additional attributes folder, file and rename.
- Major overhaul of underlying classes for the unit testing to make future feature enhancements much easier. Added the
elements
module in theisense
package. - Added support for built-in functions using information documented from a textbook that is now in
builtin.xml
. Added thebuiltin
module to parse and cache that XML documentation.