code: def test_validate_program():
      """Check that valid programs are accepted & invalid ones raise error"""
  
      function_set = [
          add2,
          sub2,
          mul2,
          div2,
          sqrt1,
          log1,
          abs1,
          max2,
          min2,
      ]
      arities = (
          {
              1: [sqrt1, log1, abs1],
              2: [add2, sub2, mul2, div2, max2, min2],
          },
      )
      init_depth = (2, 6)
      init_method = "half and half"
      n_features = 10
      const_range = (-1.0, 1.0)
      metric = "mean absolute error"
      p_point_replace = 0.05
      parsimony_coefficient = 0.1
  
      random_state = check_random_state(415)
      test_gp = [
          sub2,
          abs1,
          sqrt1,
          log1,
          log1,
          sqrt1,
          7,
          abs1,
          abs1,
          abs1,
          log1,
          sqrt1,
          2,
      ]
  
      # This one should be fine
      _ = _Program(
          function_set,
          arities,
          init_depth,
          init_method,
          n_features,
          const_range,
          metric,
          p_point_replace,
          parsimony_coefficient,
          random_state,
          program=test_gp,
      )
  
      # Now try a couple that shouldn't be
      assert_raises(
          ValueError,
          _Program,
          function_set,
          arities,
          init_depth,
          init_method,
          n_features,
          const_range,
          metric,
          p_point_replace,
          parsimony_coefficient,
          random_state,
          program=test_gp[:-1],
      )
      assert_raises(
          ValueError,
          _Program,
          function_set,
          arities,
          init_depth,
          init_method,
          n_features,
          const_range,
          metric,
          p_point_replace,
          parsimony_coefficient,
          random_state,
          program=test_gp + [1],
      )
  
imports: import pickle
  import pytest
  import sys
  from io import StringIO
  import numpy
  from scipy.stats import pearsonr, spearmanr
  from sklearn.datasets import load_diabetes, load_breast_cancer
  from sklearn.metrics import mean_absolute_error
  from sklearn.model_selection import GridSearchCV
  from sklearn.pipeline import make_pipeline
  from sklearn.preprocessing import StandardScaler
  from sklearn.tree import DecisionTreeRegressor
  from sklearn.utils._testing import assert_almost_equal
  from sklearn.utils._testing import assert_array_equal
  from sklearn.utils._testing import assert_array_almost_equal
  from sklearn.utils._testing import assert_raises
  from sklearn.utils.validation import check_random_state
  from gplearn.genetic import SymbolicClassifier, SymbolicRegressor
  from gplearn.genetic import SymbolicTransformer
  from gplearn.fitness import weighted_pearson, weighted_spearman
  from gplearn._program import _Program
  from gplearn.fitness import _fitness_map
  from gplearn.functions import add2, sub2, mul2, div2, sqrt1, log1, abs1, max2, min2
  from gplearn.functions import _Function
label_desc: Use image node_id 4 for calling a global function with example usage: test_validate_program() without return types