- Renamed `dedupe_policy_shards` to `dedupe_policy_shard_subsets` to differentiate it from `delineate_intersecting_shards`.
- Added `delineate_intersecting_shards` to reduce the size of `PolicyShard`s which have conditions whose ARPs intersect with ones without conditions.
This helps clear up [10](https://github.com/CloudWanderer-io/PolicyGlass/issues/10)
- Improved `issubset` on `PolicyShard` to recognise that a shard without conditions CANNOT be a subset of a shard with conditions.
- Added `<` and `>` to `PolicyShard`.
- Updated `difference` on `PolicyShard` so that it only adds `other`'s conditions to `self`'s not_conditions if self is allow and other is deny.
- Added documentation on how PolicyShard dedupe works
- Renamed `ConditionCollection` to `RawConditionCollection`
- Ensured that Conditions are always treated as a set not a list.
- Ensured that Condition's Operator, Key, Values are always of type ConditionOperator, ConditionKey and ConditionValue.
- Corrected bug in `CaseInsensitiveString` that caused it to generate case sensitive hashes.
- Added `dedupe_result` param to `difference` method on `PolicyShard` to allow merging of intersecting shards that are not subsets of one another.
- Added `intersection` to `PolicyShard`.
- Prevent attempting to calculate the difference between a Deny shard and an Allow shard. Other way makes sense as that's effective permission.
- Updated PolicyShard implementation to Support pydantic 1.9