HerbCore.jl Documentation
HerbCore.AbstractConstraint — TypeRepresents a constraint for a AbstractGrammar. Concrete implementations can be found in HerbConstraints.jl.
HerbCore.AbstractGrammar — TypeAbstractGrammarAbstract type representing all grammars. It is assumed that all grammar structs have at least the following attributes:
rules::Vector{Any}: A list of RHS of rules (subexpressions).types::Vector{Symbol}: A list of LHS of rules (types, all symbols).isterminal::BitVector: A bitvector where bitirepresents whether ruleiis terminal.iseval::BitVector: A bitvector where bitirepresents whether rule i is an eval rule.bytype::Dict{Symbol,Vector{Int}}: A dictionary that maps a type to all rules of said type.domains::Dict{Symbol, BitVector}: A dictionary that maps a type to a domain bitvector. The domain bitvector has bitiset to true iff theith rule is of this type.childtypes::Vector{Vector{Symbol}}: A list of types of the children for each rule.
If a rule is terminal, the corresponding list is empty.
log_probabilities::Union{Vector{Real}, Nothing}: A list of probabilities for each rule.
If the grammar is non-probabilistic, the list can be nothing.
For concrete types, see ContextSensitiveGrammar within the HerbGrammar module.
HerbCore.AbstractHole — TypeAbstractHole <: AbstractRuleNodeA AbstractHole is a placeholder where certain rules from the grammar can still be applied. The domain of a AbstractHole defines which rules can be applied. The domain is a bitvector, where the ith bit is set to true if the ith rule in the grammar can be applied.
HerbCore.AbstractRuleNode — Typeabstract type AbstractRuleNode endAbstract type for representing expression trees. An AbstractRuleNode is expected to implement the following functions:
isfilled(::AbstractRuleNode)::Bool. True iff the grammar rule this node holds is not ambiguous, i.e. has domain size 1.isuniform(::AbstractRuleNode)::Bool. True iff the children of this node are known.get_rule(::AbstractRuleNode)::Int. Returns the index of the grammar rule it represents.get_children(::AbstractRuleNode)::Vector{AbstractRuleNode}. Returns the children of this node.
Expression trees consist of RuleNodes and AbstractHoles.
- A
RuleNoderepresents a certain production rule in theAbstractGrammar. - A
AbstractHoleis a placeholder where certain rules in the grammar still can be applied.
HerbCore.AbstractUniformHole — TypeHole <: AbstractHoleAn AbstractUniformHole is a placeholder where certain rules from the grammar can still be applied, but all rules in the domain are required to have the same childtypes.
HerbCore.Hole — TypeHole <: AbstractHoledomain: A bitvector, where theith bit is set to true if theith rule in the grammar can be applied.
HerbCore.HoleReference — TypeHoleReferenceContains a hole and the path to the hole from the root of the tree.
HerbCore.RuleNode — TypeRuleNode <: AbstractRuleNodeA RuleNode represents a node in an expression tree. Each node corresponds to a certain rule in the AbstractGrammar. A RuleNode consists of:
ind: The index of the rule in theAbstractGrammarwhich this node is representing._val: Field for caching evaluations ofRuleNodes, preventing multiple unnecessary evaluations. The field can be used to store any needed infromation.children: The children of this node in the expression tree
HerbCore.RuleNode — MethodRuleNode(ind::Int, _val::Any)Create a RuleNode for the AbstractGrammar rule with index ind, _val as immediately evaluated value and no children
Only use this constructor if you are absolutely certain that a rule is terminal and cannot have children. Use [RuleNode(ind::Int, grammar::AbstractGrammar)] for rules that might have children. In general, AbstractHoles should be used as a placeholder when the children of a node are not yet known.
HerbCore.RuleNode — MethodRuleNode(ind::Int, children::Vector{AbstractRuleNode})Create a RuleNode for the AbstractGrammar rule with index ind and children as subtrees.
HerbCore.UniformHole — TypeUniformHole <: AbstractHoledomain: A bitvector, where theith bit is set to true if theith rule in the grammar can be applied. All rules in the domain are required to have the same childtypes.children: The children of this hole in the expression tree.
HerbCore.@rulenode — Macro@rulenodeConstruct a RuleNode using the shorthand notation RuleNodes and AbstractHoles are printed with using Base.show.
Does not yet support AbstractHoles defined outside of HerbCore.
AbstractHoles' domains are printed with a Bool[...] surrounding them. The macro accepts the domain with or without the Bool[...]: UniformHole[Bool[1, 1, 0, 0]]{2,3} and UniformHole[1, 1, 0, 0]{2,3} both work.
Examples
julia> @rulenode 1{4{5,6},1{2,3}}
1{4{5,6},1{2,3}}
julia> @rulenode 1
1
julia> @rulenode 1{2, 3}
1{2,3}
julia> @rulenode UniformHole[1, 1, 0, 0]{2,3}
UniformHole[Bool[1, 1, 0, 0]]{2,3}
julia> @rulenode Hole[1, 1, 0, 0]
Hole[Bool[1, 1, 0, 0]]
Base.isless — MethodBase.isless(rn₁::AbstractRuleNode, rn₂::AbstractRuleNode)::BoolCompares two RuleNodes. Returns true if the left RuleNode is less than the right RuleNode. Order is determined from the index of the RuleNodes. If both RuleNodes have the same index, a depth-first search is performed in both RuleNodes until nodes with a different index are found.
Base.length — MethodBase.length(root::RuleNode)Return the number of nodes in the tree rooted at root.
HerbCore.contains_hole — Methodcontains_hole(rn::RuleNode) = any(contains_hole(c) for c ∈ rn.children)Checks if an AbstractRuleNode tree contains a AbstractHole.
HerbCore.contains_index — Methodcontains_index(rulenode::RuleNode, index::Int)Returns true if the rulenode contains the index.
HerbCore.contains_nonuniform_hole — Methodcontains_nonuniform_hole(rn::RuleNode)Checks if an AbstractRuleNode tree contains a Hole.
HerbCore.depth — Methoddepth(root::RuleNode)::IntReturn the depth of the AbstractRuleNode tree rooted at root. Holes do count towards the depth.
HerbCore.get_children — Methodget_children(rn::AbstractRuleNode)Returns the children of the given AbstractRuleNode
HerbCore.get_node_at_location — Methodget_node_at_location(root::AbstractRuleNode, location::Vector{Int})Retrieves a RuleNode at the given location by reference.
HerbCore.get_node_at_location — Methodget_node_at_location(root::Hole, location::Vector{Int})Retrieves the current hole, if location is this very hole. Throws error otherwise.
HerbCore.get_path — Methodget_path(root::AbstractRuleNode, node::AbstractRuleNode)Returns the path from the root to the targetnode. Returns nothing if no path exists.
HerbCore.get_rule — Methodget_rule(rn::AbstractRuleNode)Returns the index of the rule that this AbstractRuleNode represents
HerbCore.get_rulesequence — Methodget_rulesequence(node::RuleNode, path::Vector{Int})Extract the derivation sequence from a path (sequence of child indices) and an AbstractRuleNode. If the path is deeper than the deepest node, it returns what it has.
HerbCore.hasdynamicvalue — Methodfunction hasdynamicvalue(rn::AbstractRuleNode)::BoolReturns true iff the rule has a _val field set up.
HerbCore.have_same_shape — Methodhave_same_shape(node1::AbstractRuleNode, node2::AbstractRuleNode)Returns true iff node1 and node2 have the same shape Example: RuleNode(3, [ RuleNode(1), RuleNode(1) ]) and RuleNode(9, [ RuleNode(2), Hole(domain) ]) have the same shape: 1 root with 2 children.
HerbCore.is_domain_valid — Functionis_domain_valid(x, n_rules::Integer)
is_domain_valid(x, grammar::AbstractGrammar)Check if the domain for the given object x (ex: RuleNode, Hole or AbstractConstraint) is valid given the provided grammar or number of rules.
If isfilled(x) and x has children, it checks if all children are valid.
HerbCore.isfilled — Methodisfilled(node::AbstractRuleNode)::BoolReturns whether the [AbstractRuleNode] holds a single rule. This is always the case for RuleNodes. Holes are considered to be "filled" iff their domain size is exactly 1.
HerbCore.issame — Methodissame(a, b)Returns whether the two given objects a and b (ex: RuleNode, Hole or AbstractConstraint) are the same.
HerbCore.isuniform — Methodisuniform(rn::AbstractRuleNode)Returns true iff the children of the AbstractRuleNode are known.
HerbCore.node_depth — Methodnode_depth(root::AbstractRuleNode, node::AbstractRuleNode)::IntReturn the depth of node for an AbstractRuleNode tree rooted at root. Depth is 1 when root == node.
HerbCore.number_of_holes — Methodnumber_of_holes(rn::AbstractRuleNode)::IntRecursively counts the number of holes in an AbstractRuleNode
HerbCore.rulesoftype — Functionrulesoftype(node::RuleNode, grammar::AbstractGrammar, ruletype::Symbol[, ignoreNode::AbstractRuleNode])Returns every rule of nonterminal symbol ruletype from the grammar that is also used in the AbstractRuleNode tree, but not in the ignoreNode subtree.
HerbCore.rulesoftype — Functionrulesoftype(node::RuleNode, ruleset::Set{Int}[, ignoreNode::AbstractRuleNode])
rulesoftype(node::RuleNode, rule_index::Int[, ignoreNode::AbstractRuleNode])Returns every rule in the ruleset that is also used in the AbstractRuleNode tree, but not in the ignoreNode subtree.
HerbCore.rulesonleft — Methodrulesonleft(expr::RuleNode, path::Vector{Int})::Set{Int}Finds all rules that are used in the left subtree defined by the path.
HerbCore.swap_node — Methodswap_node(expr::AbstractRuleNode, new_expr::AbstractRuleNode, path::Vector{Int})Replace a node in expr, specified by path, with new_expr. Path is a sequence of child indices, starting from the root node.
HerbCore.swap_node — Methodswap_node(expr::RuleNode, node::RuleNode, child_index::Int, new_expr::RuleNode)Replace child i of a node, a part of larger expr, with new_expr.
HerbCore.update_rule_indices! — Functionupdate_rule_indices!(...)Updates the rule indices of the given rule node, hole or grammar constraint when the grammar changes.
HerbCore.update_rule_indices! — Methodupdate_rule_indices!(hole::AbstractHole, n_rules::Integer, mapping::AbstractDict{<:Integer, <:Integer})Updates the domains of hole and its children according to mapping. For AbstractHoles, this updates both the size of the domain BitVector and the rule indices. Errors if the length of the domain vector exceeds new n_rules.
Arguments
hole: The currentAbstractHolebeing processedn_rules: The new number of rules in the grammarmapping: A dictionary mapping the old rule indices to new ones
HerbCore.update_rule_indices! — Methodupdate_rule_indices!(node::AbstractHole, n_rules::Integer)Resize the domains of hole and its children. Errors if the length of the domain vector exceeds new n_rules.
Arguments
hole: The currentAbstractHolebeing processedn_rules: The new number of rules in the grammar
HerbCore.update_rule_indices! — Methodupdate_rule_indices!(node::RuleNode, n_rules::Integer, mapping::AbstractDict{<:Integer, <:Integer})Remap the rule indices of node and its children according to the provided mapping. Errors if the rule index exceeds new n_rules.
Arguments
node: The currentRuleNodebeing processedn_rules: The new number of rules in the grammarmapping: A dictionary mapping old rule indices to new rule indices
HerbCore.update_rule_indices! — Methodupdate_rule_indices!(node::RuleNode, n_rules::Integer)Updates the node as required when grammar size changes. Errors if the rule index exceeds new n_rules.
Arguments
node: The currentRuleNodebeing processedn_rules: The new number of rules in the grammar
Index
HerbConstraints.AbstractGrammarConstraintHerbConstraints.AbstractLocalConstraintHerbConstraints.AbstractStateManagerHerbConstraints.ContainsHerbConstraints.ContainsSubtreeHerbConstraints.DomainRuleNodeHerbConstraints.ForbiddenHerbConstraints.ForbiddenSequenceHerbConstraints.GenericSolverHerbConstraints.GenericSolverHerbConstraints.GenericSolverHerbConstraints.LessThanOrEqualHardFailHerbConstraints.LessThanOrEqualResultHerbConstraints.LessThanOrEqualSoftFailHerbConstraints.LessThanOrEqualSuccessHerbConstraints.LessThanOrEqualSuccessEqualityHerbConstraints.LessThanOrEqualSuccessLessThanHerbConstraints.LessThanOrEqualSuccessWithHolesHerbConstraints.LocalContainsHerbConstraints.LocalContainsSubtreeHerbConstraints.LocalContainsSubtreeHerbConstraints.LocalForbiddenHerbConstraints.LocalForbiddenSequenceHerbConstraints.LocalOrderedHerbConstraints.LocalUniqueHerbConstraints.MakeEqualHardFailHerbConstraints.MakeEqualResultHerbConstraints.MakeEqualSoftFailHerbConstraints.MakeEqualSuccessHerbConstraints.OrderedHerbConstraints.PatternMatchHardFailHerbConstraints.PatternMatchResultHerbConstraints.PatternMatchSoftFailHerbConstraints.PatternMatchSuccessHerbConstraints.PatternMatchSuccessWhenHoleAssignedToHerbConstraints.SolverHerbConstraints.SolverStateHerbConstraints.StateHoleHerbConstraints.StateHoleHerbConstraints.StateHoleHerbConstraints.StateIntHerbConstraints.StateIntBackupHerbConstraints.StateManagerHerbConstraints.StateSparseSetHerbConstraints.StateSparseSetHerbConstraints.StateStackHerbConstraints.StateStackHerbConstraints.StateStackHerbConstraints.UniformSolverHerbConstraints.UniformSolverHerbConstraints.UniqueHerbConstraints.VarNodeHerbCore.AbstractConstraintHerbCore.AbstractGrammarHerbCore.AbstractHoleHerbCore.AbstractRuleNodeHerbCore.AbstractUniformHoleHerbCore.HoleHerbCore.HoleReferenceHerbCore.RuleNodeHerbCore.RuleNodeHerbCore.RuleNodeHerbCore.UniformHoleHerbGrammar.ContextSensitiveGrammarHerbGrammar.NodeLocHerbGrammar.SymbolTableHerbSearch.AbstractBFSIteratorHerbSearch.AbstractDFSIteratorHerbSearch.AbstractMHSearchIteratorHerbSearch.AbstractSASearchIteratorHerbSearch.AbstractVLSNSearchIteratorHerbSearch.BFSIteratorHerbSearch.DFSIteratorHerbSearch.ExpandFailureReasonHerbSearch.GeneticSearchIteratorHerbSearch.MHSearchIteratorHerbSearch.MLFSIteratorHerbSearch.ProgramIteratorHerbSearch.RandomIteratorHerbSearch.SASearchIteratorHerbSearch.StochasticSearchIteratorHerbSearch.SynthResultHerbSearch.TopDownIteratorHerbSearch.UniformIteratorHerbSearch.UniformIteratorHerbSearch.VLSNSearchIteratorHerbSpecification.AbstractDependentTypeSpecificationHerbSpecification.AgdaSpecificationHerbSpecification.IOExampleHerbSpecification.MetricProblemHerbSpecification.ProblemHerbSpecification.SMTSpecificationHerbSpecification.TraceBase.collectBase.collectBase.findallBase.findfirstBase.findlastBase.getBase.getindexBase.getindexBase.inBase.inBase.insert!Base.islessBase.iterateBase.iterateBase.iterateBase.iterateBase.iterateBase.lengthBase.lengthBase.lengthBase.lengthBase.push!Base.randBase.randBase.randBase.showBase.sizeBase.sizeBase.sumHerbConstraints._containsHerbConstraints._count_occurrencesHerbConstraints._count_occurrencesHerbConstraints._count_occurrences!HerbConstraints._exchange_positions!HerbConstraints._update_bounds_val_removed!HerbConstraints._update_max_val_removed!HerbConstraints._update_min_val_removed!HerbConstraints.annotation2constraintHerbConstraints.are_disjointHerbConstraints.are_disjointHerbConstraints.backup!HerbConstraints.check_treeHerbConstraints.check_treeHerbConstraints.check_treeHerbConstraints.check_treeHerbConstraints.check_treeHerbConstraints.check_treeHerbConstraints.contains_varnodeHerbConstraints.deactivate!HerbConstraints.deactivate!HerbConstraints.decrement!HerbConstraints.fix_point!HerbConstraints.freeze_stateHerbConstraints.get_grammarHerbConstraints.get_grammarHerbConstraints.get_hole_at_locationHerbConstraints.get_hole_at_locationHerbConstraints.get_intersectionHerbConstraints.get_max_depthHerbConstraints.get_max_sizeHerbConstraints.get_nodesHerbConstraints.get_nodes_on_pathHerbConstraints.get_priorityHerbConstraints.get_starting_symbolHerbConstraints.get_stateHerbConstraints.get_treeHerbConstraints.get_treeHerbConstraints.get_tree_sizeHerbConstraints.get_valueHerbConstraints.increment!HerbConstraints.is_subdomainHerbConstraints.is_subdomainHerbConstraints.isfeasibleHerbConstraints.isfeasibleHerbConstraints.load_state!HerbConstraints.make_equal!HerbConstraints.make_less_than_or_equal!HerbConstraints.make_less_than_or_equal!HerbConstraints.make_less_than_or_equal!HerbConstraints.new_state!HerbConstraints.notify_new_nodeHerbConstraints.notify_new_nodesHerbConstraints.notify_new_nodesHerbConstraints.notify_tree_manipulationHerbConstraints.notify_tree_manipulationHerbConstraints.partitionHerbConstraints.pattern_matchHerbConstraints.pattern_matchHerbConstraints.pattern_matchHerbConstraints.pattern_matchHerbConstraints.pattern_matchHerbConstraints.pattern_matchHerbConstraints.post!HerbConstraints.post!HerbConstraints.propagate!HerbConstraints.propagate!HerbConstraints.propagate!HerbConstraints.propagate!HerbConstraints.propagate!HerbConstraints.propagate!HerbConstraints.propagate!HerbConstraints.remove!HerbConstraints.remove!HerbConstraints.remove!HerbConstraints.remove!HerbConstraints.remove!HerbConstraints.remove_above!HerbConstraints.remove_above!HerbConstraints.remove_above!HerbConstraints.remove_all_but!HerbConstraints.remove_all_but!HerbConstraints.remove_all_but!HerbConstraints.remove_all_but!HerbConstraints.remove_all_but!HerbConstraints.remove_all_but!HerbConstraints.remove_below!HerbConstraints.remove_below!HerbConstraints.remove_below!HerbConstraints.remove_node!HerbConstraints.restore!HerbConstraints.restore!HerbConstraints.restore!HerbConstraints.save_state!HerbConstraints.save_state!HerbConstraints.save_state!HerbConstraints.schedule!HerbConstraints.set_infeasible!HerbConstraints.set_infeasible!HerbConstraints.set_value!HerbConstraints.shouldscheduleHerbConstraints.shouldscheduleHerbConstraints.simplify_hole!HerbConstraints.substitute!HerbCore.contains_holeHerbCore.contains_holeHerbCore.contains_indexHerbCore.contains_nonuniform_holeHerbCore.depthHerbCore.get_childrenHerbCore.get_node_at_locationHerbCore.get_node_at_locationHerbCore.get_node_at_locationHerbCore.get_node_at_locationHerbCore.get_pathHerbCore.get_pathHerbCore.get_pathHerbCore.get_ruleHerbCore.get_ruleHerbCore.get_rulesequenceHerbCore.hasdynamicvalueHerbCore.have_same_shapeHerbCore.is_domain_validHerbCore.isfilledHerbCore.isfilledHerbCore.issameHerbCore.isuniformHerbCore.node_depthHerbCore.number_of_holesHerbCore.rulesoftypeHerbCore.rulesoftypeHerbCore.rulesonleftHerbCore.swap_nodeHerbCore.swap_nodeHerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbCore.update_rule_indices!HerbGrammar.add_rule!HerbGrammar.add_rule!HerbGrammar.add_rule!HerbGrammar.addconstraint!HerbGrammar.child_typesHerbGrammar.child_typesHerbGrammar.cleanup_removed_rules!HerbGrammar.clearconstraints!HerbGrammar.containedinHerbGrammar.contains_returntypeHerbGrammar.expr2csgrammarHerbGrammar.expr2pcsgrammarHerbGrammar.expr2rulenodeHerbGrammar.expr2rulenodeHerbGrammar.expr2rulenodeHerbGrammar.expr2rulenodeHerbGrammar.get_childtypesHerbGrammar.get_domainHerbGrammar.get_domainHerbGrammar.get_rulesequenceHerbGrammar.grammar2symboltableHerbGrammar.init_probabilities!HerbGrammar.iscompleteHerbGrammar.isevalHerbGrammar.isevalHerbGrammar.isevalHerbGrammar.isprobabilisticHerbGrammar.isterminalHerbGrammar.isterminalHerbGrammar.isterminalHerbGrammar.isvariableHerbGrammar.isvariableHerbGrammar.isvariableHerbGrammar.isvariableHerbGrammar.log_probabilityHerbGrammar.max_arityHerbGrammar.max_rulenode_log_probabilityHerbGrammar.merge_grammars!HerbGrammar.mindepthHerbGrammar.mindepth_mapHerbGrammar.nchildrenHerbGrammar.nchildrenHerbGrammar.nonterminalsHerbGrammar.normalize!HerbGrammar.parse_probabilistic_ruleHerbGrammar.probabilityHerbGrammar.read_csgHerbGrammar.read_pcsgHerbGrammar.remove_rule!HerbGrammar.return_typeHerbGrammar.return_typeHerbGrammar.return_typeHerbGrammar.root_node_locHerbGrammar.rulenode2exprHerbGrammar.rulenode_log_probabilityHerbGrammar.rulesonleftHerbGrammar.store_csgHerbGrammar.subsequenceofHerbGrammar.swap_nodeHerbGrammar.swap_nodeHerbInterpret.evaluate_programHerbInterpret.execute_on_inputHerbInterpret.execute_on_inputHerbInterpret.execute_on_inputHerbInterpret.execute_on_inputHerbInterpret.interpretHerbSearch._calculate_costHerbSearch._find_next_complete_treeHerbSearch.acceptHerbSearch.best_acceptHerbSearch.calculate_costHerbSearch.const_temperatureHerbSearch.constructNeighbourhoodHerbSearch.constructNeighbourhoodRuleSubsetHerbSearch.cross_overHerbSearch.crossover_swap_children_1HerbSearch.crossover_swap_children_2HerbSearch.decreasing_temperatureHerbSearch.default_fitnessHerbSearch.derivation_heuristicHerbSearch.derivation_heuristicHerbSearch.derivation_heuristicHerbSearch.enumerate_neighbours_proposeHerbSearch.evaluateHerbSearch.extract_name_from_argumentHerbSearch.fitnessHerbSearch.generate_branchesHerbSearch.get_best_programHerbSearch.heuristic_leftmostHerbSearch.heuristic_randomHerbSearch.heuristic_rightmostHerbSearch.heuristic_smallest_domainHerbSearch.hole_heuristicHerbSearch.is_field_declHerbSearch.is_kwdefHerbSearch.mean_squared_errorHerbSearch.misclassificationHerbSearch.mutate!HerbSearch.mutate_random!HerbSearch.neighbourhoodHerbSearch.next_solution!HerbSearch.priority_functionHerbSearch.priority_functionHerbSearch.priority_functionHerbSearch.priority_functionHerbSearch.probabilistic_acceptHerbSearch.probabilistic_accept_with_temperatureHerbSearch.probabilistic_accept_with_temperature_fractionHerbSearch.processkwarg!HerbSearch.proposeHerbSearch.random_fill_proposeHerbSearch.select_chromosomeHerbSearch.select_fitness_proportional_parentsHerbSearch.select_parentsHerbSearch.set_stateholes!HerbSearch.synthHerbSearch.temperatureHerbSearch.validate_iteratorStatsBase.sampleStatsBase.sampleStatsBase.sampleStatsBase.sampleHerbConstraints.@csgrammar_annotatedHerbCore.@rulenodeHerbGrammar.@cfgrammarHerbGrammar.@csgrammarHerbGrammar.@pcsgrammarHerbSearch.@programiterator