Version Log


In [ ]:
'''
=======
Scripts
=======

Fast Plots, Initial Conversion from Excel to Python

0.1         Legacy Script - Laminate_Stress_Constant_Thickness_1g.ipynb
            - Calculates stress, plot, export data for single geometry.
            Supports insets.
0.2         - Legacy Script - Laminate_Stress_Constant_Thickness_2d.ipynb
            - Handles multiple geometries, heiarchical indexing, more...
0.3         Legacy Script - Laminate_Stress_Constant_Thickness_3a3.ipynb
            - Abstracted layers to classes.
            - Forked to become the LamAna project.

=============
Local Program
=============

Standalone Program, Abstracted for General Application, Single Notebook

0.4.0       Organized module and package layout
0.4.1       Most user inpurt API conventions worked out
            - `input_.Geometry`
            - `distributions.Case(*args)`, `distributions.Case().apply()`
            - `Geometry().itotal()`
0.4.2       General Convention standardized types for Geometry object
0.4.2a      Developed total method; float and list wrappers covering attributes
0.4.2b      Develop total methods and tests; cleaned docs
0.4.3       Developed `contructs` module to return DataFrames
0.4.3a      Built Stack class giving skeletal layout for each Geometry
0.4.3b      Implemented namedtuples called `StackTuple` in the `Stack` class
            - Deprecated ModdedList and ModdedFloat wrappers
            - Implemented namedtuples called GeometryTuple in the `Geometry` class
            - Made unittest for p >= 1 (odd and even)
0.4.3c      Added stress states to laminates.
0.4.3c1     Refactored the ConstuctTheory workflow
            - Refocused on building separate Construct and Theory objects
            - Removed double call of snapshot and laminate model in Case
0.4.3c2     Laminate object made the official LaminateModel object w/ __repr__
            - laminate_tuple deprecated. self attrs used instead
            - LaminatModel object is now Laminae self called directly in Case
            - `LM` attribute returns the LaminateModel object
            - Refactored frames and snapshots to generate lists only when called.
0.4.3c3     Developed Laminate Object to calculate Planar variables
0.4.3c4     Implemented update_columns() into Laminate as `_update_dimensions()`.
            First trial with version 4a.  Testing needs resolution.
            Refactored `_update_dim..()` w/copies and returns; cleared warnings.
            1.5x longer to run 62 tests with now; from 33s to 86s.
            Tested Planar values for different plies, ps.
0.4.3c4b    Verify values and algorightms with CLT.
            - Added drag and drop spreadsheet testing of laminates.
            - Removed a labels test with improved test speed.
            - Built the `utils.tools` modulue and implemented in tests.
            - Fixed critical BUG in inner_i ordering.
0.4.3c4c    Cleaned deprecations, and made use of `laminator()`
            - Applied `shift` to discontinuity values.
            - Added nplies, p, total attrs to Laminate
0.4.3c4d    Vectorize _update_dimensions().  Deprecated for tech.
            - Documented alogrithms.
            - Made test_controls for various case controls.
            - Deprecated Laminae classes; maybe someday.  Only dfs for now.
            - Rename to LFrame. Changed planar term to dimensionals.
0.4.3c5     Deprecation code cleared.
            Learned about iterators, generators, gen expressions and  more.
0.4.3c5a    Add iterator functionality; replaced empty list/append code.
            - Add lt_exceptions for relevent error handling.
0.4.3c5b    The Big Generator Switch
            - Improved architexture using generators in Geometry and Stack.
            - The StackTuple has added alias and unifed name to 'n-ply'.
              decode_geometry() and indentify_geometry() were refactored.
            - Running 75 tests at 109s.  No big speed up.  The tests are slow.
0.4.3c6     Marked for theories model and Data variable implementation.
            - LFrame returns IDs and Dimensional columns only
            - LMFrame returns full DataFrame.
            - Many tests developed for theories and models.
            - Models accepted as functions or classes
            - Minor exception handling to prevent backdoor API breaking.
0.4.3d      Deprecations, cleanup, reorganization, documentation.
            - Deprecated .itotal()
            - Renamed Model to BaseModel and subclassed from it.
            - Refactored laminator to yield case, not LMs
            - Reorganized docs; added Delta Code and new case build idioms (2/3)
            - Refactored tests for new case build ideology (Py2/3 compliant)
            - Started Cases object outline to replace laminator.
0.4.3d1     continued...
            - Defaults() abstracted to BaseDefaults()
            - Defaults() subclassed in Wilson_LT
            - Refactored BaseDefaults() geo_inputs dict keys with names
            - Automated BaseDefaults() groupings
            - Built smarter tests to allow extension of BaseDefaults()
            - Moved BaseDefaults() from utils.tools to input_ module
            - Geometry and LaminateModel objects support == and != comparisions
0.4.3d2     continued...
            - Rename geo_params to load_params
0.4.3d3     continued...
            - Changed mat_params default type from Dataframe to (nested) dict
            - mat_params now DataFrame and assert_equally-friendly
            - Cleaner exception handing of apply(mat_params)
            - Deprecated materials_to_df in favor of Standard Form conversions
            - Replaced @staticmethod with @classmethod
            - Cleaned Case helpers; moved to BaseDefaults
0.4.3d4     continued...
            - Refactored FeatureInput; Parameters, Properties, Materials...
            - Support of ordered materials lists
            - Added get_materials()
            - Extended case params and props to give Series and DataFrame views
            - Tested models columns by written new .csv files
            - Cleanup, privatizing, Geo_object comparison tests, user-defined
              material setting, material stack order tests, change to mat_props.
0.4.4       Marked `distributions` plotting.
            - Defined Cases and select method.
            - Made Geometry and Laminate hashable for set comparison w/tests.
            - Extended Cases.select() with set operations.
            - Implemented Cases.to_csv
            - Implemented Cases in distributions
            - Wrote Cases tests.
0.4.4a      Cases documentation in intermediate tutorial; upgrade from beta
0.4.4b      Cases.__eq__ handles DataFrame/Series attrs
            - Laminate.__eq__ handles DataFrame/Series attrs
            - Refactored LPEP numbers.  LPEP 001 contains micro-PEPs.
            - Plotting
            - Reverted to k=1 to correlate w/LT definitions in the paper.
0.4.4b1     continued...
            - Initial implementation of case.plot()
            - Using library from external notebook for 1st demo to prof.
            - Worked through labeling keywords for plots
            - _distribplot: halfplots, annotations, insets, extrema
            - _multiplot: nrows, ncols, deletes empty axes, labels
            - Added LAMANA_PALETTE
            - Implemeentated Laminate.extrema
            - Rewrote controls with new k algorithm
            - Reorganized ToDo list: headings (functionalize, clarify, optimize).
0.4.4b2     continued...
            - Final implementation of case.plot(), _distribplot() & _multiplot()
            - Cleanup docstrings, move abstractions to beta, clean beta
            - Implement Case.plot() multiplots
            - Revise Demo notebook.
0.4.4b3     continued...
            - Make Cases process cases
            - Implement Cases.plot() multiplots
            - LPEP 003 Pattern development and cases input standards.
0.4.5       Marked for release candidate 1
            - Cleanup
            - Refined exception handing of rollback; improved dormant tests
            - Implemented lt_exceptions and IndeterminateError
            - Register GitHub, pypitest and pypi
            - prepare revised repo structure
0.4.5a1     BRCH: Refactor iteration in Geometry, distributions and Laminate.
            - Refactored *.apply iter strings, not objects, cache ... 100s faster
            - 198 tests ~300s, 200s faster since output_
            - Coded is_valid() with regex
            - Write References to utils
            - Finalize stable release before pip and GitHub upload; old-sytle
0.4.5b1     First Fork from stable package.
            - move is_valid to Beta-functionalize; cleanup Quick tests
            - Use text editor, Atom, to rename lamana, sp check and remove tabs
            - Make Main template for pull and push
            - Repo redesign
            - flake8
0.4.5b2     "Pull" from flake8'd core modules.
            - Pulled updated modules
            - Figure out __version__
            - Suspended repo changes until official GitHub push.

===============
The Large Split
===============

Version Control, GitHub Upload, Open Source Tools, PyPI Releases, Separated Notebooks

0.4.6       Official GitHub release (usable; needs repo maintenace)
            - Reflects suspended repo state as of 0.4.5b2
            - Nearly equals 0.4.5b2 but cleaner directory, new repo tree
            - Uses new templates to run code; clonable
            - Minimal point releases allowed.
            - Updated version number.
0.4.7       Initial PyPI release
            - Rolled back due to pandas breaking
0.4.8       Pre-conda, gitflow, travis release: dev reliable
            - Init gitflow
            - Add Travis CI to install pinned dependencies and check builds
            - Pass builds 2.7, 3.3, 3.4, 3.5, 3.5.1 on Linux
            - Main deps matplotlib==1.4.3, numpy==1.9.2, pandas==0.16.2
            - Reproducible builds with `pip freeze`, pinned deps (LPEP 001.14)
            - Suggest "Hands-on/off" pip install options
            - Update license info
            - Update release workflow in tutorial
0.4.9       Flagship PyPI release
            - Install with conda through pip
            - Works with IPython/Jupyter
            - Add `find_version()` to `setup.py`; confirm tarball url works
            - Update source to use latest `pandas>=0.17.1` and `numpy`
            - Fixed pandas issue (backwards compatible):
              - replace `np.cumsum` with pandas `aggregate` method
              - replace pandas `sort` with `sort_index`
0.4.10      Documentation Release
            - flake8
            - docs
            - numpy docstrings
            - Register readthedocs
            - Initial codecov and coverage
            - nb templates (main, doc-builder)
            - Fix df.sort to address pandas API changes in 0.17.1
            
0.4.11      Housekeeping - cross-platform stability, coverage and more
            - Add environment.yaml files for 2.7, 3.3 and 3.5
            - Continuous Integration on Windows (using Appveyor); no 64x Py3.4 support
            - Add negative index handling in Cases (not negative step)
            - Deprecate __getslice__ in Cases(); affect Py < 2.6
            - Improve coverage (+20%)
            - Try logging
            - Add dashboards; revamp export 
            - Speed up readthedocs
            - Refactor BaseModel with abstract hook method
            - Add warnings
            - Deprecate warn util.write_csv, Cases.to_csv
            - Add config file
            - Add py35 environment yaml
            
0.4.12      Hotfix - unpinned dependencies
            - Add openpyxl to setup.py; fix export BUG
            - Add six to setup.py
            - Resolve workflow for nb regression tests
            - Add picture to README
            - Fix Appveyor badge
            - Add conda install deps to instructions for reliable install
            - Clean up docs

'''