3232
3333from opencolorio_config_aces .utilities import (
3434 attest ,
35+ filter_all ,
36+ filter_any ,
3537 message_box ,
3638 optional ,
3739 paths_common_ancestor ,
@@ -1511,8 +1513,11 @@ def generate_amf_components(
15111513
15121514
15131515def filter_amf_components (
1514- amf_components : dict [str , list [str ]], aces_transform_id : str
1515- ) -> list [str ] | None :
1516+ amf_components : dict [str , list [str ]],
1517+ aces_transform_id : str ,
1518+ filter_any_filterers : list [Callable [[dict [str , Any ]], bool ]] | None = None ,
1519+ filter_all_filterers : list [Callable [[dict [str , Any ]], bool ]] | None = None ,
1520+ ) -> list [str ]:
15161521 """
15171522 Filter the *ACES* *AMF* components for specified *ACEStransformID*.
15181523
@@ -1522,16 +1527,79 @@ def filter_amf_components(
15221527 *ACES* *AMF* components to filter.
15231528 aces_transform_id : str
15241529 *ACEStransformID* to filter the *ACES* *AMF* components with.
1530+ filter_any_filterers : list[Callable[[dict[str, Any]], bool]] | None, optional
1531+ List of filter functions for OR logic filtering. Each function should
1532+ accept a dictionary with *transform_id* key and return True if the
1533+ element passes the filter condition.
1534+ filter_all_filterers : list[Callable[[dict[str, Any]], bool]] | None, optional
1535+ List of filter functions for AND logic filtering. Each function should
1536+ accept a dictionary with *transform_id* key and return True if the
1537+ element passes the filter condition.
15251538
15261539 Returns
15271540 -------
1528- :class:` list`
1541+ list
15291542 Filtered *ACES* *AMF* components.
1543+
1544+ Examples
1545+ --------
1546+ >>> amf_components = {
1547+ ... "DISPLAY - CIE-XYZ-D65_to_sRGB - MIRROR NEGS": [
1548+ ... 'urn:ampas:aces:transformId:v2.0:Output.Academy.\
1549+ Rec709-D65_100nit_in_Rec709-D65_sRGB-Piecewise.a2.v1',
1550+ ... 'urn:ampas:aces:transformId:v2.0:InvOutput.Academy.\
1551+ Rec709-D65_100nit_in_Rec709-D65_sRGB-Piecewise.a2.v1',
1552+ ... 'urn:ampas:aces:transformId:v2.0:Output.Academy.\
1553+ Rec709-D60_100nit_in_Rec709-D65_sRGB-Piecewise.a2.v1',
1554+ ... 'urn:ampas:aces:transformId:v2.0:InvOutput.Academy.\
1555+ Rec709-D60_100nit_in_Rec709-D65_sRGB-Piecewise.a2.v1'
1556+ ... ]
1557+ ... }
1558+ >>> filterers_all = [lambda x: "-D60_" not in x['transform_id']]
1559+ >>> filter_amf_components(
1560+ ... amf_components,
1561+ ... "DISPLAY - CIE-XYZ-D65_to_sRGB - MIRROR NEGS",
1562+ ... filterers_all
1563+ ... ) # doctest: +ELLIPSIS
1564+ ['urn:ampas:aces:transformId:v2.0:Output.Academy.\
1565+ Rec709-D65_100nit_in_Rec709-D65_sRGB-Piecewise.a2.v1', \
1566+ 'urn:ampas:aces:transformId:v2.0:InvOutput.Academy.\
1567+ Rec709-D65_100nit_in_Rec709-D65_sRGB-Piecewise.a2.v1']
1568+ >>> filterers_all = [lambda x: "-D60_" in x['transform_id']]
1569+ >>> filter_amf_components(
1570+ ... amf_components,
1571+ ... "DISPLAY - CIE-XYZ-D65_to_sRGB - MIRROR NEGS",
1572+ ... filterers_all
1573+ ... ) # doctest: +ELLIPSIS
1574+ ['urn:ampas:aces:transformId:v2.0:Output.Academy.\
1575+ Rec709-D60_100nit_in_Rec709-D65_sRGB-Piecewise.a2.v1', \
1576+ 'urn:ampas:aces:transformId:v2.0:InvOutput.Academy.\
1577+ Rec709-D60_100nit_in_Rec709-D65_sRGB-Piecewise.a2.v1']
15301578 """
15311579
1532- filtered_amf_components = list (amf_components .get (aces_transform_id , []))
1580+ filtered_amf_components = amf_components .get (aces_transform_id , [])
1581+
1582+ if filter_any_filterers or filter_all_filterers :
1583+ filtered_amf_components_dicts = [
1584+ {"transform_id" : transform_id } for transform_id in filtered_amf_components
1585+ ]
1586+
1587+ if filter_any_filterers :
1588+ filtered_amf_components_dicts = filter_any (
1589+ filtered_amf_components_dicts , filter_any_filterers
1590+ )
1591+
1592+ if filter_all_filterers :
1593+ filtered_amf_components_dicts = filter_all (
1594+ filtered_amf_components_dicts , filter_all_filterers
1595+ )
1596+
1597+ filtered_amf_components = [
1598+ filtered_amf_components_dict ["transform_id" ]
1599+ for filtered_amf_components_dict in filtered_amf_components_dicts
1600+ ]
15331601
1534- return filtered_amf_components if len ( filtered_amf_components ) else None
1602+ return filtered_amf_components
15351603
15361604
15371605if __name__ == "__main__" :
0 commit comments