All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- added
TileScopePack.requirement_and_row_and_col_placements
AssumptionAndPointJumpingFactory
which adds rules where requirements and/or assumptions are swapped around a fusable row or column.PointJumpingFactory
which adds rules where requirements and assumptions can be swapped around a fusable row or column.MonotoneSlidingFactory
that creates rules that swaps neighbouring cells if they are 'monotone' fusable, i.e., they are a generalized fusion with a monotone local extra obstruction.DeflationFactory
which adds rules where cells can be deflated into increasing or decreasing cells as obstructions can't occur across the sum/skew components in that cell.CellReductionFactory
which changes a cell to monotone if at most one point of any crossing gp touches that cell.PositiveCorroborationFactory
that inserts into cells which if positive makes another cell empty. Also, thePointCorroborationFactory
, which does this for point or empty cells which is added to most packs.TargetedCellInsertionFactory
which inserts factors of gridded perms if it can lead to factoring out a verified sub tiling.BasisPatternInsertionFactory
which inserts permutations which are contained in every pattern in the basisComponentVerificationStrategy
which is added to component fusion packs.ComponentToPointAssumptionStrategy
that changes component assumptions to point assumptions. These strategies are yielded inRearrangeAssumptionFactory
.StrategyPack.kitchen_sinkify
to add many experimental strategies to the packSubobstructionInsertionFactory
that inserts subobstructions and the packTileScopePack.subobstruction_placements
which uses it.FactorWithInterleavingStrategy.backward_map
so you can now generate permutation from specifications using interleaving factors.DummyStrategy
that gives a quick template for making strategies.PointingStrategy
,AssumptionPointingFactory
andRequirementPointingFactory
that place points directionless in non-point cells. This are a non-productive strategy so should be used withRuleDBForest
.UnfusionFactory
that unfuses either all the rows or columns. Also non-productive.FusableRowAndColumnPlacementFactory
places fusable rows and columns.TrackedClassDB
used byTrackedSearcher
- counting for
GeneralizedSlidingStrategy
of rows (i.e.,rotate=True
)
Factor
was not factoring correctly with respect to component assumptions.ComponentAssumption
are flipped when taking symmetriesTiling.get_minimum_value
fixed for component assumptionsRearrangeAssumptionFactory
will ignore component assumptionsGriddedPermReduction.minimal_reqs
was removing requirements if they were duplicates.RequirementPlacement
algorithm didn't minimise obstructions correctly when placing size 2 or higher gridded perms.- added missing condition in
MonotoneSlidingFactory
for consecutive values. Previous rules failing this condition will now raiseStrategyDoesNotApply
if it fails this condition. LocalVerificationStrategy
needs to be aBasisAwareVerificationStrategy
PointJumping
maps component assumption to component assumptions.Tiling.all_symmetries
had a premature break statement that was removedshift_from_spec
method would previously fail if any tiling had two or more interleaving cells.
TileScopePack.make_tracked
will add the appropriate tracking methods for interleaving factors and make strategies tracked if it can be.- The
GriddedPermReduction
limits the size of obstructions it tries to infer in theminimal_obs
method to the size of the largest obstruction already on the tiling. - The
SymmetriesFactory
takes a basis and will not return any symmetries where any of the patterns of the obstruction are not subpatterns of some basis element. If no basis is given, all symmetries are returned. RequirementPlacement
adds empty cells when placing a point cell. This saves some inferral in partial placements.- Don't reinitialise in the
Tiling.from_dict
method. GuidedSearcher
expands every symmetryTileScopePack.pattern_placements
factors as an initial strategy.is_component
method of assumptions updated to consider cell decompositionAddAssumptionsStrategy.is_reverible
is now True when the assumption covers the whole tiling.- The default behavior for
RequirementInsertion
is to allow insertion of factorable requirements OneByOneVerificationStrategy
will look up permpal.com to find the generating functions and min polys, and also use permpal specs for counting, sampling and generating objects.- The
kitchen_sinkify
function onTileScopePack
now takes a level between 1 and 5 as input, which is used to determine how crazy the added strategies should be.
AddInterleavingAssumptionsFactory
. The factor strategy now adds the relevant assumptions where necessary directly, lowering the number of CVs needed.
Tiling.remove_requirement
method that removes a requirement from a tiling.RemoveRequirementFactory
which adds the rules where we insert a requirement to a tiling after we first remove that requirement. This is added toLocallyFactorableVerificationStrategy.pack
.- The tiling initialiser will now add factors of obstructions if it is implied by multiple different obs and one requirement list of size possibly greater than one. Previously it was only doing the case where a single ob's factor is implied by a requirement.
ForgetTrackedSearcher
was not retroactively applying strategies that had abasis
.- Bug with sliding symmetries
- The tiling initialiser was not removing duplicate/redundant requirements.
- One by one verification will now only verify subclasses of the given basis.
- Verification strategies no longer ignore parent
TrackedSearcher
now uses aTrackedQueue
and is able to work with all packs and new future strategies.
- Python 3.7 is no longer supported
- Rearrange assumption strategy
TrackingAssumption.from_cell
method- Counting for reverse fusion
FusionParallelSpecFinder
,FusionIsomorphism
andFusionBijection
subclasses to handle bijection involving fusion and assumption strategies.- a
insertion_point_row_and_col_placements
pack inTileScopePack
TrackedSearcher
andForgetTrackedSearcher
that prioritise expanding classes with assumptions when the underlying tiling was expandedTileScopePack.cell_insertions
which only does cell insertion and verification
- Updated to use comb_spec_searcher 4.0.0
- Using
strategy_pack.make_fusion
orstrategy_pack.make_tracked
now automatically addsRearrangeAssumptionFactory
withapply_first=True
iftracked=True
- Moved several local function in
RearrangeConstructor
outward to make it pickleable - Fixed isolated fusion bug
- Fusion is now a one-way strategy.
- Added length to name for
all_the_strategies
pack - pack for locally factorable now account for the basis.
- Removed a redundant
Tiling.is_empty
check in the fusion algorithm. - Ensure
is_atom
returns False for the empty tiling
- Python 3.6 is no longer supported
- Added sliding strategy
- 'GuidedSearcher' class which will search for specification with a specific set of underlying tilings. Includes methods 'from_spec' and 'from_uri' which creates a 'GuidedSearcher' instance.
- Creates a new
LimitedAssumptionTileScope
that allows you to set a maximum number of assumptions allowable on any tiling
- Updated comb_spec_searcher version for faster counting
- Added a point placement strategy to partial row and col placement packs.
TileScopePack.make_tracked
return a new pack with tracked fusion instead of only adding theAddAssumptionFactory
to the packmake_fusion
andmake_interleaving
make the pack name a little more descriptive- Updated short obstruction verification to take a length argument
to_tex
for gridded perms.to_tikz
for gridded perms.to_svg
for gridded perms.to_gui
for tilings.- Mappings for gridded perms:
column_reverse
,row_complement
,permute_columns
,permute_rows
andapply_perm_map_to_cell
. - Mappings for tilings:
column_reverse
,row_complement
,permute_columns
,permute_rows
,apply_perm_map_to_cell
. guess_from_gridded_perms
to guess tiling T from gridded perms in Grid(T).enmerate_gp_up_to
counts gridded perms of length 0, 1, 2, ... up to a max length.- Can sample and generate objects from fusion specifications.
- Anti-diagonal symmetry backward map was fixed.
- Dependency issue when installing
- introduced isolation levels to the fusion strategy
- added the
one_cell_only
option toCellInsertionFactory
remove_components_from_assumptions
method toTiling
DetectComponentsStrategy
which removes cells from assumptions which are actual components. This replaces the need for theSplittingStrategy
in component fusion packs.- added equation generators to
FusionStrategy
for the case where one or both sides are positive - added a
to_html_representation
method toTiling
SubclassVerificationFactory
and the corresponding strategyis_subclass
method toTiling
- added
point_and_row_and_col_placements
strategy ShortObstructionVerificationStrategy
- using Github Actions for testing and deployment
- insertion packs now use the
one_cell_only
option, and no longer useRequirementCorroborationFactory
- the
get_eq_symbol
andget_op_symbol
are moved toStrategy
rather thanConstructor
- the
GriddedPermsOnTiling
algorithm was changed to build from minimal gridded perms in a breadth first manner. This is also include an option to limit the number of points placed on the minimal gridded perms. - new default behavior of
RequirementInsertionFactory
is to only insert requirements on tilings that don't already have any - converted the expansion strategies in several strategy packs to be a single set
- requirement corroboration is only enabled when requirements of length > 1 are placed
- A gridded permutation can now be built from any iterable of integer, not only from permutation.
- untracked constructors raise
NotImplementedError
- forbid fusing a region containing a
TrackingAssumption
and aComponentAssumption
- a tiling factors if a
ComponentAssumption
if the components of the region split into the factors - only fuse non-empty regions to avoid creating unintentional rules a -> b where a and b are equivalent
- remove duplicate assumptions in the
AddAssumptionsStrategy
Tiling.from_dict
will make aTiling
with no assumptions if theassumptions
key is not in the dictionary.- a factor with interleaving strategy has
inferrable=True
- a factor with interleaving strategy return a normal factor strategy when there's no interleaving going on.
- removed the length argument to the
insertion_point_placements
pack which was not implemented, and thus raising an error. - Bug that occurred when factoring the empty tiling
- fixed that the
partial
flag was ignored inpoint_placements
- isolation levels were not being passed to component fusion
- expanding a symmetry of 132 with both length 2 requirements
- add the
can_be_equivalent
methods toAddAssumptionsStrategy
,SplittingStrategy
, andFusionStrategy
. - added a
get_assumption
method toTiling
- the
Factor
algorithm will now factorTrackingAssumptions
if they span multiple factors of the tiling. This means that theSplittingStrategy
is removed from the trackedStrategyPack
. It does not factorComponentAssumptions
, so using this strategy still requires theSplittingStrategy
.
- remove empty assumptions when creating extra parameters in
FusionStrategy
- the method
Tiling.get_genf
returns the Catalan generating function for Av(123). - correct the generating function equations for
SplittingStrategy
- Removed optional arguments from the
from_bytes
method onTiling
- add a new
AddAssumptionStrategy
which adds an assumption to a tiling. In practice, when expanding a class, we actually remove an assumption to determine which rules to add. - the
get_equations
method is now implemented for the strategiesAddAssumptionStrategy
,SplittingStrategy
, andFusionStrategy
. - the
extra_paramters
method was implemented for symmetry strategies, allowing these to be used when enumerating tracked trees. - Add the
InsertionEncodingVerificationStrategy
which verifies n x 1 and 1 x n tilings which have a regular topmost or bottommost insertion encoding. - Added the
SumComponentAssumption
andSkewComponentAssumption
giving the ability to track specifications using component fusion. - add partial flag to
insertion_point_placements
andinsertion_row_and_col_placements
- Allow fusing rows and columns which are positive on either or both sides.
- The tracking of interleaving factors is implemented, including the poly time
algorithm. This includes the new strategy
AddInterleavingAssumptionFactory
which adds the assumptions required in order to enumerate when performing an interleaving factor strategy. - The
TileScopePack
has a new methodmake_interleaving
which by will change any factor strategy in the pack to allow interleaving. The default setting is for tracked, and so the assumption strategies are also added. This can be turned off with the flagtracked=False
. - The
possible_parameters
method onTiling
allowing for sanity checking specifications with multiple variables. InsertionEncodingVerificationStrategy
was added to verification expansion packs.forward_map_assumption
method onTiling
.
- The definition of a local
TrackingAssumption
inLocalEnumeration
now says it is local if every gp in it is local (before it was they all used the same single cell). - the default in
LocalVerificationStrategy
is nowno_factors=False
.
- untracked fusion packs don't add assumption strategies
- the length parameter for
all_the_strategies
is passed correctly to the requirement insertion strategy. - use fusion on positive
Av(123)
when expanding 1x1 verified classes - fix bug that prevented applying all eight symmetries
- fix assumption mapping bug in
FusionStrategy
- fix
__repr__
inFusionStrategy
All the necessary strategies for combinatorial exploration.
Refactoring and speed up of many algorithm most notably the is empty check.
- Support for Python 3.5 and earlier
- Update dependency versions
- Update comb_spec_searcher to 0.2.1
- Remove factors from requirements if already implied by other requirement list.
- Added tiling method
is_empty_cell
andis_monotone_cell
- The
cell_basis
method of the tilings has an 1 obstruction for empty cell. The basis of a cell that is outside of the tiling is no longer defined. - The requirement list in
cell_basis
method now finds intersections of requirement lists - New
add_list_requirement
method toTiling
.
- Infinite recursion issue in get_genf.
- Close mongo when finished.
- This changelog.