Source code for mathmaker.lib.shared

# -*- coding: utf-8 -*-

# Mathmaker creates automatically maths exercises sheets
# with their answers
# Copyright 2006-2017 Nicolas Hainaux <nh.techn@gmail.com>

# This file is part of Mathmaker.

# Mathmaker is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# any later version.

# Mathmaker is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with Mathmaker; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

import sqlite3

from mathmaker import settings
from mathmaker.lib.machine import LaTeX
from mathmaker.lib.constants import latex


[docs]def init(): global db global shapes_db global solids_db global natural_nb_tuples_db global unique_letters_words_source global names_source global mini_problems_wordings_source global mini_problems_prop_wordings_source global mini_problems_time_wordings_source global divisibility_statements_source global markup global deci_int_triples_for_prop_source global int_pairs_source global int_triples_source global int_quadruples_source global int_quintuples_source global int_sextuples_source global nnpairs_source global nn_deci_clever_pairs_source global nntriples_source global nnquadruples_source global nnquintuples_source global nnsextuples_source global simple_fractions_source global single_ints_source global single_deci1_source global angle_decorations_source global angle_ranges_source global int_deci_clever_pairs_source global digits_places_source global fracdigits_places_source global int_fracs_source global deci_10_100_1000_multi_source global deci_10_100_1000_divi_source global deci_one_digit_multi_source global deci_one_digit_divi_source global trigo_functions_source global trigo_vocabulary_source global mc_source global machine global number_of_the_question global order_of_operations_variants_source global unitspairs_source global alternate_source # , alternate_source2 global alternate_2masks_source global alternate_3masks_source global alternate_4masks_source global alternate_nb2nb3_in_mini_pb_prop_source global decimals_source global extdecimals_source global dvipsnames_selection_source global polygons_source global anglessets_source global anglessets_1_1_source global anglessets_1_1r_source global anglessets_2_source global anglessets_1_1_1_source global anglessets_1_1_1r_source global anglessets_2_1_source global anglessets_2_1r_source global anglessets_3_source global scalene_triangle_shapes_source global right_triangle_shapes_source global triangle_2_1_shapes_source global triangle_3_shapes_source global quadrilateral_1_1_1_1_shapes_source global quadrilateral_2_1_1_shapes_source global quadrilateral_2_2_shapes_source global quadrilateral_3_1_shapes_source global quadrilateral_4_shapes_source global pentagon_1_1_1_1_1_shapes_source global pentagon_2_1_1_1_shapes_source global pentagon_2_2_1_shapes_source global pentagon_3_1_1_shapes_source global pentagon_3_2_shapes_source global pentagon_4_1_shapes_source global pentagon_5_shapes_source global hexagon_1_1_1_1_1_1_shapes_source global hexagon_2_1_1_1_1_shapes_source global hexagon_2_2_1_1_shapes_source global hexagon_2_2_2_shapes_source global hexagon_3_1_1_1_shapes_source global hexagon_3_2_1_shapes_source global hexagon_3_3_shapes_source global hexagon_4_1_1_shapes_source global hexagon_4_2_shapes_source global hexagon_5_1_shapes_source global hexagon_6_shapes_source global rightcuboids_source global ls_marks_source global enable_js_form global distcodes_source global directions_source global times_source enable_js_form = False log = settings.mainlogger db = sqlite3.connect(settings.path.db) shapes_db = sqlite3.connect(settings.path.shapes_db) anglessets_db = sqlite3.connect(settings.path.anglessets_db) solids_db = sqlite3.connect(settings.path.solids_db) natural_nb_tuples_db = sqlite3.connect(settings.path.natural_nb_tuples_db) from mathmaker.lib.tools import database unique_letters_words_source = {} for n in settings.available_wNl: source_name = 'w{}l'.format(n) unique_letters_words_source.update( {n: database.source(source_name, ['id', 'word'], language=settings.language)}) names_source = database.source("names", ["id", "name"], language=settings.language) mini_problems_wordings_source = database.source("mini_pb_wordings", ["id", "wording_context", "wording"]) mini_problems_prop_wordings_source = database.source( "mini_pb_prop_wordings", ["id", "wording_context", "wording", "nb1_xcoeff", "nb2_xcoeff", "nb3_xcoeff"]) mini_problems_time_wordings_source = database.source( "mini_pb_time_wordings", ["id", "wording_context", "type", "wording", "mini_start_hour", "mini_start_minute", "maxi_start_hour", "maxi_start_minute", "mini_duration_hour", "mini_duration_minute", "maxi_duration_hour", "maxi_duration_minute", "mini_end_hour", "mini_end_minute", "maxi_end_hour", "maxi_end_minute"]) divisibility_statements_source = database.source("divisibility_statements", ["id", "wording"]) deci_int_triples_for_prop_source = database.source( "deci_int_triples_for_prop", ["id", "coeff", "nb1", "nb2", "nb3", "solution"]) int_pairs_source = database.source("int_pairs", ["id", "nb1", "nb2"]) int_triples_source = database.source("int_triples", ["id", "nb1", "nb2", "nb3"]) int_quadruples_source = database.source("int_quadruples", ["id", "nb1", "nb2", "nb3", "nb4"]) int_quintuples_source = database.source("int_quintuples", ["id", "nb1", "nb2", "nb3", "nb4", "nb5"]) nnpairs_source = database.source("pairs", ["id", "nb1", "nb2"], db=natural_nb_tuples_db) nn_deci_clever_pairs_source = database.source("nn_deci_clever_pairs", ["id", "nb1", "nb2"]) nntriples_source = database.source("triples", ["id", "nb1", "nb2", "nb3"], db=natural_nb_tuples_db) nnquadruples_source = database.source("quadruples", ["id", "nb1", "nb2", "nb3", "nb4"], db=natural_nb_tuples_db) nnquintuples_source = database.source("quintuples", ["id", "nb1", "nb2", "nb3", "nb4", "nb5"], db=natural_nb_tuples_db) nnsextuples_source = database.source("sextuples", ["id", "nb1", "nb2", "nb3", "nb4", "nb5", "nb6"], db=natural_nb_tuples_db) int_sextuples_source = database.source("int_sextuples", ["id", "nb1", "nb2", "nb3", "nb4", "nb5", "nb6"]) simple_fractions_source = database.source('simple_fractions', ['id', 'nb1', 'nb2']) single_ints_source = database.source("single_ints", ["id", "nb1"]) single_deci1_source = database.source("single_deci1", ["id", "nb1"]) angle_ranges_source = database.source("angle_ranges", ["id", "nb1", "nb2"]) angle_decorations_source = database.source( 'angle_decorations', ['id', 'variety', 'hatchmark']) int_deci_clever_pairs_source = database.source("int_deci_clever_pairs", ["id", "nb1", "nb2"]) order_of_operations_variants_source = database.source( 'order_of_operations_variants', ['id', 'nb1']) unitspairs_source = database.source('units_conversions', ['id', 'unit1', 'unit2', 'direction', 'category', 'level', 'dimension']) decimals_source = database.source('decimals', ['id', 'nb1']) digits_places_source = database.source('digits_places', ['id', 'place']) fracdigits_places_source = database.source('fracdigits_places', ['id', 'place']) dvipsnames_selection_source = database.source('dvipsnames_selection', ['id', 'color_name']) ls_marks_source = database.source('ls_marks', ['id', 'mark']) distcodes_source = database.source('distcodes', ['id', 'distcode']) directions_source = database.source('directions', ['id', 'direction']) times_source = database.source('times', ['id', 'hour', 'minute']) anglessets_source = database.source('anglessets', ['id', 'nbof_angles', 'distcode', 'variant', 'nbof_right_angles', 'equal_angles', 'table2', 'table3', 'table4', 'table5', 'table6'], db=anglessets_db) anglessets_1_1_source = database.source( '_1_1_subvariants', ['id', 'subvariant_nb'], db=anglessets_db) anglessets_1_1r_source = database.source( '_1_1r_subvariants', ['id', 'subvariant_nb'], db=anglessets_db) anglessets_2_source = database.source( '_2_subvariants', ['id', 'subvariant_nb'], db=anglessets_db) anglessets_1_1_1_source = database.source( '_1_1_1_subvariants', ['id', 'subvariant_nb'], db=anglessets_db) anglessets_1_1_1r_source = database.source( '_1_1_1r_subvariants', ['id', 'subvariant_nb'], db=anglessets_db) anglessets_2_1_source = database.source( '_2_1_subvariants', ['id', 'subvariant_nb'], db=anglessets_db) anglessets_2_1r_source = database.source( '_2_1r_subvariants', ['id', 'subvariant_nb'], db=anglessets_db) anglessets_3_source = database.source( '_3_subvariants', ['id', 'subvariant_nb'], db=anglessets_db) polygons_source = database.source('polygons', ['id', 'sides_nb', 'type', 'special', 'codename', 'sides_particularity', 'level', 'variant', 'table2', 'table3', 'table4', 'table5', 'table6'], db=shapes_db) scalene_triangle_shapes_source = database.source('scalene_triangle_shapes', ['id', 'shape_nb'], db=shapes_db) right_triangle_shapes_source = database.source('right_triangle_shapes', ['id', 'shape_nb'], db=shapes_db) triangle_2_1_shapes_source = database.source( 'triangle_2_1_shapes', ['id', 'shape_nb'], db=shapes_db) triangle_3_shapes_source = database.source( 'triangle_3_shapes', ['id', 'shape_nb'], db=shapes_db) quadrilateral_1_1_1_1_shapes_source = database.source( 'quadrilateral_1_1_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) quadrilateral_2_1_1_shapes_source = database.source( 'quadrilateral_2_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) quadrilateral_2_2_shapes_source = database.source( 'quadrilateral_2_2_shapes', ['id', 'shape_nb'], db=shapes_db) quadrilateral_3_1_shapes_source = database.source( 'quadrilateral_3_1_shapes', ['id', 'shape_nb'], db=shapes_db) quadrilateral_4_shapes_source = database.source( 'quadrilateral_4_shapes', ['id', 'shape_nb'], db=shapes_db) pentagon_1_1_1_1_1_shapes_source = database.source( 'pentagon_1_1_1_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) pentagon_2_1_1_1_shapes_source = database.source( 'pentagon_2_1_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) pentagon_2_2_1_shapes_source = database.source( 'pentagon_2_2_1_shapes', ['id', 'shape_nb'], db=shapes_db) pentagon_3_1_1_shapes_source = database.source( 'pentagon_3_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) pentagon_3_2_shapes_source = database.source( 'pentagon_3_2_shapes', ['id', 'shape_nb'], db=shapes_db) pentagon_4_1_shapes_source = database.source( 'pentagon_4_1_shapes', ['id', 'shape_nb'], db=shapes_db) pentagon_5_shapes_source = database.source( 'pentagon_5_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_1_1_1_1_1_1_shapes_source = database.source( 'hexagon_1_1_1_1_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_2_1_1_1_1_shapes_source = database.source( 'hexagon_2_1_1_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_2_2_1_1_shapes_source = database.source( 'hexagon_2_2_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_2_2_2_shapes_source = database.source( 'hexagon_2_2_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_3_1_1_1_shapes_source = database.source( 'hexagon_3_1_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_3_2_1_shapes_source = database.source( 'hexagon_3_2_1_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_3_3_shapes_source = database.source( 'hexagon_3_3_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_4_1_1_shapes_source = database.source( 'hexagon_4_1_1_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_4_2_shapes_source = database.source( 'hexagon_4_2_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_5_1_shapes_source = database.source( 'hexagon_5_1_shapes', ['id', 'shape_nb'], db=shapes_db) hexagon_6_shapes_source = database.source( 'hexagon_6_shapes', ['id', 'shape_nb'], db=shapes_db) rightcuboids_source = database.source( 'polyhedra', ['id', 'faces_nb', 'variant'], db=solids_db) markup = latex.MARKUP from mathmaker.lib.tools.database import sub_source, mc_source from mathmaker.lib.tools.database import generate_random_decimal_nb extdecimals_source = sub_source('extdecimals', ondemand=True, generator_fct=generate_random_decimal_nb) alternate_source = sub_source('alternate') alternate_2masks_source = sub_source('alternate_2masks') alternate_3masks_source = sub_source('alternate_3masks') alternate_4masks_source = sub_source('alternate_4masks') alternate_nb2nb3_in_mini_pb_prop_source = \ sub_source('alternate_nb2nb3_in_mini_pb_prop') # alternate_source2 = sub_source('alternate2') trigo_functions_source = sub_source('trigo_functions') trigo_vocabulary_source = sub_source('trigo_vocabulary') int_fracs_source = sub_source('int_irreducible_frac') deci_10_100_1000_multi_source = sub_source( 'decimal_and_10_100_1000_for_multi') deci_10_100_1000_divi_source = sub_source( 'decimal_and_10_100_1000_for_divi') deci_one_digit_multi_source = sub_source( 'decimal_and_one_digit_for_multi') deci_one_digit_divi_source = sub_source( 'decimal_and_one_digit_for_divi') mc_source = mc_source() try: machine = LaTeX(settings.language) except TypeError: log.error('An exception occured while creating the LaTeX machine.', exc_info=True) raise RuntimeError('Could not create the machine object! ' 'Check logfile') number_of_the_question = 0